Arduino编程之----如何让你的普通按键变为自锁按键
本帖最后由 何处不江南 于 2014-1-16 18:56 编辑想让普通按键变为自锁按键,首先我们要解决3个问题。
1.什么是自锁按键?
首先理解下什么叫自锁按键。放张图,一目了然
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 pin
const int ledPin = 13; // the number of the LED pin
// variables will change:
int buttonState = 0; // variable for reading the pushbutton status
bool 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;
}
}
说完发图一副,镇楼。
我是来找沙发的…… nemon 发表于 2014-1-17 08:49
我是来找沙发的……
支持一个也不错啊 炮姐威武!!!!https://mc.dfrobot.com.cn/data/attachment/forum/201312/04/162053brvwr5uz3wuq777n.gif就是这跟自锁按键有啥米关系?
heinau 发表于 2014-1-17 11:52
炮姐威武!!!!就是这跟自锁按键有啥米关系?
这关乎论坛界的一个传说。。。 heinau 发表于 2014-1-17 11:52
炮姐威武!!!!就是这跟自锁按键有啥米关系?
好像没有
页:
[1]