Rýchlokurz micro:bit/02 Animácia
Zo stránky SensorWiki
← Predchádzajúca lekcia | ⌂ Obsah kurzu | Nasledujúca lekcia →
Čo sa naučíte
- nakresliť vlastný obrázok,
- vytvoriť animáciu zo striedajúcich sa obrázkov,
- čo je nekonečný cyklus a prečo ho majú takmer všetky programy pre mikrokontroléry.
Vysvetlenie: cyklus
Animácia je rýchle striedanie obrázkov, presne ako vo filme. Keby sme chceli, aby smajlík žmurkal stále dookola, museli by sme príkazy zobraz – počkaj – zobraz – počkaj napísať nekonečne veľakrát. Namiesto toho použijeme cyklus (anglicky loop): konštrukciu, ktorá opakuje skupinu príkazov. Príkazy vnútri cyklu sa nazývajú telo cyklu.
Blok forever je nekonečný cyklus: jeho telo sa vykoná, a keď program príde na koniec, pokračuje znova od začiatku tela, a tak stále dookola, kým micro:bit nevypnete.
Na počítači program po skončení práce skončí a vráti riadenie operačnému systému. Mikrokontrolér však žiadny operačný systém, ktorému by mohol „vrátiť slovo“, nemá. Jeho úlohou je väčšinou nepretržite niečo sledovať a riadiť, napr. merať teplotu a zapínať kúrenie. Preto majú takmer všetky programy pre mikrokontroléry rovnakú stavbu:
- príprava – vykoná sa raz po zapnutí (blok on start),
- hlavná slučka – opakuje sa donekonečna (blok forever).
Túto stavbu uvidíte aj v iných systémoch, napr. v prostredí Arduino sa tieto dve časti volajú setup() a loop().
Program: žmurkajúci smajlík
Otvorený smajlík je medzi hotovými ikonami, ale žmurkajúci nie. Ten si nakreslíme sami pomocou bloku show leds (kategória Basic), v ktorom klikaním rozsvecujete a zhasínate jednotlivé LED.
-
Program v blokoch...
-
...a jeho beh v simulátore
basic.forever(function () {
basic.showIcon(IconNames.Happy)
basic.pause(1000)
basic.showLeds(`
. . . . .
. # . . .
. . . . .
# . . . #
. # # # .
`)
basic.pause(200)
})
def on_forever():
basic.show_icon(IconNames.HAPPY)
basic.pause(1000)
basic.show_leds("""
. . . . .
. # . . .
. . . . .
# . . . #
. # # # .
""")
basic.pause(200)
basic.forever(on_forever)
Ako to funguje
Vlastný obrázok sa v textovom zápise kreslí priamo znakmi: # znamená rozsvietenú LED, . zhasnutú. Päť riadkov po päť znakov presne zodpovedá displeju.
Smajlík svieti 1 sekundu s otvorenými očami a 0,2 sekundy žmurká. Potom sa telo cyklu začne znova. Skutočné časy sú o niečo dlhšie, pretože bloky show icon a show leds samy po zobrazení chvíľu počkajú (približne 0,4 – 0,6 s). Na presné časovanie sa preto nespoliehajte.
Odsadenie (medzery na začiatku riadkov) ukazuje, ktoré príkazy patria do tela cyklu. V JavaScripte je telo navyše uzavreté v zložených zátvorkách { } a odsadenie slúži len na lepšiu čitateľnosť. V Pythone zátvorky nie sú a odsadenie je povinné: práve ono určuje, čo je vnútri cyklu. V blokoch to isté vyjadruje to, že bloky sú vložené do „čeľustí“ bloku forever.
Možno vás zarazí, že v Pythone je def on_forever(): a v JavaScripte function (). Takto sa zapisuje funkcia, teda pomenovaná skupina príkazov, ktorá sa vykoná neskôr. Posledný riadok basic.forever(on_forever) hovorí: „túto skupinu príkazov opakuj stále dookola“. Funkciám sa budeme podrobnejšie venovať v lekcii o tlačidlách. Zatiaľ stačí vedieť, že celý obsah funkcie tvorí telo cyklu.
Časté chyby
- Chýbajúca pauza. Bez pauzy sa obrázky striedajú tak rýchlo, že ich oko nerozlíši.
- Program je v on start namiesto vo forever. Animácia potom prebehne len raz.
- Zlé odsadenie v Pythone. Príkaz, ktorý nie je odsadený, už nepatrí do tela cyklu.
Úlohy
- Zmeňte časy tak, aby smajlík žmurkal pomaly a „ospalo“.
- Nakreslite animáciu tlčúceho srdca: striedajte ikony Heart a Small Heart.
- Vytvorte animáciu aspoň zo štyroch vlastných obrázkov, napr. otáčajúcu sa čiaru ( | / — \ ) alebo panáčika, ktorý máva.
- Do bloku on start pridajte príkaz, ktorý pred začiatkom animácie raz zobrazí text „START“. Uvedomte si, prečo sa zobrazí len raz.
← Predchádzajúca lekcia | ⌂ Obsah kurzu | Nasledujúca lekcia →