int getRowPin(int r) {
if (r == 0) return 7;
if (r == 1) return 8;
if (r == 2) return 12;
return 13;
}
int getColPin(int c) {
if (c == 0) return 5;
if (c == 1) return 6;
if (c == 2) return 9;
return 10;
}
char getKey(int r, int c) {
if (r == 0 && c == 0) return '1';
if (r == 0 && c == 1) return '2';
if (r == 0 && c == 2) return '3';
if (r == 0 && c == 3) return 'A';
if (r == 1 && c == 0) return '4';
if (r == 1 && c == 1) return '5';
if (r == 1 && c == 2) return '6';
if (r == 1 && c == 3) return 'B';
if (r == 2 && c == 0) return '7';
if (r == 2 && c == 1) return '8';
if (r == 2 && c == 2) return '9';
if (r == 2 && c == 3) return 'C';
if (r == 3 && c == 0) return '*';
if (r == 3 && c == 1) return '0';
if (r == 3 && c == 2) return '#';
return 'D';
}
void setup() {
Serial.begin(9600);
for (int r = 0; r < 4; r++) {
pinMode(getRowPin(r), INPUT);
}
for (int c = 0; c < 4; c++) {
pinMode(getColPin(c), INPUT_PULLUP);
}
}
void loop() {
for (int r = 0; r < 4; r++) {
int rowPin = getRowPin(r);
pinMode(rowPin, OUTPUT);
digitalWrite(rowPin, LOW);
delay(1);
for (int c = 0; c < 4; c++) {
int colPin = getColPin(c);
if (digitalRead(colPin) == LOW) {
Serial.print("Pressed: ");
Serial.println(getKey(r, c));
while (digitalRead(colPin) == LOW) {
delay(10);
}
delay(100);
}
}
pinMode(rowPin, INPUT);
}
}