何处不江南 发表于 2014-1-16 17:10:52

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:44

我是来找沙发的……

何处不江南 发表于 2014-1-17 11:51:23

nemon 发表于 2014-1-17 08:49
我是来找沙发的……

支持一个也不错啊

heinau 发表于 2014-1-17 11:52:43

炮姐威武!!!!https://mc.dfrobot.com.cn/data/attachment/forum/201312/04/162053brvwr5uz3wuq777n.gif就是这跟自锁按键有啥米关系?

何处不江南 发表于 2014-1-17 11:54:49

heinau 发表于 2014-1-17 11:52
炮姐威武!!!!就是这跟自锁按键有啥米关系?

这关乎论坛界的一个传说。。。

发表于 2022-4-27 08:44:20

heinau 发表于 2014-1-17 11:52
炮姐威武!!!!就是这跟自锁按键有啥米关系?

好像没有      
页: [1]
查看完整版本: Arduino编程之----如何让你的普通按键变为自锁按键