// === Pin Mapping - 74HC165 (input tombol) ===
#define PL 32 // Parallel Load
#define CP 33 // Clock
#define Q7 34 // Serial Out
// === Pin Mapping - 74HC595 (output LED) ===
#define DS 5 // Serial Data Input
#define SHCP 26 // Shift Register Clock
#define STCP 25 // Storage Register Clock
void setup() {
Serial.begin(115200);
// 74HC165
pinMode(PL, OUTPUT);
pinMode(CP, OUTPUT);
pinMode(Q7, INPUT);
// 74HC595
pinMode(DS, OUTPUT);
pinMode(SHCP, OUTPUT);
pinMode(STCP, OUTPUT);
digitalWrite(PL, HIGH);
digitalWrite(CP, LOW);
digitalWrite(SHCP, LOW);
digitalWrite(STCP, LOW);
Serial.println("=== TES 74HC165 -> 74HC595 ===");
}
byte read165() {
byte value = 0;
digitalWrite(PL, LOW);
delayMicroseconds(5);
digitalWrite(PL, HIGH);
for (int i = 0; i < 8; i++) {
value <<= 1;
if (digitalRead(Q7)) value |= 1;
digitalWrite(CP, HIGH);
delayMicroseconds(5);
digitalWrite(CP, LOW);
}
return value;
}
void write595(byte data) {
digitalWrite(STCP, LOW);
shiftOut(DS, SHCP, MSBFIRST, data);
digitalWrite(STCP, HIGH);
}
void loop() {
byte buttons = read165(); // Tombol aktif LOW
byte leds = ~buttons; // Supaya ditekan = LED nyala
// Debug di Serial Monitor
Serial.print("BTN: ");
for (int i = 7; i >= 0; i--) Serial.print((buttons >> i) & 1);
Serial.print(" LED: ");
for (int i = 7; i >= 0; i--) Serial.print((leds >> i) & 1);
Serial.println();
write595(leds); // Output ke LED
delay(200);
}