6367浏览
查看: 6367|回复: 0

按键消抖——消抖中的消抖_From UU

[复制链接]
本帖最后由 touchfree 于 2015-4-2 22:08 编辑

基于“传统消抖不稳定,delay延时带来的不便”的更新算法:
  1. byte LED = 13;
  2. byte BUTTON = 3;
  3. void setup(void)
  4. {
  5.   pinMode(LED,OUTPUT);
  6.   pinMode(BUTTON,INPUT_PULLUP);
  7.   digitalWrite(LED,LOW);
  8. }
  9. void loop(void)
  10. {
  11.   static unsigned long timepoint = millis();
  12.   static byte count = 0;
  13.   if(millis()-timepoint > 10)
  14.   {
  15.     timepoint = millis();
  16.     if(digitalRead(BUTTON)) count = 0;
  17.     if( (count<100) && (++count==10) )
  18.       digitalWrite(LED, digitalRead(LED)^1);
  19.   }
  20. }
复制代码

下来我们来理解下上边的程序:

  1. byte LED = 13;
  2. byte BUTTON = 3;
  3. void setup(void)
  4. {
  5.   pinMode(LED,OUTPUT);
  6.   pinMode(BUTTON,INPUT_PULLUP);
  7.   digitalWrite(LED,LOW);
  8. }
  9. void loop(void)
  10. {
  11.   static unsigned long timepoint = millis();
  12.   static byte count = 0;
  13.   if(millis()-timepoint > 10)
  14.   {
  15.     timepoint = millis();
  16.     if(digitalRead(BUTTON)) count = 0;
  17.     else if( (count<100) && (++count==5) )
  18.       digitalWrite(LED, digitalRead(LED)^1);
  19.   }
  20. }
复制代码



或者 这个一样的:
  1. byte LED = 13;
  2. byte BUTTON = 3;
  3. void setup(void)
  4. {
  5.   pinMode(LED,OUTPUT);
  6.   pinMode(BUTTON,INPUT_PULLUP);
  7.   digitalWrite(LED,LOW);
  8. }
  9. void loop(void)
  10. {
  11.   static unsigned long timepoint = millis();
  12.   static byte count = 0;
  13.   if(millis()-timepoint > 10U)
  14.   {
  15.     timepoint = millis();
  16.     switch(digitalRead(BUTTON))
  17.     {
  18.     case 1:
  19.       count = 0;
  20.       break;
  21.     case 0:
  22.       {
  23.         if( (count<100) && (++count==5) )
  24.           digitalWrite(LED,digitalRead(LED)^1);
  25.       }
  26.       break;
  27.     }
  28.   }
  29. }
复制代码





Note: 源于悠悠大神的智慧算法,转载需注明出处!


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

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail