Hello everyone! I'm new to Arduino world and I'm working on a University project.
I'm trying to simulate an Arduino circuit using a 16-pin multiplexer (CD74HC4067) to expand the number of pin slots on my Arduino Uno. I want to attach push buttons to the multiplexer and detect button presses using the Arduino. However, I'm facing an issue where the Arduino is not detecting any button presses.
I have written the following code to read the button states:
const int s0 = 8;
const int s1 = 9;
const int s2 = 10;
const int s3 = 11;
const int sig = 2;
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);
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);
return digitalRead(sig);
}
I am using the Wokwi platform for simulation. Could this be related to the issue? Is there anything specific I need to consider when simulating a multiplexer using the WoWki platform?
I link the circuit image (I was testing the circuit only with 2 buttons connected).
I can share you also the link:
https://wokwi.com/projects/380511599209956353
Any help or suggestions would be greatly appreciated. Thank you!
I have connected the push buttons to the multiplexer and used the cdRead function to read the button states. However, when I press a button, the Arduino never detects it. I have checked the connections and they seem to be correct.
