Druhy opakování v programu
V lekci K čemu je dobré pole hodnot jsme si ukázali, jakým způsobem můžeme pole hodnot použít pro uložení jednotlivých pozic naší robotické ruky.
V dnešní lekci se naučíme, jakým způsobem můžeme toto pole naplnit výchozími hodnotami. Tento krok není obvykle nutný, pole plníme v běžném programu dle potřeby průběžně.
V našem programu ale budou nějaké úvodní hodnoty vhodné. Jednotlivá pole totiž naplníme výchozí polohou ovládaných servomotorů, abychom zamezili případným nepředvídatelným pohýbům ruky v případě spuštění přehrávání ještě před uložením veškerých požadovaných pozic.
Navíc se dozvíme něco více o tom, jakým způsobem fungují programové bloky pro opakování (cykly) a k čemu je v našem programu můžeme použít.
Plníme proměnnou typu pole daty
Než se pustíme do programování, připomeňme si základní strukturu proměnné typu pole.
Jen zopakování důležitých informací pro tvorbu další části programu, první pozice pole má svůj index 0, druhá pozice má index 1 a tak dále.
Předpokládejme, že budeme chtít ukládat osm pozic robotické ruky. V tom případě první pozice v poli bude mít index 0 a poslední pozice bude mít index 7. Výchozí pozice ruky bude nastavena na úhel 90°.
Kód by pro tento případ a pro první servo vypadal takto:
Zkuste si představit, jak by tato část programu byla dlouhá, kdybychom potřebovali uložit třeba padesát pozic a navíc pro všechny servomotory, ne jen pro jeden (jako v této ukázce).
Vzpomeňme si na programátorské pravidlo DRY (zmiňované v úvodu lekce Pracujeme s proměnnou) - "neopakuj se". Jak bychom ho mohli použít při řešení našeho problému s efektivním naplnění polí výchozími hodnotami?
Máme již nějaké proměnné, obsahující použitelné informace, k dispozici? Existují nějaké programové bloky, které ještě neznáme, ale které bychom mohli použít?
Ano, v tomto okamžiku již máme k dispozici proměnnou "pocet_pohybu", obsahující požadovaný počet jednotlivých pozic ruky, které chceme uložit. Dále využijeme proměnnou "index" (jakým způsobem ji použijeme bude vysvětleno dále v této lekci).
Na pomoc si ještě vezmeme další programový blok, který je velmi podobný programovému bloku "Opakuj stále" (lekce První program).
Opakuj ... krát
Tento blok cyklu v programu zajistí, že cokoli (jakékoli další programové bloky) umístíte dovnitř tohoto bloku, bude ve smyčce (v cyklu) provedeno v požadovaném počtu opakování. V případě tohoto konkrétního bloku bude vše provedeno 10x, poté tento blok skončí a program bude pokračovat dále.
V případě našeho programu můžeme použít pro nastavení počtu opakování proměnnou "pocet_pohybu", která zajistí provedení právě takového počtu opakování, která potřebujeme. Pro ukládání aktuální hodnoty indexu využijeme proměnnou "index".
Během každého jednotlivého cyklu potřebujeme provést následující činnosti:
- Do aktuální pozice pole (dané indexem) uložit požadovanou hodnotu (výchozí úhel natočení servomotoru).
- Zvětšit hodnotu indexu o 1.
Druhý bod je velmi důležitý. Pokud bychom totiž hodnotu indexu postupně nezvětšovali, cyklus by se sice v požadovaném počtu opakování provedl, ale výchozí hodnoty by se ukládaly stále jen do jedné pozice v poli.
Zvyšování hodnoty indexu nám zajistí následující programový blok.
Zaměnit ... za ...
Tento blok zajistí změnu konkrétní proměnné o požadovanou hodnotu. Například pokud chceme zvýšit proměnnou index o jeden, do okénka vepíšeme číslo 1. Pokud bychom chtěli naopak index snížit o jeden, vepíšeme číslo -1.
Poznámka: Na tomto místě je potřeba zmínit, že český překlad tohoto bloku je trochu matoucí. Spíše než "zaměnit ... za ..." by bylo vhodnější "změnit ... o ...".
Složený programový blok
Kompletní složený programový blok vykonávající výše uvedenou funkcionalitu vypadá následovně (pro první servo nastavené na úhel 90°):
Dále kompletní složený blok pro všechna serva na 90°:
Na závěr celá úvodní část našeho programu.
- zahájení vykonávání programu
- inicializace ovladače servomotorů
- definice potřebných proměnných
- definice polí hodnot pro servomotory
- naplnění polí výchozími hodnotami
Poznámka: Všimněme si, že po provedení cyklu plnění polí daty je přidán znovu blok, který nastaví proměnné "index" hodnotu 0. Vzhledem k tomu, že s proměnnou "index" dále v programu budeme pracovat, její opětné vynulování je nezbytný předpoklad pro správné fungování zbytku programu.
Shrnutí
Připomeňme si, co vše jsme se v této lekci naučili:
- víme, jakým způsobem pracuje cyklus s daným počtem opakování a umíme jej v programu použít
- umíme naplnit proměnnou typu pole výchozími hodnotami
- umíme aktivně používat proměnné
Zatím jsme pracovali především na úvodní a velice důležité části celého programu, nadefinovali a nastavili jsme si všechny potřebné proměnné. Dále již začneme pracovat na výkonné části programu, kde aktivně využijeme veškeré znalosti z minulých lekcí.