一、器件介绍
按键常用在电子控制线路中作为输入,有自锁式(按下按钮,开关状态发生改变,并保持改变后的状态,直到下次按钮按下才再次开关改变)和非自锁按钮(按下按钮时,改变开关状态,松开回到原状态)两类。
本课程采取四脚轻触开关,属于非自锁按钮。四脚轻触开关由常开触点、常闭触点组合而成,在四脚轻触开关中,常开触点的作用,就是当压力向常开触点施压时,这个电路就呈现接通状态;当撤销这种压力的时候,就恢复到了原始的常闭触点,也就是所谓的断开。这个施压的力,就是用我们的手去开按钮、关按钮的动作。
二、硬件介绍
1、典型电路:按键作为输入,需要将按键状态的改变转化为电信号的变化,才能被Arduino识别。典型电路如图所示。
当Arduino数字IO口作为输入,其输入阻抗为高阻状态,可以认为输入对地电阻无穷大。所以,当S开关断开时,根据欧姆定律Vout≈Vcc=1。当S合上时,Gnd和Vout短接,此时点位相通,Vout=Gnd=0。综上可以把开关状态转变为Arduino识别的高低电平,电阻R称为上拉电阻,用于保护S闭合时,Vcc和Gnd短路。
2、按键消抖:由于按键为机械式弹簧开关,当机械触点断开、闭合时,由于机械触点的弹性作用,导致触点不会马上稳定的接通,所以在使用弹簧时,一般需要消抖,去除弹性作用照成的外部干扰。抖动时间由按键的机械特性所决定,一般为5ms~10ms。所以我们在做按键检测时都要加一个消抖的过程。
按键消抖方式:分为软件消抖和硬件消抖。
软件消抖:利用抖动时间,降低采样频率,错开抖动时的不稳定状态。缺点:程序效率低下,因为程序需要等待 按键稳定,照成CPU资源浪费;优点:硬件简单。
硬件消抖:a、在按键信号输出端并上电容,电容作为储能元件,具有电容两端的电压不能突变的特性,选取合适容值的电容,通过电容的充放电时间消除抖动照成的不稳定。
b、在有三端常开常闭触点的按键中,可以采用RS触发器进行消抖。参考:RS触发器原理
c、外接专用的按键消抖芯片(比如MAX16054),在对按键抖动要求高的场合使用,但是成本会大大加大。
3、例程电路:
三、软件介绍
#define LED_PIN 13 //宏定义LED引脚
#define KEY_PIN 12 //宏定义按键引脚
char ledMode=0; //定义LED亮灭的模式
void setup()
{
pinMode(LED_PIN,OUTPUT); //LED初始化
pinMode(KEY_PIN,INPUT); //按键初始化
}
void loop()
{
if(digitalRead(KEY_PIN)==0) //当按键按下,进入检测
{
ledMode=ledMode^1; //按键按下,让ledMode和1进行异或运算,使ledMode进行取反。
digitalWrite(LED_PIN,ledMode); //将取反的ledMode变量送入LED灯引脚状态中
delay(25); //按键按下延时消抖25ms
while(!(digitalRead(KEY_PIN))); //一直循环,直到按键释放,跳出死循环
delay(25); //按键松开延时消抖25ms
}
}
语言知识点简要:自行搜索相关资料1、变量类型char(字符)、int(整型)、float(浮点型)、double(双精度)。2、修饰符char和int又分为有符号signed(有正负,首位为正负位)和无符号unsigned(全≥0),默认为有符号。int又分为长整型(long)和短整型(short)。3、变量范围及在内存中的表示。4、逻辑运算:与、或、非、异或。5、if语句:判断语句6、while语句:条件循环语句
void setup()
{
pinMode(LED_PIN,OUTPUT); //LED初始化
pinMode(KEY_PIN,INPUT_PULLUP); //按键初始化
}
2、试着用其他方式的思维,更改代码,实现例程相同效果。