Arduino编程之-如何让你的普通按键变为自锁按键
本帖最后由 何处不江南 于 2014-1-16 18:56 编辑
想让普通按键变为自锁按键,首先我们要解决3个问题。
1.什么是自锁按键?
首先理解下什么叫自锁按键。放张图,一目了然
1.png (44.99 KB, 下载次数: 5)
下载附件
保存到相册
2014-1-16 17:10 上传
file:///C:/Users/first%20user/AppData/Local/YNote/Data/yushigengyu%40qq.com/ccfb7020d1fb44239dc2fc0bb9ae1911/clipboard.png
自锁按键即按下去就锁住,不会自动弹起来,再按一次才会弹起来的一种按键,和开关非常相似。
2.为什么要使用自锁按键?即什么情况下我们要用自锁按键?
自锁按键使用范围很广。
如通常我们开关灯,开关电源,开关继电器等,都是希望我按一下按键,它们改变一下状态,从关闭变为开启,或者从开启作为关闭。
而不是按下开启,松开关闭。
3.怎么把普通按键变为自锁按键?
普通的做法如下:
读取按键状态。
若按键按下,则改变灯状态(开->关,关->开)。
如此循环。
那么以上做法有什么优缺点呢?
优点,代码简单,逻辑简单。
缺点,当按键持续按下时,你就发现灯一直在闪啊闪。。。
更好的做法:
那么什么是更好的做法呢,如下:
设置按键松开标志位
读取按键状态,若按键松开,则将按键松开标志位置为真。
若按键松开标志位为真,同时按键按下,则改变灯的状态,并把按键松开标志位置为假。否则不改变状态。
如此循环。
该代码的优点就是解决了普通方法的一直闪啊闪的问题。做到了按一下改变一次状态。
现在贴出代码。
// set pin numbers:const int buttonPin = 2; // the number of the pushbutton pinconst int ledPin = 13; // the number of the LED pin// variables will change:int buttonState = 0; // variable for reading the pushbutton statusbool buttonStateFlag =true;bool ledStateFlag=false;void setup() {// initialize the LED pin as an output:pinMode(ledPin, OUTPUT);// initialize the pushbutton pin as an input:pinMode(buttonPin, INPUT);}void loop(){buttonState = digitalRead(buttonPin);if (buttonState == HIGH&&buttonStateFlag==true){ ledStateFlag=!ledStateFlag; digitalWrite(ledPin, ledStateFlag); buttonStateFlag=false;}else if(buttonState == LOW){ buttonStateFlag=true;}}复制代码
说完发图一副,镇楼。
2.jpg (65.05 KB, 下载次数: 5)
下载附件
保存到相册
2014-1-16 17:10 上传