Podmínkové příkazy jsou používány v arduinu v případě že chceme, aby arduino nějakým způsobem reagovalo na změny v programu, nebo na nějaký programový vstup. Může jít o stisk tlačítka, nebo třeba reakce na to, že měřená hodnota přesáhla nějakou mez. Bez podmínkových příkazů by arduino nemohlo reagovat na žádné události například typu pokyn z dálkového ovládání.
Podmínkové příkazy mohou být jen jednoduché reakce, ale mohou také být i dosti složité, pokud chceme nadefinovat nějakou složitou reakci na více splněných podmínek najednou. Z toho co jsem právě napsal jste jistě pochopili, že podmínkové příkazy jsou velmi důležité a je nutné jim věnovat velkou pozornost. Setkávat se s nimi budete při programování prakticky na každém kroku.
Jak to vlastně funguje…
Podmínkové příkazy fungují tak, že porovnávají v části příkazu proměnnou s nějakou hodnotou (případně zjišťují jestli nastala nějaká událost). Po porovnání proměnné s hodnotou program v arduinu může zjistit dvě věci – za prvé že podmínka byla splněna – tomuto stavu říkáme v programátorském žargonu „true„, čili pravda, nebo nebyla splněna a tomuto stavu říkáme „false„, čili nepravda.
V případě, že nastane stav true – pravda, čili podmínka byla splněna, pokračuje program dále do takzvaného těla podmínky, kde má v kódu zapsáno co má dál dělat.
V případě, že nastane stav false – nepravda, čili podmínka nebyla splněna, přeskakuje program tělo podmínky, které neprovádí a pokračuje dál navazujícím kódem programu.
Porovnávací operátory
Z předchozího textu je jasné, že je třeba programu zadat nějaké porovnávání proměnné a hodnoty. Do kódu můžeme tyto podmínky zapsat pomocí porovnávacích operátorů – znamének – mezi porovnávanými veličinami. Porovnávací operátor samozřejmě není pouze jeden. Je jich šest a umožňují nám různé varianty při zadávání podmínek.
Zápisy operátorů
- A == B – jestliže je A stejné, nebo rovno jako B je podmínka splněna (true) a splní se tělo podmínkového příkazu
- A != B – jestliže A není stejné, nebo se nerovná B je podmínka splněna (true) a splní se tělo podmínkového příkazu
- A < B – jestliže A je menší než B je podmínka splněna (true) a splní se tělo podmínkového příkazu
- A > B – jestliže A je větší než B je podmínka splněna (true) a splní se tělo podmínkového příkazu
- A <= B – jestliže A je menší, nebo rovno než B je podmínka splněna (true) a splní se tělo podmínkového příkazu
- A >= B – jestliže A je větší, nebo rovno než B je podmínka splněna (true) a splní se tělo podmínkového příkazu
Tip: Měl jsem problém zapamatovat si zápisy variant, kdy je A menší/větší, nebo rovno. Pokud je rovnítko přehozené se znaménkem nerovnosti arduino IDE to vyhodnotí jako syntaktickou chybu a program nezkompiluje. Znaménko pro nerovnost musí být vždy uvedené v zápisu jako první.
Základní syntaxe příkazu if…
- Podmínka je uzavřena v kulatých závorkách levé „(“ a pravé „)„. Konstruována je tak, že porovnáváme dvě hodnoty, nebo proměnné (které jsou na obou okrajích) a uprostřed je operátor.
- Tělo podmínky následuje po stanovení podmínky a je uzavřené ve složených závorkách levé „{“ a pravé „}„. Platí. že levá složená závorka nutné musí mít odpovídající pravou závorku (jinak arduino IDE při kompilaci vyhodí syntaktickou chybu).
- Podmínkový příkaz vždy začíná synatxí „if„. Celá další konstrukce podmínkového stromu je považována za součást, pokud není přerušena dalším klíčovým slovem if, nebo logicky ukončena závěrečnou složenou závorkou.
- Pokud konstrukce podmínky dále pokračuje dalším větvením, jsou použitá klíčová slova else if, přičemž za těmito slovy vždy následuje soustava kulatých závorek s další podmínkovou konstrukcí. Žádná konstrukce podmínky za if, ani za else if v dané podmínkové soustavě by neměla být stejná – docházelo by zbytečně k duplicitě podmínek. Podmínky jsou vyhodnocovány postupně systémem shora dolů – tomu by měla odpovídat konstrukce podmínkového stromu. Počet prvků else if není omezen, je možno použít jich více.
- Na konci podmínkového stromu je možné použít klíčové slovo else. Tato podmínka se automaticky provede v dané podmínkové soustavě, pokud není splněna žádná z předešlých podmínek a z tohoto důvodu se připojuje k soustavě až na posledním místě a je možno ji použít pouze jednou. Za klíčovým slovem else se nedává podmínka do kulatých závorek.
Podmínkové soustavy je možné konstruovat i vkládáním podmínkových příkazů do těl nadřazeného podmínkového příkazu (Související projekty jsou popsané zde). Je tak možno programově popsat složitější modely reakcí programu.
if (A == B) { if (A == 1) { Příkazy k provedení – 1 } else if (A == 2) { Příkazy k provedení – 2 } } else if (A != B) { Příkazy k provedení – 3 } else { Příkazy k provedení – 4 } |
Složené podmínkové příkazy
Složené podmínkové příkazy jsou popsané i s praktickými příklady jejich použití v lekci o ovládání více tlačítky. Takže krátce jen pro upřesnění. Logické operátory konjunkce, disjunkce a negace umožňují složitější konstrukce podmínky, kdy je díky těmto operátorům možné složitěji modelovat vztahy mezi jednotlivými podmínkami. Použít můžeme tři základní operátory.
Konjunkce – podmínka je splněna pouze když jsou splněny obě součásti podmínky. Operátor je značený buď „&&„, nebo slovem and.
((A == 10) && (B==20)) – aby byla podmínka splněna musí být proměnná A rovna 10 a proměnná B rovna 20. Jakákoliv jiná varianta je false.
((A>=10) && (A<=20)) – aby byla splněna podmínka musí být hodnota A zároveň vyšší než 10 a zároveň nesmí být menší než 20. Tato konstrukce se používá, pokud potřebujeme aby podmínka byla splněna pokud jsou hodnoty v určitém rozsahu. V našem případě podmínce vyhovují hodnoty celých čísel 10 – 20.
Disjunkce – podmínky je splněna pokud je splněna jakákoliv ze součástí podmínky. Pro operátor se používá buď značky „||„, nebo klíčové slovo or.
((A == 1) || (B==1)) – aby byla splněna podmínka musí být proměna A, nebo proměnná B rovna hodnotě 1. Tato konstrukce je použitelná například, pokud testujete stisk tlačítka ze dvou různých míst.
Negace – podmínka je splněna, pokud neplatí podmínka v závorce.
(A != 1) – Podmínka je splněna pokud se A nerovná 1.
!(A == 1) – Podmínka je splněna pokud se A nerovná 1 – další platná varianta.
Podmínky s logickými operátory je možné kombinovat do mnoha variant:
(((A==1) || (B==1)) && (C==1)) – priorita při vyhodnocování takto složité podmínky je daná umístěním závorek. První se vyhodnocuje soustava A a B. Podmínka je platná pokud A, nebo B je rovno 1 a zároveň C musí být rovno 1. Pokud se A i B nerovná 1 je podmínka false i kdyby se C rovnalo 1.
Zkuste si podmínkové příkazy vyzkoušet v následujících lekcích.
Výborně popsané, včetně složených podmínek. Ofiko web arduino by si měl vzít příklad. Vynikající práce.