Arduino základy – 11. funkce INPUT_PULLUP
Na tomto příkladu si ukážeme použití funkce INPUT_PULLUP s pinMode(). Budeme tedy monitorovat stav spínače pomocí navázání sériové komunikace mezi Arduinem a vaším počítačem přes USB.
Dále také uvidíme, že změna stavu vstupu na HIGH zapříčiní rozsvícení LED na pinu 13. V případě změny stavu na LOW se LED logicky vypne.
Obsah článku:
Potřebný hardware
– Arduino
– tlačítko či přepínač
– Zkušební deska
– Propojovací vodič
Obvod
K Arduinu připojte dva dráty – černý zapojte od země k jedné z „noh“ tlačítka, druhý potom od digitálního pinu 2 k druhé „noze“ tlačítka.
Tlačítka či spínače při stlačení spojují dva body v obvodu. Když je tlačítko otevřené (nestlačené), tak mezi nohami tlačítka neexistuje žádné spojení. Jelikož interní pull-up rezistor na pinu 2 je aktivní a připojen k 5ti voltům, při otevření tlačítka čteme HIGH. Když je tlačítko zavřené, spojení se zemí je úplné a Arduino jej čte jako LOW.
Schéma
Kód
Zahájení sériové komunikace mezi Arduinem a PC na 9600 bitech dat za sekundu ve funkci setup je první věc, kterou je třeba udělat v programu znázorněném dole:
Serial.begin(9600);
Druhým krokem bude inicializovat digitální pin 2 jako vstup s povoleným interním pull-up rezistorem:
pinMode(2,INPUT_PULLUP);
Následující řádek stanoví pin 13 s LED jako výstup:
pinMode(13, OUTPUT);
Teď, když jsme dokončili nastavení, se přesuneme do hlavní smyčky vašeho kódu. Když je tlačítko nestlačené, interní pull-up rezistor se připojí k 5ti voltům. To způsobí, že Arduino hlásí „1“ nebo HIGH. Jakmile je tlačítko stlačené, pin na Arduinu je „stáhnut“ na zem – Arduino tedy hlásí „0“ nebo LOW.
První věc, kterou je třeba v hlavní smyčce vašeho programu udělat, je stanovení proměnné, jež bude obsahovat informace přicházející z vašeho spínače. Jelikož informace ze spínače budou buď „1“ nebo „0“, můžete použít datový typ int. Tuto proměnnou nazvěte sensorValue a nastavte hodnotu rovnou té z digitálního pinu 2. Tohoto lze docílit pouze jedním řádkem kódu:
int sensorValue = digitalRead(2);
Jakmile Arduino přečte vstup, nařiďte mu aby tyto informace tisknul počítači zpět jako desítkovou (DEC) hodnotu. Toto provedete příkazem Serial.printIn()v posledním řádku kódu:
Serial.println(sensorValue, DEC);
Když teď v Arduinu otevřete Serial Monitor, uvidíte v případě zavřeného spínače proud „nul“, nebo naopak proud „jedniček“ v případě otevřeného spínače.
LED na pinu 13 se rozsvítí pokaždé, když je spínač označen jako HIGH. Naopak, pokud se zobrazuje jako LOW, LED zhasne.
/* Input Pullup Serial Tento příklad demonstruje použití funkce pinMode(INPUT_PULLUP). Čte digitální vstup pinu 2 a výsledek tiskne na serial monitor. Obvod: * Přechodný spínač připojen od pinu 2 k zemi * Vestavěná LED na pinu 13 Oproti pinMode(INPUT), v našem případě pull-down rezistor nepotřebujeme. Interní 20 tis. ohmový rezisor je „stažen“ na 5V. Tato konfigurace způsobuje, že otevřený spínač je označen jako HIGH a zavřený se nám ukazuje jako LOW . vytvořeno 14. března 2012 autorem Scott Fitzgerald http://www.arduino.cc/en/Tutorial/InputPullupSerial Tento příklad kódu je veřejnou doménou. */ void setup(){ //zahajte sériové spojení Serial.begin(9600); //nastavte pin 2 jako vstup a povolte interní pull-up rezistor pinMode(2, INPUT_PULLUP); pinMode(13, OUTPUT); } void loop(){ //Hodnotu tlačítka přečtěte jako proměnnou int sensorVal = digitalRead(2); //Hodnotu tlačítka vytiskněte Serial.println(sensorVal); // Mějte na paměti, že „pullup“ značí obrácenou logiku // tlačítka. Když je otevřené, ukazuje se jako HIGH, // naopak zavřené je LOW. Pin 13 zapněte, jakmile je // tlačítko stlačené a vypněte jej, pokud není: if (sensorVal == HIGH) { digitalWrite(13, LOW); } else { digitalWrite(13, HIGH); } }
- Zažijte bouřku přímo v pokoji - 9.7.2024
- EggBot aneb kraslice trochu jinak - 20.3.2024
- Jak vyrobit plošný spoj pomocí laseru TOOCA L1? - 9.3.2024
2 Comments on “Arduino základy – 11. funkce INPUT_PULLUP”
Napsat komentář
Pro přidávání komentářů se musíte nejdříve přihlásit.
Martin
2.5.2016 at 19:49Mám dotaz.. Řeším problém. Mám vstup jako INPUT_PULLUP a pokud te při startu NodeMCU v 1.0 tlačítko stlačené board nenaběhne. Pokud je uvolněné tedy není spojené se zemí tak naběhne normálně. Jak vyřešit tento stav? Díky za rady 🙂
Hugo
4.3.2016 at 17:18Koukám na řešení, a chybí tam odpor. Já myslel, že bez odboru to pustí více jak 0.04A. Arduino má na každý pin 0.04A , nevadí mu to ?