const char rows = 4;
const char cols = 4;
char keys[rows][cols] = {
{ '1', '2', '3', 'A' },
{ '4', '5', '6', 'B' },
{ '7', '8', '9', 'C' },
{ '*', '0', '#', 'D' }
};
char colPins[cols] = { 5, 4, 3, 2 }; // Pins connected to C1, C2, C3, C4
char rowPins[rows] = { 9, 8, 7, 6 }; // Pins connected to R1, R2, R3, R4
void setup () {
Serial.begin(9600);
for(char r = 0; r < rows; r++){
pinMode(rowPins[r], INPUT); //set the row pins as input
digitalWrite(rowPins[r], HIGH); //turn on the pullups
}
for(char c = 0; c < cols; c++){
pinMode(colPins[c], OUTPUT); //set the column pins as output
}
}
void loop() {
char key = getKey();
if(key != 0){
Serial.println(key);
}
}
char getKey(){
char k = 0;
for(char c = 0; c < cols; c++){
digitalWrite(colPins[c], LOW);
for(char r = 0; r < rows; r++){
if(digitalRead(rowPins[r]) == LOW){
delay(20); //20ms debounce time
while(digitalRead(rowPins[r])== LOW);
k = keys[r][c];
}
}
digitalWrite(colPins[c], HIGH);
}
return k;
}