#define KEY_COL_1 A0
#define KEY_COL_2 A1
#define KEY_COL_3 A2
#define KEY_COL_4 A3
#define KEY_ROW_1 9
#define KEY_ROW_2 8
#define KEY_ROW_3 7
#define KEY_ROW_4 6
char keys[4][4] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
char getKey() {
for (byte row = 0; row < 4; row++) {
pinMode(KEY_ROW_1, OUTPUT);
pinMode(KEY_ROW_2, OUTPUT);
pinMode(KEY_ROW_3, OUTPUT);
pinMode(KEY_ROW_4, OUTPUT);
digitalWrite(KEY_ROW_1, HIGH);
digitalWrite(KEY_ROW_2, HIGH);
digitalWrite(KEY_ROW_3, HIGH);
digitalWrite(KEY_ROW_4, HIGH);
switch (row) {
case 0:
digitalWrite(KEY_ROW_1, LOW);
break;
case 1:
digitalWrite(KEY_ROW_2, LOW);
break;
case 2:
digitalWrite(KEY_ROW_3, LOW);
break;
case 3:
digitalWrite(KEY_ROW_4, LOW);
break;
}
for (byte col = 0; col < 4; col++) {
if (digitalRead(KEY_COL_1 + col) == LOW) {
while (digitalRead(KEY_COL_1 + col) == LOW);
return keys[row][col];
}
}
}
return '\0';
}
void setup() {
Serial.begin(9600);
pinMode(KEY_COL_1, INPUT_PULLUP);
pinMode(KEY_COL_2, INPUT_PULLUP);
pinMode(KEY_COL_3, INPUT_PULLUP);
pinMode(KEY_COL_4, INPUT_PULLUP);
}
void loop() {
char key = getKey();
if (key != '\0') {
Serial.println(key);
delay(100);
}
}