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