const uint8_t ADDR_PINS[] = {2, 3, 4, 5};
const uint8_t SIG1_PIN = 7;
const uint8_t SIG2_PIN = 6;
bool buttonStates[32];
bool oldSwStates[32];
void setMuxAddress(uint8_t value) {
if (value > 15) value = 15; // Clamp to 4-bit max
for (uint8_t addr = 0; addr < 4; addr++) {
digitalWrite(ADDR_PINS[addr], (value >> addr) & 0x01);
}
}
void printBits() {
Serial.print("> ");
for (uint8_t sw = 0; sw < 32; sw++) {
Serial.print(buttonStates[sw] ? '1' : '0');
}
Serial.println();
}
void setup() {
Serial.begin(115200);
for (uint8_t addr = 0; addr < 4; addr++) {
pinMode(ADDR_PINS[addr], OUTPUT);
}
pinMode(SIG1_PIN, INPUT);
pinMode(SIG2_PIN, INPUT);
Serial.println("Push button!\n");
printBits();
}
void loop() {
bool changed = false;
for (uint8_t addr = 0; addr < 16; addr++) {
setMuxAddress(addr);
//delayMicroseconds(50);
delay(10);
buttonStates[addr] = digitalRead(SIG1_PIN);
buttonStates[addr + 16] = digitalRead(SIG2_PIN);
}
for (uint8_t sw = 0; sw < 32; sw++) {
if (buttonStates[sw] != oldSwStates[sw]) {
oldSwStates[sw] = buttonStates[sw];
if (buttonStates[sw] == 1) {
changed = true;
}
//changed = true;
}
}
if (changed) {
printBits();
}
delay(50);
}
Loading
cd74hc4067
cd74hc4067
Loading
cd74hc4067
cd74hc4067