// 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'
====>x*4+y
*/
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);
Serial.begin(9600);
}
bool test,old=false;
void loop()
{
test=scan();
if (test==1 && old==0){
//Serial.print(x);
//Serial.println(y);
Serial.println(tbl[x*4+y]);
}
old=test;
}
bool scan()
{
bool Pressed=false;
//scan row[0]
digitalWrite(rows[0],LOW);
digitalWrite(rows[1],HIGH);
digitalWrite(rows[2],HIGH);
digitalWrite(rows[3],HIGH);
for (int i=0;i<col;i++)
if (digitalRead(cols[i])==0){
Pressed=true;
x=0;y=i;
return Pressed;
}
//scan row[1]
digitalWrite(rows[0],HIGH);
digitalWrite(rows[1],LOW);
digitalWrite(rows[2],HIGH);
digitalWrite(rows[3],HIGH);
for (int i=0;i<col;i++)
if (digitalRead(cols[i])==0){
Pressed=true;
x=1;y=i;
return Pressed;
}
//scan row[2]
digitalWrite(rows[0],HIGH);
digitalWrite(rows[1],HIGH);
digitalWrite(rows[2],LOW);
digitalWrite(rows[3],HIGH);
for (int i=0;i<col;i++)
if (digitalRead(cols[i])==0){
Pressed=true;
x=2;y=i;
return Pressed;
}
//scan row[3]
digitalWrite(rows[0],HIGH);
digitalWrite(rows[1],HIGH);
digitalWrite(rows[2],HIGH);
digitalWrite(rows[3],LOW);
for (int i=0;i<col;i++)
if (digitalRead(cols[i])==0){
Pressed=true;
x=3;y=i;
return Pressed;
}
digitalWrite(rows[0],HIGH);
digitalWrite(rows[1],HIGH);
digitalWrite(rows[2],HIGH);
digitalWrite(rows[3],HIGH);
return Pressed;
}