极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15939|回复: 2

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

[复制链接]
发表于 2016-12-18 23:57:38 | 显示全部楼层 |阅读模式
本帖最后由 飞火 于 2016-12-19 00:05 编辑

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



  1. #define Button1 3

  2. int buttonState;            
  3. int lastButtonState = LOW;
  4. int delayTime =1000;//长按触发延时
  5. unsigned long lastDebounceTime = 0;
  6. unsigned long debounceDelay = 50;
  7. unsigned long longDelay = 0;
  8. bool longFlag = false;
  9. bool clearFlag = false;

  10. void setup() {
  11.         pinMode(Button1,INPUT);
  12. }

  13. void loop() {

  14. int reading = digitalRead(Button1);

  15.     if(longFlag){
  16.       longDelay++;
  17.     }

  18.     if(longDelay>delayTime){
  19.         /*
  20.      写你自己的长按触发代码
  21. */
  22.       longDelay=0;
  23.       longFlag=false;
  24.       clearFlag=true;
  25.       
  26.     }

  27.   if (reading != lastButtonState) {
  28.     lastDebounceTime = millis();
  29.   }

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

  31.    
  32.     if (reading != buttonState) {
  33.       buttonState = reading;
  34.   
  35.       longFlag=true;
  36.       
  37.         //HIGH为按下触发,LOW为按下抬起触发
  38.       if (buttonState == LOW) {
  39.         if(!clearFlag){
  40.         /*
  41.         写你自己的短按触发代码
  42.         */
  43.           longDelay=0;
  44.           longFlag=false;
  45.         }else{
  46.           clearFlag=false;
  47.           longFlag=false;
  48.         }
  49.       }      
  50.     }
  51.   }
  52. }


复制代码
回复

使用道具 举报

发表于 2016-12-19 08:09:53 | 显示全部楼层
不懂,关注中
回复 支持 反对

使用道具 举报

发表于 2016-12-19 09:07:48 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-9 07:24 , Processed in 0.041399 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表