ADC按键检测

时间:2024-05-18 17:10:47

        就是通过电阻串联的方式检测不同的电压,从而检测每个按键 ,检测按下的是那个按键。当不按按键时的电压为上拉的电压,其他按键根据分压进行计算。 

工作原理:

ADC按键检测

程序源码: 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; 
}

}