Arduino Digital: Okuma yanlış


10

Arduino UNO'yu 4 giriş kablosuyla kurdum, 10, 11, 12, 13 numaralı bağlantı noktasına bağlanıyorlar, kablodan başka bir şey olmadan breadboard'uma bağlılar.

Kodum sadece şöyle olurdu:

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

Mesele şu ki, kısa bir süre 5V veya 3V3'e bir pim bağladıktan sonra, okuma aşağıdaki gibi somunlara başlayacaktı: 1 0 0 1 0 1 1 1 0 1 0 1 1 0 Herhangi bir anlam olmadan! Doğrudan VCC'ye (5V veya 3V3) bağlı herhangi bir tel olmadan, sıfır olması gerektiğinde okuma sürekli değişir!

Arduino'm öldü mü? Bunu nasıl düzeltebilirim?


Tetiklenmediğinde tetikleme iğnenizi toprağa bağlayın!

Yanıtlar:


18

Elinizde bir Floatingiğne var. Dijital Giriş pimleri değişime karşı çok hassastır ve bir duruma veya başka bir duruma (Yüksek veya Düşük) pozitif olarak yönlendirilmedikçe, breadboardlar, insan parmakları ve hatta hava gibi yakındaki kaynaklardan başıboş kapasitans alır. Herhangi bir kablo küçük bir anten gibi davranacak ve giriş durumunun değişmesine neden olacaktır. Ve herhangi bir tel, tahtadaki iz, breadboard tel, breadboard pin, hatta IC'nin metal pimini kastediyorum.

Bu, Arduino referans sayfasında belirtilmiştir:

Pim hiçbir şeye bağlı değilse, digitalRead () YÜKSEK veya DÜŞÜK dönebilir (ve bu rastgele değişebilir).

Arduino Dijital Pin Eğiticisine bakarsanız :

Bu aynı zamanda, kendilerine bağlı hiçbir şey olmayan veya diğer devrelere bağlı olmayan kablolara sahip giriş pimlerinin, pin durumunda, ortamdan elektriksel gürültü alıp veya kapasiteyi eşleştirerek görünüşte rastgele değişiklikler bildireceği anlamına gelir. yakındaki bir pim.

Çoğu zaman, eğer bir girdi yoksa, bir giriş pimini bilinen bir duruma yönlendirmek yararlıdır. Bu, girişe bir çekme direnci (+ 5V'ye) veya bir açılan direnç (toprağa direnç) eklenerek yapılabilir; 10K ortak bir değerdir. Atmega çipinin içine yerleştirilmiş, yazılımdan erişilebilen kullanışlı 20K çekme dirençleri de vardır. Bu dahili çekme dirençlerine aşağıdaki şekilde erişilir.

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

Bu zayıf çekme dirençleri giriş pimi durumunu bilinen bir duruma zorlar ve toprağa doğrudan bağlantı veya + 5v gibi daha güçlü giriş voltajlarıyla kolayca üzerine yazılır.


2
Bahsetmeye ne dersiniz pinMode(pin, INPUT_PULLUP)? Hatırlaması kolay ve vidalanması gerçekten zor.
piojo

6

Bu normal. Bir giriş bir şeye bağlı değilse, YÜKSEK veya DÜŞÜK veya sürekli olarak değişir. Bu, Arduino web sitesindeki digitalRead referans sayfası tarafından açıklanmaktadır .

Giriş pimi küçük bir kapasitansla davranır, bu nedenle 3V3 veya 5V'ye kısa bir süre bağlanmak kapasitansı şarj eder. Çıplak bir parmak kullanarak benzer bir etki bulabilirsiniz.

Pim ve GND arasına büyük bir değer direnci ekleyerek sorunu önleyebilirsiniz.

Kendinize neden sıfır beklediğinizi sorun.


1
pinMode (pin, INPUT_PULLUP);
jippie
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.