改进消抖算法,对一个按钮进行短按和长按判定
本帖最后由 飞火 于 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;
}
}
}
}
}
不懂,关注中 可以对比一下效果:
http://www.geek-workshop.com/thread-28007-1-1.html
页:
[1]