Přeskočit na hlavní obsah

Podmínky

Podmínka říká programu: "Tuhle část udělej jen tehdy, když něco platí."

Bez podmínek by program dělal pořád totéž. S podmínkami může reagovat na vstupy, naměřené hodnoty nebo stav zařízení.

if

Nejjednodušší podmínka je if.

if (teplota > 30) {
ventilator_zapni();
}

Program zapne ventilátor jen tehdy, když je teplota větší než 30.

Když podmínka neplatí, blok uvnitř složených závorek se přeskočí.

else

Často chceme říct i to, co se má stát v opačném případě.

if (tlacitko_stisknuto) {
led_zapni();
} else {
led_vypni();
}

Když je tlačítko stisknuté, LED se zapne. Jinak se vypne.

Více možností

Někdy nestačí dvě větve. Pak se používá else if.

if (napeti < 3300) {
stav = "slaba baterie";
} else if (napeti < 4000) {
stav = "baterie je ok";
} else {
stav = "baterie je plna";
}

Program zkouší podmínky postupně shora dolů. Jakmile jedna platí, provede její blok a zbytek přeskočí.

Porovnávání

V podmínkách se často používají porovnávací operátory:

zápisvýznam
==rovná se
!=nerovná se
<menší než
>větší než
<=menší nebo rovno
>=větší nebo rovno
Jedno rovnítko není porovnání

V mnoha jazycích znamená = přiřazení hodnoty. Porovnání se píše ==.

if (stav == 1) {
// porovnání
}

Jedno malé rovnítko dokáže udělat velký zmatek.

Podmínky v embedded

Podmínky jsou v embedded programech všude:

if (digitalRead(2) == HIGH) {
digitalWrite(13, HIGH);
} else {
digitalWrite(13, LOW);
}

Tento příklad čte stav pinu 2. Když je tlačítko stisknuté, zapne LED na pinu 13. Jinak ji vypne.

Podmínka je tady most mezi hardwarem a rozhodnutím programu.

Stavový automat

Hezký příklad podmínek je stavový automat. Program si pamatuje, v jakém je právě stavu, a podle vstupů se přesouvá do jiného stavu.

Třeba jednoduché tlačítko, které zapíná a vypíná LED, může mít dva stavy: VYPNUTO a ZAPNUTO.

V kódu může takový automat vypadat třeba takhle:

enum Stav {
VYPNUTO,
ZAPNUTO
};

enum Stav stav = VYPNUTO;

if (tlacitko_stisknuto) {
if (stav == VYPNUTO) {
stav = ZAPNUTO;
led_zapni();
} else {
stav = VYPNUTO;
led_vypni();
}
}

Proměnná stav říká, kde se program právě nachází. Podmínky pak rozhodují, kam se má přesunout dál.

U větších programů je tohle přehlednější než dlouhá hromada náhodně poskládaných if. Místo otázky "co všechno teď platí?" se ptáme jednodušeji: "v jakém jsem stavu a co se právě stalo?"