Tlačítko jako přepínač

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.

Demonstrace vkládání podmínkových příkazů do těla jiných podmínkových příkazů

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

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.

Příklad použití logických operátorů

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.

Zapojení pro program přepínač

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 přepínač

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é stavyStav tlačítkaProměnná prepinacpin 2Komentář
Stav 1000Tlačí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 2011Tlačí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 3100Situace, kdy není tlačítko aktivní a v systému je informace, že LED má být neaktivní.
Stav 4111Situace, kdy není tlačítko aktivní a v systému je informace, že LED má být aktivní.
Pravdivostní tabulka programu přepínač

Ú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.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *