#include <LiquidCrystal_I2C.h>
const int K = 20;
const char keymap[4][4] = {
{ '1', '2', '3' ,'A'} ,
{ '4', '5', '6','B' } ,
{ '7', '8', '9','C' } ,
{ '*', '0', '#','D' }
};
const int rP[4] = {9, 8, 7, 6};
const int cP[4] = {5, 4, 3, 2};
void setup() {
Serial.begin(9600);
Serial.println("Ready to input:");
for (int r = 0; r < 4; r++) {
pinMode(rP[r], INPUT_PULLUP);
}
for (int c = 0; c <4; c++) {
pinMode(cP[c], OUTPUT);
digitalWrite(cP[c], HIGH);
}
}
void loop() {
char key = getKey();
if (key != 0) {
Serial.print("Key pressed: ");
Serial.println(key);
}
}
char getKey() {
char key = 0;
for (int c = 0; c < 4; c++) {
digitalWrite(cP[c], LOW);
for (int r= 0; r <4 ; r++) {
if (digitalRead(rP[r]) == LOW) {
delay(K);
while (digitalRead(rP[r]) == LOW)
;
key = keymap[r][c];
}
}
digitalWrite(cP[c], HIGH);
}
return key;
}