Operácie

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:

  1. príprava – vykoná sa raz po zapnutí (blok on start),
  2. 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.

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

  1. Zmeňte časy tak, aby smajlík žmurkal pomaly a „ospalo“.
  2. Nakreslite animáciu tlčúceho srdca: striedajte ikony Heart a Small Heart.
  3. Vytvorte animáciu aspoň zo štyroch vlastných obrázkov, napr. otáčajúcu sa čiaru ( | / — \ ) alebo panáčika, ktorý máva.
  4. 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 →