Close

Arduino základy – 11. funkce INPUT_PULLUP

Pokročilé zapojení tlačítka k Arduinu

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.

Potřebný hardware

– Arduino
–  tlačítko či přepínač
– Zkušební deska
– Propojovací vodič

Obvod

inputPullupButton
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

inputPullupSerial_sch

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);
}
}
Oldřich Horáček

2 Comments on “Arduino základy – 11. funkce INPUT_PULLUP

Martin
2.5.2016 at 19:49

Má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:18

Kouká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 ?

Napsat komentář