飞火 发表于 2016-12-18 23:57:38

改进消抖算法,对一个按钮进行短按和长按判定

本帖最后由 飞火 于 2016-12-19 00:05 编辑

最近做一个计数的电路,需要使用按钮进行短按和长按判定。对arduino自带消抖算法示例改进,使其能够判断长短按,同时还可选择按下后抬起按钮触发和按下按钮触发。代码捡关键的注释,格式懒得调了,凑合看吧,消抖注释可以参考arduino示例。



#define Button1 3

int buttonState;            
int lastButtonState = LOW;
int delayTime =1000;//长按触发延时
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
unsigned long longDelay = 0;
bool longFlag = false;
bool clearFlag = false;

void setup() {
        pinMode(Button1,INPUT);
}

void loop() {

int reading = digitalRead(Button1);

    if(longFlag){
      longDelay++;
    }

    if(longDelay>delayTime){
        /*
   写你自己的长按触发代码
*/
      longDelay=0;
      longFlag=false;
      clearFlag=true;
      
    }

if (reading != lastButtonState) {
    lastDebounceTime = millis();
}

    if ((millis() - lastDebounceTime) > debounceDelay) {

   
    if (reading != buttonState) {
      buttonState = reading;

      longFlag=true;
      
        //HIGH为按下触发,LOW为按下抬起触发
      if (buttonState == LOW) {
      if(!clearFlag){
        /*
        写你自己的短按触发代码
        */
          longDelay=0;
          longFlag=false;
      }else{
          clearFlag=false;
          longFlag=false;
      }
      }      
    }
}
}


leisd 发表于 2016-12-19 08:09:53

不懂,关注中

hubertdong 发表于 2016-12-19 09:07:48

可以对比一下效果:
http://www.geek-workshop.com/thread-28007-1-1.html
页: [1]
查看完整版本: 改进消抖算法,对一个按钮进行短按和长按判定