按钮状态随机变化


14

我有一个连接到Arduino的按钮,但它似乎是随机触发的。

我有一个按钮的引脚连接到arduino的引脚2,另一引脚接地。

void setup() {
    Serial.begin(9600);

    pinMode(2, INPUT);
}

void loop() {
    Serial.println(digitalRead(2));
}

我希望它连续打印1并在按下按钮时变为0,但有时即使我不触摸它也会显示0。

Answers:


17

当按此配置连接按钮时,输入就是所谓的float,这意味着它不是0或1。按下按钮时,它接地,因此绝对是0,但是没有按下时,我们不知道引脚的值。

上拉电阻

我们需要包括一个所谓的“上拉”电阻,以便在不按下按钮时将信号上拉至逻辑1。

上拉电阻

图片来自Sparkfun

这意味着当不按下按钮时,Arduino会读取逻辑1。当按下按钮时,电流会流过电阻器接地,而Arduino会读取逻辑0。

内部上拉电阻

Arduino还具有内部上拉电阻,因此您不必在电路中添加额外的组件。有两种使用方法。

您以前必须这样做:

pinMode(pin, INPUT);           // set pin to input
digitalWrite(pin, HIGH);       // turn on pullup resistors

现在,我们只需一行即可完成此操作:

pinMode(pin, INPUT_PULLUP);

这将在该引脚上启用20k上拉电阻。当不按下按钮时,输入将不再是浮动的。

注意:这仅在另一端接地时才有效。


1
值得注意的是,同样的想法也适用于下拉电阻。也就是说,电阻器通常将引脚拉低,但按下按钮会将其拉高。显然,它必须是外部的,因为标准Arduino上没有内部下拉菜单。
彼得·布鲁姆菲尔德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.