Aplikace A9 Dokončujeme základy

V této lekci si dokončíme základy programování. Naučíme se pracovat s logickou hodnotou, podíváme se hlouběji na blok rozhodování a řekneme si něco o událostech

název: Dokončujeme základy
kategorie: A začátečníci
ref.číslo: A9
projekt: prvních 10 dní s microbitem, lekce 9
verze: 01, 2017-03-17
autor: Ivo Obr, Lanškroun


V této lekci si dokončíme základy programování.

Naučíme se pracovat s logickou hodnotou, podíváme se hlouběji na blok rozhodování a řekneme si něco o událostech. Je to na tuto lekci hodně, ale příští lekce už bude věnovaná prvnímu našemu užitečnému programu a tak si úplné základy musíme doplnit. Použijeme k tomu program, který jsme vytvořili v lekci A7 :

Tam jsme se naučili zapínat a vypínat světlo pouze jedním tlačítkem. Tím jsme si uvolnili druhé tlačítko “B” pro další možné funkce, které by byly u lampy užitečné. Já jsem si zvolil funkci možnost ztlumit světlo na polovinu (což bývá u lamp s elektronickým ovládáním dost časté).

Poloviční osvětlení můžeme realizovat dvěma způsoby :

  • ztlumíme jas všech LED diod na polovinu
  • rozsvítíme jen polovinu LED diod

V tomto příkladu jsem zvolil variantu ztlumení jasu a to proto, že tato varianta je na programování jednodušší.

Jas LED diod můžeme měnit blokem “set brightness”. Naplno svítit znamená nastavit na hodnotu 255, když nastavíme jas na polovinu, nastavíme hodnotu 127.

Tlačítkem “B” budeme buď zvyšovat jas nebo snižovat. Kdy ho máme zvýšit nebo kdy ho máme snížit tak k tomu budeme potřebovat znát, v jakém stavu se náš jas právě nachází. Musíme si tedy pamatovat jestli svítíme naplno nebo ne a podle toho spustit blok “set brightness”. K tomu si připravíme proměnnou a nazveme ji “stav”. Naše proměnná si bude pamatovat dvě hodnoty. Jas je právě maximální nebo jas je jen poloviční. Dva různé stavy může mít logická proměnná a tyto stavy, jak už víme z lekce A6 se nazývají true nebo false. My si pro maximální jas zvolíme hodnotu true a pro poloviční false. (můžete si to nastavit i obráceně, důležité je vědět, který stav co znamená).

Takže náš postup při změnách jasu si můžeme slovně popsat takto :

KDYŽ je jas maximální (true) TAK

zmenši jas na polovinu

nastav hodnotu proměnné “stav” na false

JINAK  (jas je poloviční)

zvětši jas na maximum

nastav hodnotu proměnné “stav” na true

Toto je činnost, kterou je třeba vykonat po stisku tlačítka “B”. Tak se podíváme, jak upravit původní program.  Nejdříve si musíme na úplném začátku programu blokem “set” vytvořit proměnnou “stav” do které vložíme hodnotu true, protože máme předchozím blokem nastaven jas na maximum.

Činnost našeho programu se téměř vykonává jen čekáním na stisk tlačítka “A”. Do těchto čekání  (do kleští bloků “while”) a správně za každý blok bychom museli vložit test na stisk tlačítka “B”. Program by byl najednou velmi dlouhý a složitý, pro nás velmi pracný. Pokud bychom přidali třetí tlačítko, bylo by to už velmi složité.

My budeme chápat stisk tlačítka “B” jako událost. Pokud k takové události dojde, mikropočítač vykoná nějaké bloky. Událostí nemusí být jen stisk tlačítka, ale například signál na nějakém kontaktu destičky Micro:bit. Protože micro:bit má v sobě zabudovaný gyroskop s akcelerátorem (elektronický setrvačník s měřičem zrychlení), může být událostí pohyb destičky micro:bit.

Tyto bloky mikropočítač vykoná hned bez ohledu na to, ve kterém místě hlavního programu se zpracování právě nachází. V našem případě je to s největší pravděpodobností při čekání na stisk tlačítka “A” (v rámci bloku “while”).

Tak jdeme na to : Na ploše už máme program z lekce A7 a upravíme si ho přidáním bloku “set” na začátku programu. Viz předchozí obrázek. Nyní si vložíme blok “on button A pressed”, který najdeme v nabídce Input. Označení tlačítka “A” změníme na “B”.

Všimněte si, že blok nemá západku ani na horním okraji ani na spodním okraji. Tento blok je samostatný celek, který při události “stisk tlačítka B” vykoná bloky, které jsou v jeho kleštích a nic více. My do kleští této události vložíme vykonání bloku “if”, který jsme si popsali výše. Blok “if už jsme programovali v lekci A6, ale v jeho jednoduché formě. Nyní blok “if” máme v úplné formě, kdy doplníme ještě činnost – bloky, které se vykonají, když hodnota za “if” není true ale false. Musíme si v bloku “if” nastavit druhé kleště, které se vykreslí za slovem “else”.

Dáme si blok “if” na plochu z nabídky Logic. V bloku “if ” klikneme na modré ozubené kolečko, je to další nastavení bloku “if”. Otevře se nám rámeček, ze kterého si vybereme blok “else” a myší ho přesuneme v rámci rámečku do bloku “if” na západku. Tím se nám vytvoří druhé kleště v dolním bloku “if”. Nyní stačí opět kliknout na modré ozubené kolečko a rámeček nastavení se zavře.

Do prvních kleští bloku “if” za “do” dáme bloky “set brightness 127” a “set stav to false”, do druhých kleští za “else” dáme bloky “set brightness 255” a “set stav to true”. A máme událost stisku tlačítka “B” obslouženou.

Je jasné, že když máme světlo zhasnuté pomocí bloku “clear screen”, je jedno, jestli máme nastaven jas LED diod na hodnotu 127 nebo 255. LED diody jsou prostě vypnuty. Zdánlivě to vypadá, že se stiskem tlačítka “B” nic neděje. Není to ale pravda. Nastavení jasu LED diod se provádí. Můžete si to vyzkoušet tím že lampu zhasnete při maximálním jasu. Lampa nesvítí. Pak stiskem tlačítka “B” přepnete na menší jas (nic se neděje) a pak rozsvícením lampy budou LED diody svítit jen polovičním jasem.

Jakmile jsme program sestavili, je třeba provést kontrolu, zda jsou všechny bloky sestaveny správně, zda je správně v kleštích bloků to, co tam má být, zda máme správně jména proměnných a jejich hodnoty, a můžeme spustit náš program. Nejjednodušší je ověřit si to na grafickém modelu vpravo ve webové aplikaci na obrázku Micro:bit. U našich jednoduchých programů to půjde, jakmile se ale dostaneme ke složitějším činnostem, už to nebude možné.

Příkladem může být například událost akcelerometru, je to blok “on shake” v nabídce Input. Ať budeme třást monitorem jak chceme, k žádné události nedojde.

Nyní bychom měli vyzkoušet všechny možnosti programu, jestli náš program dělá to, co má a jestli se neukáže někdy chyba. Obvykle je to stav, se kterým jsme nepočítali. V našem případě je to například to, co se stane, když stiskneme obě tlačítka “A” a “B” současně.

Na hardware destičky stisknou současně obě tlačítka se nám fakticky nepodaří. Z pohledu mikropočítače vždy nějaké tlačítko bude stisknuto jako první a nějaké jako druhé, protože rychlost mikropočítače oproti nám je nesrovnatelná. Ten pracuje s tlačítky v jednotkách milisekund (přechodové jevy na kontaktech tlačítek), my bychom dokázali rozeznat časy na úrovni desetin sekundy. Výsledkem ale je, že máme obě dvě tlačítka stisknuta. Co se stane?

Zkuste si to na modelu vpravo na stránce, stisk obou tlačítek lze simulovat myší stiskem na černé kolečko A+B pod obrázkem Micro:bit. Celý program je zobrazen na spodním obrázku :

Úkoly pro tuto lekci :

  • nastavte první zapnutí lampy tak, že jas na začátku nebude maximální ale jen poloviční.
  • zkuste si naprogramovat tu samou činnost lampy ale s tím, že i stisk tlačítka “A” bude událostí. (nápověda: musíte si vytvořit druhou proměnnou pro zapínání a vypínání lampy. Názvy proměnných doporučuji “stavA” a “stavB”. V události “on buton A”  bude stejné “if” jako u tlačítka “B”. V hlavním programu pak vypadne celý zelený blok “while true”). Obrázek programu najdete v lekci A10 na konci. (pokud ho sestavíte, vyzkoušejte si funkci stisk obou tlačítek současně jak pro webovou aplikaci tak na reálném HW mikropočítače. Zjistěte rozdíly.)

 

Posted in kat A - začátečníci.