- Arduino Uno轻松入门48例
- 周宝善编著
- 826字
- 2021-03-04 18:41:28
2.7 按一下按键亮灯,再按一下按键灭灯
通过编程的方式,可实现按下按键后,电路接通,松开按键后,电路仍然持续接通,当再次按下按键后,电路才会断开,即具有自锁功能,这是怎么回事?如何编程实现?
2.7.1 实验描述
编程实现按一下按键,LED灯D13点亮,再按一下按键,LED灯D13熄灭。
AU06的电路原理图、电路板图和实物图如图2.11所示。
图2.11 AU06的电路原理图、电路板图和实物图
图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)程序参考
(2)实验结果
接通电源,按一下按键,LED灯D13点亮,再按一下按键,LED灯D13熄灭。
2.7.5 拓展和挑战
按一下按键,LED灯D11、D13点亮,再按一下按键,LED灯D11、D13熄灭。