Podmínkové příkazy, které jsme si spolu s proměnnými ukázali v předešlé lekci mohu být samozřejmě daleko složitější. Podmínky lze vkládat jednu do druhé, popřípadě můžeme podmínku sestavit i s jistou logikou, čímž můžeme pro spuštění činnosti programu nastavit i složitější podmínku, kdy je nutné splnit i několik parametrů.
Pro jednoduchost si to ukážeme na tlačítku, které můžeme programově změnit na přepínač (který se ve výbavě arduino setů zpravidla vůbec nevyskytuje). Jaký je vlastně rozdíl mezi tlačítkem a přepínačem? Tlačítko se po aktivaci uživatelem automaticky vrací do předchozího nesepnutého stavu, kdežto přepínač po aktivaci zůstává sepnutý. Pokud ho potřebujeme deaktivovat je nutný přímou deaktivaci uživatelem.
Podmínkové příkazy
V předešlé lekci jsem se zmínil o tom, co jsou to podmínkové příkazy. Podmínkové příkazy slouží k řízení programu a umožňují programu reagovat podmíněně na stav programu, nebo okolí. Zmínil jsem se také, že při použití podmínkových příkazů má programátor možnost řešit i velmi složité rozhodovací procedury. Nyní si zmíníme pár technik, jak na to.
Vkládání podmínkových příkazů do podmínkových příkazů
Jednou z možností je vložit podmínkový příkaz do jiného podmínkového příkazu. Tuto možnost je v programu možné použít v případě, že programátor potřebuje, aby se v rámci určité situace realizovala skupina příkazů v závislosti na dalších podmínkách.
Příklad, který jsem zde uvedl, jako příklad by mohl například řešit situaci všech variant sepnutí tlačítka „a“ a tlačítka „b“. První nadřazená podmínka řeší situaci pokud je, nebo není, stisknuto tlačítko „a“. V případě, že je stisknuto tlačítko „a“ reaguje na situaci první půlka nadřazené podmínky, pokud dané tlačítko není stisknuté reaguje druhá půlka. Ovšem v rámci obou větví té „nadřazené“ části naší podmínkové soustavy je ještě navíc vložena další podmínková soustava, která řeší stisk, nebo neaktivitu tlačítka „b“.
Celkově je tato podmínková soustava schopná reagovat jak na stisk obou tlačítek, tak na deaktivaci obou tlačítek, ale třeba také na variantu, kdy je stisknuto pouze jedno z obou tlačítek.
Porovnávací operátory
Abychom si mohli vysvětlit co je porovnávací operátor, musíme si napřed říci, kde ho v podmínkovém příkazu nalezneme. Z doprovodného obrázku je to myslím docela jasné. Napřed si zkuste nalézt tu část kódu, které říkáme výraz podmínky. Je to ta část mezi závorkami (ve žlutém rámečku), kde se definuje podmínka, která má být použita při vyhodnocování podmínkového výrazu.
Již z toho, že jsme pro popsání operátoru použili slovo „porovnávací“ je jasné, že způsob jakým tento výraz pracuje je ten, že porovnává dvě hodnoty/nebo proměnné. Hodnoty, nebo proměnné tudíž naleznete na začátku a na konci výrazu. Ty značky mezi nimi (příklad: dvakrát znak =) je právě ten operátor o němž je zde řeč.
Porovnávací operátory můžete použít v šesti různých kombinacích (viz. obrázek), které nabízejí velké množství možností pro sestavování podmínek.
Logické operátory
Jsou velmi užitečným způsobem jak zjednodušit tvorbu podmínkových soustav. Místo složité konstrukce a definování vložených podmínek můžeme složitější způsob jakým by měl podmínkový příkaz reagovat na stav podmínky zapsat úplně jednoduše.
Podrobněji si vysvětlíme logické operátory v další lekci, kdy si na toto téma zkusíme i sestavit zapojení. Na grafice je prakticky předvedeno použití operátoru AND – logického souhlasu. Podmínka je splněna jen tehdy, jsou-li splněny obě její části (část týkající se proměnné a i proměnné b). Mimochodem tento kód funguje úplně stejně jako kód na kterém jsem vám demonstroval vkládání podmínek do sebe a vypadá mnohem jednodušeji a přehledněji.
Program Přepínač
Pro program přepínač sestavte jednoduché zapojení. Pokud plynule přecházíte z předešlé lekce, tak stačí pouze odebrat jednu větev s LED diodou a máte hotovo. Pro pořádek uvádím, že je použito tlačítko, ochranný odpor 220 ohmů a LED dioda.
Na desku odešlete následující program.
/* Program pro obsluhu stisku tlačítka */ //Nastavení desky – inicializace pinů a proměnných //Proměnná přepínač stavy: 0 přepínač není sepnutý, 1 – přepínač je sepnutý int prepinac = 0; void setup() { pinMode(2, OUTPUT); pinMode(7,INPUT_PULLUP); } //Provedení programu – spuštění v nekonečné smyčce void loop() { /* Načtení stavu na pinu 7 – stisk tlačítka*/ int tlacitko = digitalRead(7); //podmínkový příkaz řešící stavy v programu if ((tlacitko==0) && (prepinac == 0)) { prepinac = 1; digitalWrite(2,0); delay(200); } else if ((tlacitko==0) && (prepinac == 1)) { prepinac = 0; digitalWrite(2,1); delay(200); } else if ((tlacitko==1) && (prepinac == 0)) { digitalWrite(2,0); } else if ((tlacitko==1) && (prepinac == 1)) { digitalWrite(2,1); } } |
Program umí rozsvítit LED podle stisku tlačítka a poté co je tlačítko zpátky v původním stavu si pamatuje jestli je soustava aktivována, nebo deaktivována. Stav aktivace/deaktivace je ulložen v proměnné přepínač (1 – zapnutý, 0 – vypnutý). Podmínka řeší čtyři stavy – viz pravdivostní tabulka.
Programové stavy | Stav tlačítka | Proměnná prepinac | pin 2 | Komentář |
Stav 1 | 0 | 0 | 0 | Tlačítko je stisknuté, LED nesvítí díky předešlému stavu. Stiskem tlačítka se do proměnné prepinac vkládá stav 1 – aktivní LED. |
Stav 2 | 0 | 1 | 1 | Tlačítko je stisknuté, ale stav je aktivní od předešlého stisku. Do proměnné prepinac se vkládá stav systému 0 – neaktivní LED |
Stav 3 | 1 | 0 | 0 | Situace, kdy není tlačítko aktivní a v systému je informace, že LED má být neaktivní. |
Stav 4 | 1 | 1 | 1 | Situace, kdy není tlačítko aktivní a v systému je informace, že LED má být aktivní. |
Úkoly:
1, Zkuste upravit programy z lekce „Svítíme více LED diodami najednou“ – světelný had a navigační světla tak, aby ovládací tlačítko fungovalo jako přepínač a vy jste nemuseli při změně akce tlačítko držet stisknuté.
2, Sestavte zapojení tak, aby programový přepínač pomocí tlačítka přepínal střídavě svícení dvou LED diod.
Krásný den, několik týdnů hledám napsaný program, který dokáže přesně zadání v úkolu č. 2.
„Sestavte zapojení tak, aby programový přepínač pomocí tlačítka přepínal střídavě svícení dvou LED diod.“
Byl tento vyřešený úkol někde publikován? Adresa a pod.
Děkuji za odpověď
Ještě jednou krásný den.
Omlouvám se, že takto otravuji, ale po několika týdenním hledání jsem vzápětí, kdy jsem Vám psal poprvé, našel zápis s jedním tlačítkem a dvěma LED. Má to ale ještě háček, jedna LED svítí a zmáčknutím tlačítka zhasne a rozsvítí se druhá. Ta ale svítí jen při sepnutém tlačítku.
Ale myslím si, že už jsem blízko a že už to dám dohromady. Takže vše OK.
S pozdravem
Ivan Grüner