Arduino digital Leggi la lettura sbagliata


10

Ho configurato il mio Arduino UNO con 4 fili di ingresso, si collegano alla porta 10, 11, 12, 13, sono collegati alla mia breadboard con nient'altro che il filo.

Il mio codice sarebbe semplicemente:

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

Il fatto è che dopo aver brevemente collegato un pin a 5 V o 3 V3, la lettura inizierebbe a impazzire come: 1 0 0 1 0 1 1 1 0 1 0 1 1 0 Senza alcun senso! Senza avere alcun filo collegato direttamente al mio VCC (5V o 3V3) la lettura cambia costantemente, quando dovrebbe essere zero!

Il mio Arduino è morto? Come posso risolvere questo problema?


Basta collegare il pin di attivazione a terra quando non è attivato!

Risposte:


18

Quello che hai si chiama Floatingpin. I pin di ingresso digitale sono molto sensibili ai cambiamenti e, a meno che non siano guidati positivamente in uno stato o in un altro (Alto o Basso), rileveranno la capacità parassita da fonti vicine, come breadboard, dita umane o persino l'aria. Qualsiasi filo collegato ad esso agirà come una piccola antenna e causerà la modifica dello stato dell'ingresso. E intendo qualsiasi filo, la traccia sulla scheda, il filo sulla breadboard, il pin della breadboard, persino il pin di metallo dell'IC stesso.

Questo è indicato nella pagina di riferimento di Arduino:

Se il pin non è collegato a nulla, digitalRead () può restituire HIGH o LOW (e questo può cambiare in modo casuale).

Se dai un'occhiata al tutorial Pin digitale di Arduino :

Ciò significa, tuttavia, anche che i pin di ingresso con niente collegato a loro, o con cavi collegati a loro che non sono collegati ad altri circuiti, segnaleranno cambiamenti apparentemente casuali nello stato dei pin, raccogliendo rumore elettrico dall'ambiente o accoppiando in modo capacitivo lo stato di un perno vicino.

Spesso è utile guidare un pin di input in uno stato noto se non è presente alcun input. Questo può essere fatto aggiungendo un resistore pullup (a + 5 V) o un resistore pulldown (resistore a terra) sull'ingresso, con 10 K come valore comune. Ci sono anche comode resistenze pullup da 20K integrate nel chip Atmega a cui è possibile accedere dal software. Queste resistenze pullup integrate sono accessibili nel modo seguente.

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

Queste resistenze a trazione debole forzano lo stato del pin di ingresso in uno stato noto e sono facilmente sovrascritte da tensioni di ingresso più elevate, come una connessione diretta a terra o + 5v.


2
Che ne dici di menzionare pinMode(pin, INPUT_PULLUP)? È facile da ricordare e davvero difficile da rovinare.
piojo,

6

E 'normale. A meno che un ingresso non sia collegato a qualcosa, mostrerà ALTO o BASSO o in costante cambiamento. Questo è descritto dalla pagina di riferimento digitalRead sul sito Web di Arduino.

Il pin di ingresso si comporta con una piccola capacità, quindi collegandosi brevemente a 3V3 o 5V caricherà la capacità. Potresti trovare un effetto simile usando il dito nudo.

È possibile evitare il problema aggiungendo un resistore di grande valore tra il pin e GND.

Chiediti perché ti aspetti zero?


1
pinMode (pin, INPUT_PULLUP);
jippie,
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.