(pinMode) Arduino INPUT_PULLUP
V tomto návode vám ukážem rôzne príklady pomocou dosky Arduino a jednoduchého tlačidla, aby som vysvetlil, čo INPUT_PULLUP robí a ako ho používať vo vašich programoch Arduino.
(pinMode)
S Arduino môžete použiť digitálne kolíky buď na čítanie (binárnych) údajov zo senzora,
Napríklad:
alebo na zápis (binárnych) údajov do akčného člena.
Napríklad :

- VÝSTUP: slúži na zapisovanie údajov do akčného člena, napríklad aj LED.
- VSTUP: v tomto prípade budete čítať údaje zo senzora. Hodnota, ktorú získate, bude VYSOKÁ alebo NÍZKA (binárna).
Ale je tu aj tretia možnosť:
INPUT_PULLUP. Táto možnosť je rovnaká ako INPUT (čítate dáta zo senzora), ale okrem toho je povolený interný pull-up rezistor – medzi 20k a 50k Ohm – aby sa signál predvolene udržal VYSOKÝ.
Problémom je : “plávajúca hodnota Pinu“

Jednu nohu tlačidla pripojíte k zemi (GND) a druhú – na druhej strane tlačidla – k digitálnemu kolíku. Napíšme jednoduchý kód na vytlačenie hodnoty tlačidla na sériovom monitore.
#define BUTTON_PIN 4
void setup() {
Serial.begin(9600);
pinMode(BUTTON_PIN, INPUT);
}
void loop() {
Serial.println(digitalRead(BUTTON_PIN));
delay(10);
}
2 dôležité veci:
pinMode(BUTTON_PIN, INPUT);
nastavíme pin 4 na INPUT, aby sme mohli čítať údaje z tlačidla.digitalRead(BUTTON_PIN)
to nám dá aktuálny stav tlačidla, buď LOW alebo HIGH.
Ak spustíme tento program a otvoríme sériový plotter (Nástroje > Sériový plotter, alebo CTRL+SHIFT+L), bez stlačenia tlačidla získame toto.

Keď stlačíme tlačidlo, hodnota je vždy NÍZKA, ale keď ho uvoľníme, je úplne náhodná:
niekedy VYSOKÁ, inokedy NÍZKA a veľmi sa pohybuje. Vidíme to, pretože napätie pre tlačidlo sa pohybuje medzi 0 a 5V. Ak je napätie pod určitou hodnotou V, Arduino bude čítať LOW. A ak je nad určitým množstvom V, Arduino bude čítať HIGH.
Keďže pre tlačidlo neexistuje žiadna interná alebo externá referencia napätia, hodnota bude veľmi náhodne oscilovať. A ako môžete predvídať, nemôžeme sa spoliehať na tieto údaje pri prijímaní rozhodnutí v rámci nášho programu Arduino. Čo musíme urobiť, je „vynútiť“ predvolený stav (tlačidlo nie je stlačené), aby bol blízko HIGH alebo LOW.
Použitie Arduino INPUT_PULLUP
Použime presne ten istý obvod, ale tentoraz s INPUT_PULLUP
#define BUTTON_PIN 4
void setup() {
Serial.begin(9600);
pinMode(BUTTON_PIN, INPUT_PULLUP);
}
void loop() {
Serial.println(digitalRead(BUTTON_PIN));
delay(10);
}
Ak spustíte tento kód a otvoríte sériový plotr, uvidíte, že predvolená hodnota je 1 (HIGH). Keď stlačíte tlačidlo, stav priamo prejde na 0 (LOW) a vráti sa späť na HIGH, keď tlačidlo uvoľníte.

No teraz je to oveľa lepšie. Problém vyriešený!
Keď nastavíte režim na INPUT_PULLUP, interný odpor – vnútri dosky Arduino – sa nastaví medzi digitálny kolík 4 a VCC (5V).
Tento odpor – hodnota odhadovaná medzi 20 k a 50 kOhm – zabezpečí, že stav zostane VYSOKÝ. Keď stlačíte tlačidlo, stav sa zmení na NÍZKY.
Použitie externého odporu namiesto Arduino INPUT_PULLUP
Pull up rezistor
Namiesto použitia vnútorného pull up odporu na vašej dosky Arduino sa môžete rozhodnúť vytvoriť obvod sami a pridať externý pull up odpor.

Tu som jednoducho pridal 10k Ohm odpor medzi jednu nohu tlačidla (rovnaká strana ako dátová strana – digitálny kolík 4) a VCC (5V).
Teraz s týmto okruhom už nemusíte povoliť interné pull up. Takže vo svojom programe použite
pinMode(BUTTON_PIN, INPUT);
namiesto toho pinMode(BUTTON_PIN, INPUT_PULLUP);
Keď spustíte program, budete mať rovnaký výsledok: predvolený stav tlačidla je VYSOKÝ a keď ho stlačíte, jeho stav sa zmení na NÍZKY.

Pull down rezistor
Toto je ďalšia možnosť, ktorú si môžete vybrať, ktorá je tiež veľmi populárna:
pridajte Pull down odpor. Predvolený stav tlačidla bude teda NÍZKY a keď ho stlačíte, zmení sa na VYSOKÝ. Na rozdiel od Pull up odporu ho nemôžete nastaviť len pomocou kódu, budete musieť použiť externý odpor.
Tu je okruh.

Okruh je podobný predchádzajúcemu:
- 10k Ohmový odpor je medzi jednou nohou a zemou (GND).
- Vodič pre digitálny kolík 4 je na rovnakej strane ako uzemnenie.
- Druhá strana tlačidla je pripojená priamo k VCC (5V).
Pri spustení programu pomocou pinMode(BUTTON_PIN, INPUT);
dostanete:

Skvelé! Teraz je predvolená hodnota, keď tlačidlo nie je stlačené, NÍZKA. A v tomto príklade, keď som stlačil tlačidlo, stav sa zvýšil na HIGH.
Záver – Arduino INPUT_PULLUP
V tomto návode ste videli, ako správne používať pull up a pull down rezistory pre vaše Arduino senzory a kedy použiť možnosť INPUT_PULLUP pre funkciu pinMode. Aby sme to zhrnuli, máte 3 možnosti v závislosti od predvoleného stavu, ktorý chcete pre tlačidlo:
- 1.Pridajte externý pull down odpor, takže predvolený stav je LOW.
- 2.Pridajte externý pull up odpor, takže predvolený stav je VYSOKÝ.
- 3.Použite interný pull-up odpor Arduino. Správanie bude rovnaké ako pri možnosti č.2
Neexistuje lepšia alebo horšia voľba, závisí to od dostupných hardvérových komponentov, ktoré máte, a od niektorých požiadaviek špecifických pre váš projekt. Je to tiež otázka preferencie:
chcete, aby bol predvolený stav (keď nie je stlačený) NÍZKY alebo VYSOKÝ? – s vedomím, že to možno jednoducho opraviť na strane softvéru.
Pridaj komentár