#include <Arduino.h>
#define SR_Q7_PIN 18
#define SR_PL_PIN 13
#define SR_CP_PIN 33
#define SR_COUNT 2
#define SR_IO 8
#define IO_NUMBER (SR_COUNT * SR_IO)
uint8_t inputTable[SR_COUNT][SR_IO] = {
{ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H' },
{ 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P' },
};
uint8_t inputIndex[IO_NUMBER];
void setup() {
Serial.begin(115200);
pinMode(SR_Q7_PIN, INPUT);
pinMode(SR_CP_PIN, OUTPUT);
pinMode(SR_PL_PIN, OUTPUT);
}
void loop() {
memset(inputIndex, 0, sizeof(inputIndex));
// enable input
digitalWrite(SR_PL_PIN, LOW);
// enable output
digitalWrite(SR_PL_PIN, HIGH);
int i, pinPos, current, count = 0;
for (current = SR_COUNT - 1; current >= 0; current -- ) {
for (pinPos = SR_IO - 1; pinPos >= 0; pinPos --) {
if ( digitalRead(SR_Q7_PIN) == HIGH ) {
inputIndex[count] = (current * SR_IO) + pinPos;
count ++;
}
// shift to next
digitalWrite(SR_CP_PIN, HIGH);
digitalWrite(SR_CP_PIN, LOW);
}
}
if (count == 0)
return;
Serial.printf("Pressed Buttons => ");
for (i = 0; i < count; i ++) {
current = inputIndex[i] / 8;
pinPos = inputIndex[i] % 8;
Serial.printf("%c ", inputTable[current][pinPos]);
}
Serial.print("\n");
delay(1000);
}