// C++ code
//
// 初始接腳
int rows[]={18,5,17,16};
int cols[]={4,0,2,15};
int row=4;
int col=4;
int i,x,y;
char tbl[]={'1','2','3','A',
'4','5','6','B',
'7','8','9','C',
'*','0','#','D'};
/*
x,y 00 '1'
x,y 10 '4'
x,y 23 'C'
x,y 33 'D'
*/
void setup()
{
Serial.begin(9600);
for (i=0;i<row;i++)
pinMode(rows[i], OUTPUT);
for (i=0;i<col;i++)
pinMode(cols[i], INPUT_PULLUP);
}
bool now,old=false;
void loop()
{
now=scan();
if (now==true && old==false){
Serial.print(x);
Serial.print(",");
Serial.print(y);
Serial.print("=>");
Serial.println(tbl[x*4+y]);
}
old=now;
}
bool scan(){
//scan row[0]
x=0;
digitalWrite(rows[0],LOW);
digitalWrite(rows[1],HIGH);
digitalWrite(rows[2],HIGH);
digitalWrite(rows[3],HIGH);
for (i=0;i<col;i++)
if (digitalRead(cols[i])==0){
y=i;
return true;
}
//scan row[1]
x=1;
digitalWrite(rows[0],HIGH);
digitalWrite(rows[1],LOW);
digitalWrite(rows[2],HIGH);
digitalWrite(rows[3],HIGH);
for (i=0;i<col;i++)
if (digitalRead(cols[i])==0){
y=i;
return true;
}
//scan row[2]
x=2;
digitalWrite(rows[0],HIGH);
digitalWrite(rows[1],HIGH);
digitalWrite(rows[2],LOW);
digitalWrite(rows[3],HIGH);
for (i=0;i<col;i++)
if (digitalRead(cols[i])==0){
y=i;
return true;
}
//scan row[3]
x=3;
digitalWrite(rows[0],HIGH);
digitalWrite(rows[1],HIGH);
digitalWrite(rows[2],HIGH);
digitalWrite(rows[3],LOW);
for (i=0;i<col;i++)
if (digitalRead(cols[i])==0){
y=i;
return true;
}
return false;
}