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

2015-03-311.3万
AI 快速预览详细 收起
本文介绍了基于Arduino的按键消抖算法更新,通过改进的代码示例,解决了传统消抖方法不稳定的问题。代码中使用了millis()函数替代delay(),并通过计数器实现更精确的按键消抖。这种新方法提高了按键处理的稳定性和响应速度。


基于“传统消抖不稳定,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

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(0)
- 没有更多了 -