ランダムに変化するボタンの状態


14

Arduinoにプッシュボタンが配線されていますが、ランダムにトリガーされているようです。

私はarduinoのピン2に接続されたボタンの1つのピンとグランドに接続された他のピンを持っています。

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

    pinMode(2, INPUT);
}

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

連続して1を印刷し、ボタンを押したときに0になることを期待していますが、タッチしなくても0が表示されることがあります。

回答:


17

その構成でボタンが接続されると、入力は「フローティング」と呼ばれるものになります。つまり、0または1ではありません。ボタンが押されると、グランドに接続されます。ピンの値はわかりません。

プルアップ抵抗

ボタンが押されていないときに信号をロジック1にプルアップするには、「プルアップ」抵抗と呼ばれるものを含める必要があります。

プルアップ抵抗

Sparkfunからの画像

これは、ボタンが押されていない場合、Arduinoがロジック1を読み取ることを意味します。ボタンが押されると、電流が抵抗を介してグランドに流れ、Arduinoがロジック0を読み取ります。

内部プルアップ抵抗

Arduinoにはプルアップ抵抗も内蔵されているため、必ずしも回路に追加のコンポーネントを追加する必要はありません。これを使用するにはいくつかの方法があります。

以前は次のようにしなければなりませんでした。

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

これで、1行で簡単に実行できます。

pinMode(pin, INPUT_PULLUP);

これにより、そのピンの20kプルアップ抵抗が有効になります。ボタンが押されていない場合、入力はフローティング状態ではなくなります。

注:これは、もう一方の端がアースに接続されている場合にのみ機能します。


1
同じ考えがプルダウン抵抗にも有効であることは注目に値します。すなわち、通常、抵抗はピンを低く引きますが、ボタンを押すと高くなります。標準のArduinoには内部プルダウンがないため、明らかに外部である必要があります。
ピーターブルームフィールド14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.