Lekce 6 - Cykly, jejich syntaxe a použití
V předešlém cvičení, Řešené úlohy k 4.-5. lekci programovacího jazyka Arduina, jsme si procvičili nabyté zkušenosti z předchozích lekcí.
V tomto tutoriálu programovacího jazyka pro Arduino se zaměříme na cykly. Najdeme je prakticky v každém dobře optimalizovaném kódu. Cykly slouží k lepší přehlednosti kódu. Pracují také efektivněji, než kdybychom kód psali vícekrát za sebou.
Cykly
Jak již samotné slovo cyklus napovídá, něco se bude opakovat. Když
chceme v programu nějakou činnost provést 100x, jistě nebudeme psát pod
sebe 100x ten samý kód. Místo toho jej vložíme do cyklu. Cyklů máme
několik druhů. V této lekci si dále vysvětlíme, kdy který použít.
Ukážeme si rovnou tři různé druhy cyklů, a to for
,
while
a do-while
. Podrobně si vysvětlíme, jak
který cyklus funguje. Samozřejmě si ukážeme praktické příklady.
Cyklus for
Tento cyklus je používán nejčastěji, hlavně pro jeho přehlednost,
jednoduchost a předem určený počet průchodů. Podstatou cyklu
for
je smyčka, která vykonává kód pro každou hodnotu
řídící proměnné. Cyklus for
se tedy skládá ze tří
hlavních částí - proměnná, podmínka a příkaz. Ve smyčce for
nejdříve vytvoříme proměnnou. Poté za středníkem napíšeme podmínku,
která musí platit, aby se smyčka vykonala. Za poslední středník pak
přijde akce, která se po každém vykonání s proměnnou udělá. Syntaxe
takového cyklu tedy vypadá následovně:
void setup() { Serial.begin(9600); for (int i = 0; i < 4; i++) { Serial.println("Výpis pomocí for cyklu"); // Příkaz pro vypisování textu pomocí for cyklu (text se vypíše 4x) } } /* * Programová smyčka */ void loop() { }
- Proměnná (
int i = 0
) - v tomto případě vlastně určuje počáteční hodnotu cyklu. Nejčastěji to bývá nula, jelikož od té se nejčastěji začíná. Proměnné vefor
cyklech se většinou značí písmenem i (index). - Podmínka (
i < 4
) - nám udává, v jakém případě se vykoná další krok našehofor
cyklu. Když nastane situace, že námi vytvořená podmínka platit nebude, cyklus skončí a program pokračuje dále. V našem případěfor
cyklus přestane fungovat, když proměnnái
bude větší nebo rovno 4. - Příkaz (
i++
) - zde říká, co se má s hlavní proměnnou v cyklu stát - konkrétně jestli se má zvýšit, nebo snížit. K tomu využijeme operátory++
(inkrementace) a--
(dekrementace). Tyto operátory samozřejmě můžeme využívat i mimo definici cyklufor
, jejich funkčnost zůstane stejná. V našem případě zvýšíme vždy po každém cyklu proměnnoui
o číslo 1.
Jak můžeme vidět, syntaxe for
cyklu je přehledná a velmi
jednoduchá. Použití cyklu je určitě lepší volba, než celý kód
nesmyslně vícekrát opisovat.
Cyklus while
Další cyklus, který si vysvětlíme, je while
. Funguje na
trochu jiném principu, než cyklus for
. Slovo while
v
češtině znamená "zatímco". Tento cyklus nám tedy říká, že příkaz
uvedený v bloku se opakuje tak dlouho, dokud platí vstupní podmínka.
Syntaxe while
je vlastně ještě jednodušší, než u
for
. V závorce vedle while
je podmínka a pod ní už
je jen závorkami označený blok, ve kterém jsou všechny příkazy. Přes
cyklus while
lze udělat i cyklus for
, jelikož
for
je vlastně takový případ while
.
While
cyklus se ale často používá na trochu jiné věci,
jejichž příklad si také ukážeme. V praxi může využití toho cyklu
vypadat následovně:
int pocetOpakovani = 0; void setup() { Serial.begin(9600); // Dokud bude podmínka platit, bude cyklus probíhat while (pocetOpakovani < 4) { Serial.println("While cyklus probíhá"); // Výpis textu do sériového monitoru pocetOpakovani++; } } /* * Programová smyčka */ void loop() { }
Náš cyklus opět vkládáme do funkce
void setup()
. Kdybychom jej vložili do funkce
void loop()
, neuvidíme stejně jako u cyklu for
žádný rozdíl.
Až budeme tvořit složitější programy, budeme pracovat primárně s
void loop()
funkcí, v níž se bude odehrávat většina našeho
kódu. Tento cyklus se poté dá hojně využívat při práci s tlačítky nebo
LED, ale o tom najdeme více informací v kurzu Arduino - Hardware.
Cyklus do-while
Posledním cyklem, který si dnes zmíníme, je cyklus do-while
.
Tento cyklus je hodně podobný předešlému while
cyklu.
Zásadní rozdíl mezi nimi je ale ten, že v cyklu do-while
je
podmínka umístěna až na konci cyklu. Tím máme zajištěno, že se
libovolný cyklus provede alespoň jednou.
Syntaxe do-while
je také poměrně jednoduchá. První část
cyklu tvoří klíčové slovo do
. Po něm následuje příkaz nebo
blok příkazů. Na konci je klíčové slovo while
s podmínkou,
která je po provedení akce zkontrolována. Když se podmínka vyhodnotí jako
neplatná, cyklus skončí a kód programu pokračuje dalšími řádky. Pokud
je však podmínka stále platná, cyklus se opakuje stejně jako u
while
.
Stejně jako u předešlých cyklů, i tento si teď ukážeme v praxi:
int pocetOpakovani = 0; void setup() { Serial.begin(9600); do { Serial.println("Do-while cyklus probíhá"); // Výpis textu do sériového monitoru pocetOpakovani++; } // Do-while cyklus - proběhne jednou a pak se zkontroluje, zda platí podmínka while (pocetOpakovani < 4); } /* * Programová smyčka */ void loop() { }
Ačkoliv cyklus do-while
není tak často používaný jako
while
nebo for
, v určitých situacích může být
jeho využití vhodnější.
Probrali jsme si tedy tři cykly a v jakých případech je používat. Vědomosti z této lekce jsou podobně jako podmínky velmi důležité. Budeme je používat prakticky v každém projektu, který nás v budoucnu v praxi potká.
V následujícím kvízu, Kvíz - Datové typy, podmínky a cykly v Arduinu, si vyzkoušíme nabyté zkušenosti z předchozích lekcí.