当我尝试使用长线连接到开关时,我的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的开关触发?
任何帮助表示感谢。
答案 0 :(得分:0)
电线长度不会成为问题。您要么发生接线故障,要么代码与您的预期行为不符。 (你现在没有提到实际的行为。)
开关的额外去抖不再是必要的,因为在您按下按钮后,您将忽略其状态一段时间。这就是软件去抖的典型特征。
保持2秒钟,然后无论按钮是否仍然按下,都会关闭。
现在,在释放按钮之前,输出不会关闭。这样做的原因是,在你把它写得很低之后,你会立即再次检查按钮并在输出仍然按下的情况下将输出写入高位。你要么需要延迟
digitalWrite(ledPin,LOW);
或者是一位有点发烧友,并确保在允许再次按下之前释放按钮。