I'm trying to build a simple joystick where once I press a button, my Arduino Leonardo sends a signal to my computer and using a library games can recognize it.
I was able to easily do that using Arduino internal pull up system, but as I needed more buttons I bought a CD74HC4067 multiplexer.
I wired it like the attachment.
In my code I did what I was doing before the MUX and called the Z(SIG) wire as an INPUT_PULLUP, the thing is, I cannot read my input. When I press my push button nothing happens, and if I try using it without the PULLUP I only get noise.
Here's my code:
#define S0 2
#define S1 3
#define S2 4
#define S3 5
#define digital 6
unsigned myDigitalRead(short inputCH, short dig_in);
void setup() {
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
digitalWrite(S0, LOW);
digitalWrite(S1, LOW);
digitalWrite(S2, LOW);
digitalWrite(S3, LOW);
pinMode(digital,INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
Serial.println(myDigitalRead(0,digital));
}
unsigned myDigitalRead(short inputCH, short dig_in)
{
unsigned digitalVal;
switch(inputCH)
{
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;
}
digitalVal = digitalRead(dig_in);
return digitalVal;
}
What can I do to read the buttons input?