Düğme durumu rastgele değişiyor


14

Arduino'uma bağlı bir buton var ama rastgele tetikliyor gibi görünüyor.

Düğmenin bir pimi arduino üzerindeki pim 2'ye, diğeri ise toprağa bağlı.

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

    pinMode(2, INPUT);
}

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

Düğmeyi aşağıya bastığımda sürekli 1 yazdırmasını ve 0'a gitmesini bekliyorum, ancak bazen dokunmadığım halde 0 gösteriyor.

Yanıtlar:


17

Bu yapılandırmada bir düğme bağlandığında, giriş kayan olarak adlandırılır , yani 0 veya 1 değildir. Düğmeye basıldığında, toprağa bağlanır, bu yüzden kesinlikle 0'dır, ancak basılı olmadığında, iğnenin değerini bilmiyoruz.

Yukarı Çekme Direnci

Düğmeye basılmadığında sinyali mantık 1'e çekmek için "çekme" direnci denilen şeyi eklememiz gerekir.

çekme direnci

Sparkfun'dan görüntü

Bunun anlamı, düğmeye basılmadığında Arduino bir mantık 1 okur. Düğmeye basıldığında, akım dirençten toprağa akar ve Arduino bir mantık 0 okur.

Dahili Çekme Direnci

Arduino'nun dahili çekme dirençleri de vardır, böylece devrenize ekstra bir bileşen eklemeniz gerekmez. Bunu kullanmanın birkaç yolu vardır.

Eskiden böyle yapmalıydın:

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

Şimdi bunu tek bir satırda yapabiliriz:

pinMode(pin, INPUT_PULLUP);

Bu, bu pim üzerindeki 20k çekme direncini sağlar. Düğmeye basılmadığında giriş artık dalgalanmayacaktır.

Not: Bu yalnızca diğer uç toprağa bağlı olduğunda çalışır.


1
Aynı fikrin aşağı çeken dirençler için de işe yaradığını belirtmek gerekir; yani direnç normalde pimi alçaltır, ancak düğmeye basmak onu yükseltir. Açıkçası, standart Arduinos'da dahili bir aşağı çekilme olmadığından, harici olması gerekiyor.
Peter Bloomfield
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.