#define PL_PIN 27 // Parallel Load (pin 1 on 74HC165)
#define CP_PIN 18 // Clock (pin 2)
#define QH_PIN 19 // Serial Data Out (pin 9)
void setup() {
pinMode(PL_PIN, OUTPUT);
pinMode(CP_PIN, OUTPUT);
pinMode(QH_PIN, INPUT);
digitalWrite(PL_PIN, HIGH); // Start in inactive state
digitalWrite(CP_PIN, LOW); // Start clock low
Serial.begin(115200);
}
void loop() {
byte buttonBytes[4] = {0};
// Latch parallel button states into 74HC165
digitalWrite(PL_PIN, LOW);
delayMicroseconds(5);
digitalWrite(PL_PIN, HIGH);
// Read 4 bytes (32 bits) from shift registers
for (int i = 0; i < 4; i++) {
buttonBytes[i] = shiftIn(QH_PIN, CP_PIN, MSBFIRST);
}
// Print button states (inverted: 0 = pressed, 1 = not pressed)
Serial.print("Button States: ");
for (int i = 0; i < 28; i++) {
bool isPressed = (bitRead(buttonBytes[i / 8], 7 - (i % 8)) == 0); // Active-low logic
Serial.print(isPressed ? "1" : "0"); // 1 = pressed
Serial.print(" ");
}
Serial.println();
delay(500);
}