const int CLOCK_PIN = 10;
const int LATCH_PIN = 11;
const int DATA_PIN = 12;
const int NUM_BITS = 8;
int oldVal = -1; // ensures change on start up
void setup() {
Serial.begin(115200);
pinMode(DATA_PIN, INPUT);
pinMode(CLOCK_PIN, OUTPUT);
pinMode(LATCH_PIN, OUTPUT);
}
void loop() {
int inVal = 0;
// sample
digitalWrite(LATCH_PIN, LOW);
digitalWrite(LATCH_PIN, HIGH);
// shift bits in, LSB (D7) > MSB (D0)
for (int i = 0; i < NUM_BITS; i++) {
int bit = digitalRead(DATA_PIN);
bitWrite(inVal, i, bit);
digitalWrite(CLOCK_PIN, HIGH); // Shift out the next bit
digitalWrite(CLOCK_PIN, LOW);
}
// display if data changed
if (inVal != oldVal) {
oldVal = inVal;
// button number
if (inVal == 0) {
Serial.println("No button pressed");
} else {
// number buttons left to right
for (int i = (NUM_BITS - 1); i >= 0; i--) {
if (bitRead( inVal, i)) {
Serial.print("Button ");
Serial.print(NUM_BITS - i);
Serial.println(" pressed");
}
}
}
// hex and decimal values
if (inVal < 16) {
Serial.print("Hex: 0x0");
} else {
Serial.print("Hex: 0x");
}
Serial.println(inVal, HEX);
Serial.print("Dec: ");
Serial.println(inVal);
Serial.println();
delay(50); // debounce
}
}
MSB
LSB
1
2
3
4
5
6
7
8