Status tombol berubah secara acak

14

Saya memiliki tombol push yang dihubungkan ke Arduino saya, tetapi tampaknya memicu secara acak.

Saya memiliki satu pin tombol yang terhubung ke pin 2 di Arduino dan yang lainnya terhubung ke ground.

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

    pinMode(2, INPUT);
}

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

Saya berharap untuk mencetak 1 terus menerus dan pergi ke 0 ketika saya menekan tombol ke bawah tetapi kadang-kadang itu menunjukkan 0 bahkan ketika saya tidak menyentuhnya.

sachleen
sumber

Jawaban:

17

Ketika sebuah tombol terhubung dalam konfigurasi itu, inputnya adalah apa yang disebut mengambang , yang berarti itu bukan 0 atau 1. Ketika tombol ditekan, terhubung ke ground, jadi itu pasti 0, tetapi ketika tidak ditekan, kami tidak tahu nilai pin.

Tarik Resistor

Kita perlu memasukkan apa yang disebut resistor "pull-up" untuk menarik sinyal ke logika 1 saat tombol tidak ditekan.

tarik resistor

Gambar dari Sparkfun

Artinya adalah ketika tombol tidak ditekan, Arduino membaca logika 1. Ketika tombol ditekan, arus mengalir melalui resistor ke ground dan Arduino membaca logika 0.

Resistor Penarik Internal

Arduino juga memiliki resistor penarik internal sehingga Anda tidak perlu menambahkan komponen tambahan ke sirkuit Anda. Ada beberapa cara untuk menggunakan ini.

Anda harus melakukannya seperti ini:

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

Sekarang kita bisa melakukannya hanya dalam satu baris:

pinMode(pin, INPUT_PULLUP);

Ini memungkinkan resistor tarik 20k pada pin itu. Input tidak akan lagi mengambang ketika tombol tidak ditekan.

Catatan: Ini hanya berfungsi ketika ujung yang lain terhubung ke ground.

sachleen
sumber
1
Perlu dicatat bahwa ide yang sama juga berfungsi untuk resistor pull-down; yaitu resistor biasanya menarik pin rendah, tetapi menekan tombol membawanya tinggi. Jelas itu harus eksternal, karena tidak ada internal pull-down pada Arduino standar.
Peter Bloomfield