Aplikace A7 Zapínáme a vypínáme jedním tlačítkem

V minulé lekci A6 jsme se naučili ovládat tlačítka. Na skutečných lampách je tlačítko obvykle jen jedno. Prvním stiskem zapneme, druhým stiskem vypneme. Takže si v této lekci ukážeme program, který nám bude naši lampu (blok LED diod) zapínat a vypínat jen jedním tlačítkem.

název: Zapínáme a vypínáme jedním tlačítkem
kategorie: A začátečníci
ref.číslo: A7
projekt: prvních 10 dní s microbitem, lekce 7
verze: 01, 2017-03-17
autor: Ivo Obr, Lanškroun


Tato lekce byla napsána pro Microsoft Block Editor. Ten už byl bohužel stažen ze stránek microbit.org. Proto si můžete spustit tento editor na následující adrese :
https://www.microbit.co.uk/app/#create:xczaux
Zatím tam původní editor stále ještě funguje. Lze také lekce zpracovávat na JavaScrip Block Editoru, jsou tam malé odchylky, které ale nemusí být na závadu.

V minulé lekci A6 jsme se naučili ovládat tlačítka. Na skutečných lampách je tlačítko obvykle jen jedno. Prvním stiskem zapneme, druhým stiskem vypneme. Takže si v této lekci ukážeme program, který nám bude naši lampu (blok LED diod) zapínat a vypínat jen jedním tlačítkem a to např. tlačítkem “A”.

Abychom to udělali jednoduše, povíme si nejdříve něco více o bloku “while”. Víme už, že tento blok opakuje bloky, které má ve svých kleštích. To dělá, pokud má nastavenu hodnotu true ve své západce za slůvkem “while”. Víme už také, že slovo “true” znamená “pravda”. Pokud by se nějakým způsobem v západce bloku “while” objevila hodnota false (což znamená nepravda), tak blok “while” okamžitě přestane opakovat bloky, co má v kleštích a předá provádění dalšímu bloku, který je připojen za blokem “while”.

My si musíme nyní vymyslet něco, co by změnilo tu hodnotu true na hodnotu false. Asi jste to uhádli, bude to stisknutí tlačítka”A”. A ještě další věc. Co je opakem pravdy? U programátorů to není lež ale nepravda. Takže opakem true je false a opakem false je true. Pro udělání opaku máme  slůvko not.

Takže not true je false a not false je true. Radši si přečtěte ještě jednou poslední dva odstavce a pomalu, než budeme pokračovat dále.

Mikropočítač po spuštění našeho programu bude trpělivě čekat na stisk tlačítka “A”. To čekání zařídíme blokem “while”, kde v západce bude hodnota true. Jakmile stiskneme “A” tlačítko, bude konec čekání a měly by se vykonat bloky, které rozsvítí naše světlo. Takže stiskem tlačítka by se měla hodnota v západce bloku “while” změnit na false.

Naše prohlášení “button A is pressed” je, když tlačítko “A” nestiskneme nepravda, tedy false. My ale potřebujeme aby v západce bylo true. Tak to zařídíme dle obrázku. Negaci not najdeme v nabídce Logic.

V kleštích bloku “while” nic není. To nám ale nemusí vadit, mikropočítač žádný blok nevykoná a vrátí se znovu na test, zdali bylo stisknuté tlačítko “A”. A takto to trpělivě provádí dokola, než se rozhodneme ho stisknout.  Jakmile tlačítko stiskneme, výraz “button A is pressed” je pravdivý (true), operátor not obrátí jeho hodnotu na nepravda (false), což se objeví v západce bloku “while”. To způsobí, že se přestane to nic opakovat a pokračuje se dalším blokem za ním.

Následující blok “show leds” zapne všechny LED diody. Mikropočítač to udělá velmi rychle, rozhodně rychleji než stihneme tlačítko pustit. Po zapnutí světla necháme opět mikropočítač čekat na nový stisk tlačítka.

Ten by však vyhodnotil držení tlačítka za další stisk a udělal by to, co by mělo být po druhém stisku – vypnutí světla. Takže to zařídíme tak, aby nám dal mikropočítač nějaký čas na uvolnění tlačítka, dáme tam blok “pause”.

Pokud jste rychlí, stačí 500ms, pokud pomalejší, dejte tam 1000ms. Po těchto časech vyhodnotí mikropočítač držení tlačít

ka jako další stisk. Takže, pokud budete držet tlačítko “A” stále stisknuté, bude mikropočítač opakovat rozsvícení a zhasnutí v intervalu 0,5 vteřiny. Tlačítko na mikropočítači však není zvonek a tak víme, že máme dělat jen krátká stisknutí.

Výše uvedené bloky necháme stále opakovat. To už jsme programovali mnohokrát, vše dáme do bloku “while” (s true) a na začátek přidáme vyčištění displeje a nastavení jasu LED diod. Celý program je v pravé části na obrázku. Nyní si můžeme program vyzkoušet.

Přece jenom ten malý nedostatek s držením tlačítka nám může trochu vadit. Pomalejší osoby by sice světlo rozsvítily, ale kdyby například pustili tlačítko po 600ms, bylo by světlo už zase vypnuté.

Takže správné by bylo, kdyby místo bloku “pause”, kde čekáme 500ms na to, abychom pustili tlačítko bylo naprogramováno, že teprve čekání na druhý stisk bude až po uvolnění prvého stisku.  To čekání můžeme popsat takto :  pokud je tlačítko “A” stisknuté, nic nedělej

To už napsat umíme :

Program vylepšíme tím, že bloky “pause 500” nahradíme blokem “while” (viz výše uvedený obrázek), který bude čekat na uvolnění tlačítka “A”.

 

Poznámka k programu:

Na posledním obrázku se přeci jen objevily bloky “pause 5”. Pokud budete program testovat na webové aplikaci, program bude bezpečně fungovat i bez bloků “pause”. U mechanických tlačítek (jsou na destičce Micro:bit) může docházet k přechodovým jevům při vypínání a zapínání kontaktů. Existuje kratičký okamžik, kdy nemusí být hodnota zapnutí a vypnutí jednoznačná. Proto, když tlačítko hlásí, že už došlo k vypnutí, počkáme 5ms, než se přechodové jevy ustálí a mechanické kontakty budou opravdu vypnuty.

Program pro zapínání a vypínání jedním tlačítkem se dá napsat mnoha způsoby. Přemýšlejte, jak by to šlo naprogramovat jinak.

 

Úkoly pro tuto lekci :

  • zkuste rozšířit program, že po prvém stisku bude svítit světlo jen na 50% (set brightness 127), po druhém stisku na 100% (set brightness 255) a po třetím stisku zhasne.  (nápověda : je třeba rozšířit program o další bloky čekání na stisk tlačítka, rozsvícení na polovinu a čekání na uvolnění tlačítka)
Posted in kat A - začátečníci.