To, co masz, nazywa się Floating
szpilką. Piny wejścia cyfrowego są bardzo wrażliwe na zmiany i chyba że zostaną pozytywnie ustawione w jednym lub drugim stanie (wysokim lub niskim), wychwycą zbłąkaną pojemność z pobliskich źródeł, takich jak płyty do krojenia chleba, ludzkie palce, a nawet powietrze. Każdy podłączony do niego przewód będzie działał jak mała antena i spowoduje zmianę stanu wejścia. Mam na myśli dowolny drut, ślad na płycie, drut do deski do krojenia, szpilkę do płyty chlebowej, a nawet metalową szpilkę samego układu scalonego.
Odnosi się to do strony referencyjnej Arduino:
Jeśli pin nie jest podłączony do niczego, digitalRead () może zwrócić WYSOKI lub NISKI (a to może się zmieniać losowo).
Jeśli spojrzysz na samouczek Arduino Digital Pin :
Oznacza to jednak również, że piny wejściowe bez podłączonych do nich przewodów lub z przewodami podłączonymi do nich, które nie są podłączone do innych obwodów, będą zgłaszać pozornie przypadkowe zmiany stanu styków, wychwytywanie szumu elektrycznego z otoczenia lub pojemnościowe sprzężenie stanu pobliskiej szpilki.
Często przydatne jest sterowanie pinem wejściowym do znanego stanu, jeśli nie ma wejścia. Można tego dokonać, dodając na wejściu rezystor podciągający (do + 5 V) lub rezystor rozwijany (rezystor do masy), przy czym 10K jest wspólną wartością. Istnieją również wygodne rezystory pullup 20K wbudowane w układ Atmega, do których można uzyskać dostęp z poziomu oprogramowania. Te wbudowane rezystory podciągające są dostępne w następujący sposób.
pinMode(pin, INPUT); // set pin to input
digitalWrite(pin, HIGH); // turn on pullup resistors
Te rezystory o niskim obciążeniu wymuszają stan styku wejściowego w znanym stanie i łatwo można je zastąpić silniejszymi napięciami wejściowymi, takimi jak bezpośrednie połączenie z masą lub + 5 V.