2.7 按一下按键亮灯,再按一下按键灭灯

通过编程的方式,可实现按下按键后,电路接通,松开按键后,电路仍然持续接通,当再次按下按键后,电路才会断开,即具有自锁功能,这是怎么回事?如何编程实现?

2.7.1 实验描述

编程实现按一下按键,LED灯D13点亮,再按一下按键,LED灯D13熄灭。

AU06的电路原理图、电路板图和实物图如图2.11所示。

img

图2.11 AU06的电路原理图、电路板图和实物图

img

图2.11 AU06的电路原理图、电路板图和实物图(续)

2.7.2 知识要点

1.按键抖动

由于按键机械触点的弹性作用,在开关闭合及断开时,经常出现不稳定现象,即一连串的抖动现象,这种抖动现象持续时间约为10ms,可导致处理器判断错误,按键呈现失控状态,为避免发生此类故障,编程时必须消除按键抖动的影响,这是编写按键控制程序时必须特别关注的问题。采用消除按键抖动技术,可极大地提高按键操作的可靠性与正确率,这是学习Arduino编程应知、应会的知识。

消除按键抖动影响的编程方法如下:如果数字端口12的值为0,延时100ms后,再读取数字端口12的值,如果值为0,证明数字端口12的确为低电平,按键的确被按下了。

2.按键抬起

判断按键抬起的编程方法如下:如果数字端口12的值为0,说明按键被按下,用while(digitalRead(12)==0) ;语句循环读取,直到数字端口12的值为1,说明按键抬起,退出循环。

2.7.3 编程要点

1.语句bool val=0;与语句val=!val;

语句bool val=0;表示定义布尔型变量val,初始化赋值为0。

语句val=!val;表示将val值取反,如果val=0,那么!val=1。

在Arduino中,bool表示布尔型变量,等同于boolean。布尔型变量的值只有真(true,非0)和假(false,0),占用1字节,可用于逻辑判断。if(逻辑表达式){语句1;}else{语句2;}表示如果逻辑表达式结果为真,执行语句1,否则执行语句2。

2.语句while(digitalRead(12)==0);

该语句表示当数字端口12的值为0时执行循环语句,直到数字端口12的值为1时退出循环。

2.7.4 程序设计

(1)程序参考

img

(2)实验结果

接通电源,按一下按键,LED灯D13点亮,再按一下按键,LED灯D13熄灭。

2.7.5 拓展和挑战

按一下按键,LED灯D11、D13点亮,再按一下按键,LED灯D11、D13熄灭。