Arduino digitalReadの読み取りが間違っている


10

私はArduino UNOを4本の入力ワイヤーでセットアップしました。これらはポート10、11、12、13に接続し、ブレッドボードにはワイヤー以外は何も接続していません。

私のコードは単に:

Serial.println(digitalRead(13));
Serial.println(digitalRead(12));
Serial.println(digitalRead(11));
Serial.println(digitalRead(10));

問題は、ピンを5Vまたは3V3に簡単に接続した後、次のように読み始めます:1 0 0 1 0 1 1 1 0 1 0 1 1 0意味がありません!私のVCC(5Vまたは3V3)に直接接続されているワイヤーがないと、読み取り値はゼロでなければならないときに常に変化します!

私のArduinoは死んでいますか?どうすれば修正できますか?


トリガーされていないときは、トリガーピンをアースに接続するだけです。

回答:


18

あなたが持っているものはFloatingピンと呼ばれています。デジタル入力ピンは変化に非常に敏感であり、ある状態または別の状態(HighまたはLow)に確実に駆動されない限り、ブレッドボード、人間の指、または空気などの近くのソースから浮遊容量を拾います。それに接続されたワイヤーは小さなアンテナのように動作し、入力状態を変化させます。そして私はどんなワイヤー、ボード上のトレース、ブレッドボードへのワイヤー、ブレッドボードピン、さらにはIC自体の金属ピンをも意味します。

これはArduinoのリファレンスページで参照されています。

ピンが何にも接続されていない場合、digitalRead()はHIGHまたはLOWを返すことができます(これはランダムに変化する可能性があります)。

Arduinoデジタルピンチュートリアルを見ると:

ただしこれは、何も接続されていない、または他の回路に接続されていないワイヤが接続されている入力ピンは、ピンの状態がランダムに変化しているように見え、環境から電気ノイズを拾い、または状態を容量結合することを意味します近くのピンの。

入力が存在しない場合、入力ピンを既知の状態に誘導すると便利な場合があります。これは、プルアップ抵抗(+ 5Vまで)またはプルダウン抵抗(グラウンドへの抵抗)を入力に追加することによって実行できます。10Kが一般的な値です。Atmegaチップには、ソフトウェアからアクセスできる便利な20Kプルアップ抵抗も組み込まれています。これらの内蔵プルアップ抵抗には、次の方法でアクセスします。

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

これらの弱いプル抵抗は、入力ピンの状態を既知の状態に強制し、グラウンドへの直接接続または+ 5vなどのより強い入力電圧によって簡単に上書きされます。


2
言及についてはpinMode(pin, INPUT_PULLUP)どうですか?覚えやすく、失敗するのは本当に難しいです。
ピオジョ

6

これは正常です。入力が何かに接続されていない限り、HIGHまたはLOW、または常に変化していることが表示されます。これは、Arduino WebサイトのdigitalReadリファレンスページで説明されています。

入力ピンは小さな容量で動作するため、3V3または5Vに短時間接続すると容量が充電されます。素手でも同様の効果が見られるかもしれません。

このピンとGNDの間に大きな値の抵抗を追加することで問題を回避できます。

ゼロを期待する理由を自問してください。


1
pinMode(pin、INPUT_PULLUP);
ジッピー2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.