const int numR = 4;
const int numC = 3;
const int debounceTime = 20;
const char keymap[numR][numC] = {
{ '1', '2', '3' } ,
{ '4', '5', '6' } ,
{ '7', '8', '9' } ,
{ '*', '0', '#' }
};
const int rowPins[numR] = { 7, 2, 3, 6 };
const int colPins[numC] = { 5, 8, 4 };
void setup() {
Serial.begin(9600);
for (int row = 0; row < numR; row++)
{
pinMode(rowPins[row],INPUT);
digitalWrite(rowPins[row],HIGH);
}
for (int column = 0; column < numC; column++)
{
pinMode(colPins[column],OUTPUT);
digitalWrite(colPins[column],HIGH);
}
}
void loop()
{
char key = getKey();
if( key != 0) {
Serial.print("Got key ");
Serial.println(key);
}
}
char getKey()
{
char key = 0;
for(int column = 0; column < numC; column++)
{
digitalWrite(colPins[column],LOW);
for(int row = 0; row < numR; row++)
{
if(digitalRead(rowPins[row]) == LOW)
{
delay(debounceTime);
while(digitalRead(rowPins[row]) == LOW)
;
key = keymap[row][column];
}
}
digitalWrite(colPins[column],HIGH);
}
return key;
}