Arduino按钮去抖

时间:2016-09-08 13:20:27

标签: arduino debouncing

我需要有关按钮去抖的帮助。有时它会向串行链接发送两次相同的字符串,但我不知道为什么。有人可以帮助我,问题出在哪里?

int reading;
int exbutton= LOW;
unsigned long ddelay= 200;
unsigned long last= 0;
void loop(){
    reading= digitalRead(prkgbrake);
   if (reading== HIGH && exbutton == LOW && millis() - last> ddelay){
    if (brake == 0){
      Serial.write("brake:1\n");
      while( digitalRead(prkgbrake) == HIGH){
      }
    }
    else{
      Serial.write("brake:0\n");
      while( digitalRead(prkgbrake) == HIGH){
      }
    }
    last = millis();
  }

提前谢谢。

1 个答案:

答案 0 :(得分:0)

我希望你没有从某个地方复制这段代码,有些代码没有意义。

例如,什么是'prkgbrake'?什么是'刹车'?它们没有被宣布。你为什么没有'setup()'函数?

然而,可以通过多种方式实现去抖动。我将修复你的代码。这样你就会明白你做错了什么。

double (*)[n]

解释:
假设您的按钮与数字引脚2连接。当您使用带按钮的数字引脚时,最好使用pullup / pulldown。您可以使用外部电阻或内部电阻。内部电阻仅支持上拉。

要了解有关上拉/下拉结帐的详情,请Arduino page。最重要的是,当您使用引脚作为输入时,它就像一个天线,可以捕获来自周围环境的信号,称为浮动状态。因此最好将引脚保持在已知状态。如果使用内部上拉,引脚将始终为int exbutton = LOW; unsigned int _delay = 200; int pushButton = 2; void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); pinMode(pushButton, INPUT_PULLUP); } void loop() { while (digitalRead(pushButton) == LOW && exbutton == LOW) { if((millis() - last) > _delay) { Serial.println("Button Pressed"); while(digitalRead(pushButton) == LOW); } } last = millis(); } 。因此,按钮配置必须采用某种方式,以便在按下时,引脚应为HIGH

Pull Up Configuration

代码LOW使数字引脚2作为输入使能上拉功能。

pinMode(pushButton, INPUT_PULLUP);应该像这样工作:

1)检查按钮是否被按下(即,如果是loop())。

2)如果不更新LOW变量。

3)如果是,则不要更新last,并输入last循环。

4)现在继续检查while是否大于millis()-last。如果不是,它将返回_delay循环并检查按钮是否仍然按下。如果是,那么它将返回并检查while是否超过millis()-last。它将继续这样做,直到它超过上述的去抖延迟量。

5)如果在'_delay'时间之前按钮被按下(即转到_delay),它将更新HIGH并检查按钮是否被按下并开始计算延迟时间。

N.B。使用last变量进行游戏。它将定义按钮的响应性。