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ápis | význam |
|---|---|
== | rovná se |
!= | nerovná se |
< | menší než |
> | větší než |
<= | menší nebo rovno |
>= | větší nebo rovno |
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.
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?"