W nowszych Arduinos można ustawić pinMode do jednego z trzech stanów: OUTPUT
, INPUT
, i INPUT_PULLUP
.
Ta strona mówi:
Układ Atmega w Arduino ma wewnętrzne rezystory podciągające (rezystory łączące się wewnętrznie z zasilaniem), do których można uzyskać dostęp. Jeśli wolisz używać ich zamiast zewnętrznych rezystorów rozwijanych, możesz użyć argumentu INPUT_PULLUP w pinMode (). To skutecznie odwraca zachowanie, gdzie WYSOKA oznacza, że czujnik jest wyłączony, a NISKA oznacza, że czujnik jest włączony.
Jestem raczej pewien, że odwrócenie zachowania nie jest jedyną rzeczą, którą robi.
Co ma INPUT_PULLUP
zrobić? Czym się różni INPUT
i jak decyduje się, którego użyć?
Odpowiedzi:
Domyślnie
INPUT
ustawiony jest pin jakoINPUT
. Jeśli pin jest całkowicie odłączony, losowo odczytaHIGH
iLOW
. Jeśli przywiążesz go do + 5 V lub 0 V, to oczywiście będzie czytaćHIGH
lubLOW
.Wewnątrz Arduino znajdują się rezystory podciągające o wartości około 50 kΩ. Rezystory te można opcjonalnie podłączyć wewnętrznie za pomocą
INPUT_PULLUP
. Jest to funkcjonalnie (i elektrycznie) równoważne podłączeniu rezystora 50 kΩ między pinem a + 5 V, jedyną różnicą jest to, że nie wymaga żadnych zewnętrznych elementów i można go włączać i wyłączać w oprogramowaniu podczas wykonywania programu.Dlaczego więc podciągania, a nie podciągania? Prawdopodobnie ma to kilka przyczyn, ale kiedy okablowanie przycisków lub przełączników lub coś „normalnie otwartego”, musisz tylko przywiązać do ziemi, nie musisz biegać do nich + 5 V. Ponieważ większość desek zostanie zaprojektowana z dużymi zalewami z powodów ekranowania, wiązanie z podłożem jest praktycznie uzasadnione.
Niektóre bardziej funkcjonalne układy scalone, takie jak układy ARM, mają zarówno podciągania, jak i opuszczania, ale 8-bitowa linia AVR ma tylko podciągnięcia. Musisz tylko pamiętać, że
HIGH
jest „otwarty” iLOW
„zamknięty”.źródło
Pamiętaj, że przed wersją 1.0.1 można było włączyć podciągania za pomocą
digitalWrite()
. I nadal możesz.Kod:
Jest to ważne rozróżnienie, ponieważ
INPUT_PULLUP
oczywiście włącza rezystor podciągający. Jednak mniej oczywiste jest to, że począwszy od wersji 1.0.1, zwykłe wywołanieINPUT
wymusza wyłączenie podciągania. (Wcześniej stan podciągania pozostawał taki sam).Aby zobaczyć, jak pin działa z podciągnięciami i bez nich, obejrzyj następujące filmy.
Pływająca szpilka na oscyloskopie: http://www.youtube.com/watch?v=dBIBFLYCjMM
Po włączeniu pull-up: http://www.youtube.com/watch?v=SAIw7LLVl-U
Pełny film instruktażowy na temat podciągnięć (zwróć uwagę, że zrobiłem to przed dodaniem INPUT_PULLUP do biblioteki Arduino): http://www.youtube.com/watch?&v=jJnD6LdGmUo
źródło