就是通过电阻串联的方式检测不同的电压,从而检测每个按键 ,检测按下的是那个按键。当不按按键时的电压为上拉的电压,其他按键根据分压进行计算。
工作原理:
程序源码: arduino
const int AnalogInPin = A0; //定义引脚
void setup() //初始化
{
Serial.begin(9600); 波特率设置为9600
}
void loop()
{
char temp=ADCkey(AnalogInPin);
if(temp)
Serial.println(temp);
}
char ADCkey(int analogInPin)//函数为读取adc键盘返回值为char字符,参数为读取的引脚,不动作返回0,按下返回相应按键值,抬起返回R
{
static bool adcstate=true;
int Value =analogRead(analogInPin);
if(adcstate&&Value<1010)
{
if(Value<=5)
{
adcstate=false ;
return '1';
}
else if(Value>=55&&Value<=65)
{
adcstate=false ;
return '2';
}
else if(Value>=120&&Value<=130)
{adcstate=false ; return '3';}
else if(Value>=184&&Value<=194)
{adcstate=false ; return '4';}
else if(Value>=247&&Value<=257)
{adcstate=false ; return '5';}
else if(Value>=310&&Value<=320)
{adcstate=false ; return '6';}
else if(Value>=374&&Value<=384)
{adcstate=false; return '7';}
else if(Value>=440&&Value<=450)
{adcstate=false ; return '8';}
else if(Value>=503&&Value<=513)
{ adcstate=false ; return '9';}
else if(Value>=569&&Value<=579)
{ adcstate=false;return '0';}
else if(Value>=634&&Value<=644)
{adcstate=false ; return 'A';}
else if(Value>=695&&Value<=705)
{adcstate=false ; return 'B';}
else if(Value>=758&&Value<=768)
{adcstate=false ; return 'C';}
else if(Value>=825&&Value<=835)
{ adcstate=false ; return 'D';}
else if(Value>=891&&Value<=901)
{adcstate=false ; return 'E';}
else if(Value>=955&&Value<=965)
{adcstate=false ; return 'F';}
}
else if(Value>=1010&&!adcstate)
{
adcstate=true;
return 'R';
}
else if(Value>=1010)
{
adcstate=true;
return 0;
}
else if(!adcstate)
{
return 0;
}
}