Arduino debounce按钮延迟

时间:2016-01-07 15:52:23

标签: arduino arduino-uno

当我尝试使用长线连接到开关时,我的Arduino遇到了一些麻烦。

如果我使用较短的电线我没有问题,但一旦延长,事情就会开始播放。

我想要做的是,当我按下一个按钮时,我希望它输出到一个针脚,保持2秒钟,然后关闭,无论按钮是否仍然按下。

我目前使用短线的代码是:

// constants won't change. They're used here
// to set pin numbers:
const int buttonPin = 2;     // the number of the pushbutton pin
const int ledPin =  10;      // the number of the LED pin

// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);
}

void loop() {
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);
  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH) {
    // turn LED on:
    digitalWrite(ledPin, HIGH);
    delay(2000); // wait for a second
    digitalWrite(ledPin, LOW);
  }
}

我一直在论坛上阅读使用去抖可以解决这个问题。但是,我是Arduino的新手,不知道如何实现这一点。

我使用the Arduino button tutorial并使用了一个10k的下拉电阻。我是否可以通过代码或电阻/电容来允许通过线长<2m的开关触发?

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:0)

电线长度不会成为问题。您要么发生接线故障,要么代码与您的预期行为不符。 (你现在没有提到实际的行为。)

开关的额外去抖不再是必要的,因为在您按下按钮后,您将忽略其状态一段时间。这就是软件去抖的典型特征。

  

保持2秒钟,然后无论按钮是否仍然按下,都会关闭。

现在,在释放按钮之前,输出不会关闭。这样做的原因是,在你把它写得很低之后,你会立即再次检查按钮并在输出仍然按下的情况下将输出写入高位。你要么需要延迟

  

digitalWrite(ledPin,LOW);

或者是一位有点发烧友,并确保在允许再次按下之前释放按钮。