Arduino – podmínkové příkazy

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…

Základní syntaxe podmínkového příkazu
  • 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
}
Příklad podmínkového příkazu vloženého do jiného podmínkového výrazu

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.

1 komentář u „Arduino – podmínkové příkazy

  1. KT Reagovat

    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.

Napsat komentář

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