Quello che hai si chiama Floating
pin. 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.