// Kerl Mera //
// Multiplexing button to serial monitor
const int s0 = 8; // Digital select pins
const int s1 = 9;
const int s2 = 10;
const int s3 = 11;
const int sig = 2; // Analog read pin
boolean buttonActive[] = {false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false};
int buttonState[] = {LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW,LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW};
int lastButtonState[] = {LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW,LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW}; // the previous reading from the input pin
long lastDebounceTime[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // the last time the output pin was toggled
long debounceDelay = 50; // the debounce time;
void setup() {
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
pinMode(sig, INPUT);
digitalWrite(s0, LOW);
digitalWrite(s1, LOW);
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
Serial.begin(9600);
}
void loop() {
for(int i = 0; i < 16; i++) {
buttonState[i] = cdRead(i);
if(buttonState[i] > 0)
Serial.println(buttonState[i]);
if (buttonState[i] == 1 && lastButtonState[i] == 0) {
lastDebounceTime[i] = millis();
}
if((millis() - lastDebounceTime[i]) > debounceDelay) {
if(buttonState[i] == HIGH && buttonActive[i] == false) {
Serial.print("Pressed: ");
Serial.println((int) i);
buttonActive[i] = true;
}
else if(buttonState[i] == LOW) {
buttonActive[i] = false;
}
}
lastButtonState[i] = buttonState[i];
}
delay(500);
}
void cdSelect(unsigned int ch) {
switch (ch) {
case 0:
digitalWrite(s0, LOW);
digitalWrite(s1, LOW);
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
break;
case 1:
digitalWrite(s0, HIGH);
digitalWrite(s1, LOW);
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
break;
case 2:
digitalWrite(s0, LOW);
digitalWrite(s1, HIGH);
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
break;
case 3:
digitalWrite(s0, HIGH);
digitalWrite(s1, HIGH);
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
break;
case 4:
digitalWrite(s0, LOW);
digitalWrite(s1, LOW);
digitalWrite(s2, HIGH);
digitalWrite(s3, LOW);
break;
case 5:
digitalWrite(s0, HIGH);
digitalWrite(s1, LOW);
digitalWrite(s2, HIGH);
digitalWrite(s3, LOW);
break;
case 6:
digitalWrite(s0, LOW);
digitalWrite(s1, HIGH);
digitalWrite(s2, HIGH);
digitalWrite(s3, LOW);
break;
case 7:
digitalWrite(s0, HIGH);
digitalWrite(s1, HIGH);
digitalWrite(s2, HIGH);
digitalWrite(s3, LOW);
break;
case 8:
digitalWrite(s0, LOW);
digitalWrite(s1, LOW);
digitalWrite(s2, LOW);
digitalWrite(s3, HIGH);
break;
case 9:
digitalWrite(s0, HIGH);
digitalWrite(s1, LOW);
digitalWrite(s2, LOW);
digitalWrite(s3, HIGH);
break;
case 10:
digitalWrite(s0, LOW);
digitalWrite(s1, HIGH);
digitalWrite(s2, LOW);
digitalWrite(s3, HIGH);
break;
case 11:
digitalWrite(s0, HIGH);
digitalWrite(s1, HIGH);
digitalWrite(s2, LOW);
digitalWrite(s3, HIGH);
break;
case 12:
digitalWrite(s0, LOW);
digitalWrite(s1, LOW);
digitalWrite(s2, HIGH);
digitalWrite(s3, HIGH);
break;
case 13:
digitalWrite(s0, HIGH);
digitalWrite(s1, LOW);
digitalWrite(s2, HIGH);
digitalWrite(s3, HIGH);
break;
case 14:
digitalWrite(s0, LOW);
digitalWrite(s1, HIGH);
digitalWrite(s2, HIGH);
digitalWrite(s3, HIGH);
break;
case 15:
digitalWrite(s0, HIGH);
digitalWrite(s1, HIGH);
digitalWrite(s2, HIGH);
digitalWrite(s3, HIGH);
break;
default:
break;
}
}
unsigned short cdRead(unsigned int ch) {
cdSelect(ch);
delay(10);
return analogRead(A0);
//return digitalRead(sig); // Read the analog pin
}