Lo stato del pulsante cambia in modo casuale


14

Ho un pulsante collegato al mio Arduino ma sembra attivarsi in modo casuale.

Ho un pin del pulsante collegato al pin 2 sull'Arduino e l'altro collegato a terra.

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

    pinMode(2, INPUT);
}

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

Mi aspetto che stampa 1 in modo continuo e vada a 0 quando premo il pulsante in basso, ma a volte mostra 0 anche quando non lo tocco.

Risposte:


17

Quando un pulsante è collegato in quella configurazione, l'ingresso è quello che viene chiamato mobile , il che significa che non è uno 0 o uno 1. Quando il pulsante viene premuto, viene collegato a terra, quindi è sicuramente uno 0, ma quando non viene premuto, non conosciamo il valore del pin.

Resistenza di pull up

Dobbiamo includere quella che viene definita una resistenza "pull-up" per portare il segnale su una logica 1 quando il pulsante non viene premuto.

resistenza di pull up

Immagine da Sparkfun

Ciò significa che quando il pulsante non viene premuto, Arduino legge una logica 1. Quando il pulsante viene premuto, la corrente scorre a terra attraverso la resistenza e Arduino legge una logica 0.

Resistenza pull up interna

Arduino ha anche resistenze pull up interne, quindi non è necessario aggiungere un componente aggiuntivo al circuito. Ci sono un paio di modi per usarlo.

Prima dovevi farlo in questo modo:

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

Ora possiamo farlo semplicemente in una riga:

pinMode(pin, INPUT_PULLUP);

Ciò abilita la resistenza di pull up 20k su quel pin. L'ingresso non sarà più mobile quando il pulsante non viene premuto.

Nota: funziona solo quando l'altra estremità è collegata a terra.


1
Vale la pena notare che la stessa idea funziona anche per i resistori pull-down; cioè il resistore normalmente tira il perno in basso, ma premendo il pulsante lo porta in alto. Ovviamente deve essere esterno, poiché non esiste un pull-down interno sugli Arduinos standard.
Peter Bloomfield,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.