/*
74HC165 Shift register input example
https://wokwi.com/arduino/projects/306031380875182657
(C) 2021, Uri Shaked
*/
const int dataPin = 2; /* Q7 */
const int clockPin = 3; /* CP */
const int latchPin = 4; /* PL */
//const int dataPin2 = 13;
// 8 * n : n 은 165가 연결된 갯수
#define numBits 8 *2 /* Set to 8 * number of shift registers */
int bits[numBits] = {0,};
void setup() {
Serial.begin(115200);
pinMode(dataPin, INPUT);
//pinMode(dataPin2, INPUT);
pinMode(clockPin, OUTPUT);
pinMode(latchPin, OUTPUT);
}
void loop() {
// Step 1: Sample
digitalWrite(latchPin, LOW);
digitalWrite(latchPin, HIGH);
// Step 2: Shift
Serial.print("Bits: ");
for (int i = 0; i < numBits; i++) {
bits[i] = digitalRead(dataPin);
if (bits[i] == HIGH) {
Serial.print("1");
} else {
Serial.print("0");
}
digitalWrite(clockPin, HIGH); // Shift out the next bit
digitalWrite(clockPin, LOW);
}
Serial.println();
KeyMapping(bits);
delay(1000);
}
void KeyMapping(int *GetBits) {
int firstIndex = 0, secondIndex = 0;
int savedArray[numBits*numBits] = {0,};
for(int i=0; i<numBits/2; i++){
if(GetBits[i] == 1){
for(int j= numBits/2; j<numBits; j++){
if(GetBits[j] == 1){
firstIndex = i;
secondIndex = numBits/2 * (j - 8) + 1;
savedArray[firstIndex + secondIndex - 1] = 1;
}
}
}
}
for(int i=0; i<numBits*numBits; i++){
if(savedArray[i] == 1){
Serial.print("Pressed Number : ");
Serial.println(i + 1);
}
}
}