Gestá¶
Veľmi zaujímavým vedľajším efektom toho, že máme k dispozícii akcelerometer, je možnosť detekcie gest. Ak pohneš micro:bitom určitým spôsobom (urobíš gesto), MicroPython ho dokáže detekovať.
MicroPython vie rozoznať tieto gestá: up
(hore), down
(dole), left
(doľava), right
(doprava), face up
(tvárou hore), face down
(tvárou dole), freefall
(voľný pád), 3g
, 6g
, 8g
, shake
(trasenie). Gestá sú vždy reprezentované reťazcami. Zatiaľčo väčšina názvov je na prvý phľad jasná, gestá 3g
, 6g
a 8g
sa použijú vtedy, keď zariadenie dosiahne uvedené hladiny tiažového zrýchlenia g (podobne ako keď astronauta vystrelia do vesmíru).
Aby sme dostali aktuálne gesto, použijeme metódu accelerometer.current_gesture
. Jej výsledok bude jedným z pomenovaných gest, s ktorými sme sa zoznámili vyššie. Napríklad, tento program zariadi, aby bol micro:bit šťastný iba vtedy, keď je tvárou hore:
from microbit import *
while True:
gesture = accelerometer.current_gesture()
if gesture == "face up":
display.show(Image.HAPPY)
else:
display.show(Image.ANGRY)
A znova - keďže chceme, aby zariadenie reagovalo na meniace sa podmienky, použijeme while
cyklus. Vo vnútri pôsobnosti cyklu sa načíta aktuálne gesto a vloží sa do premennej gesture
. Podmienka if
kontroluje, či je gesture
rovné "face up"
(Python používa na porovnávanie ==
, samotný znak =
sa používa na priraďovanie - presne tak, ako sme použili pri priradení čítania gesta do objektu gesture
). Ak sa gesto rovná "face up"
, displej ukáže veselého smajlíka. Inak sa zariadenie mračí!
Magic-8¶
Gulička Magic-8 je hračka vymyslená v 50-tych rokoch minulého storočia. Je zmyslom bolo odpovedať na jednoduché otázky odpoveďami áno/nie, zatriasť ňou a počkať, kým odhalí pravdu. Zmeniť to na program je pomerne jednoduché:
from microbit import *
import random
answers = [
"It is certain",
"It is decidedly so",
"Without a doubt",
"Yes, definitely",
"You may rely on it",
"As I see it, yes",
"Most likely",
"Outlook good",
"Yes",
"Signs point to yes",
"Reply hazy try again",
"Ask again later",
"Better not tell you now",
"Cannot predict now",
"Concentrate and ask again",
"Don't count on it"
"My reply is no",
"My sources say no",
"Outlook not so good",
"Very doubtful",
]
while True:
display.show("8")
if accelerometer.was_gesture("shake"):
display.clear()
sleep(1000)
display.scroll(random.choice(answers))
Väčšiu časť programu tvorí zoznam nazvaný answers
(odpovede). Samotná hra sa nachádza v while
cykle na konci.
Predvolený stav hry je zobrazovať znak "8"
. No program však potrebuje detekovať, či ním bolo zatrasené. Metóda was_gesture
používa ako svoj argument (v tomto prípade reťazec "shake"
, pretože chceme detekovať trasenie) vráti odpoveď True
/ False
(pravda - nepravda). Ak zariadenie zistí, že ním niekto zatriasol, podmienka if
vojde do bloku kódu, kde najskôr vymaže displej, počká sekundu (aby zariadenie vyzeralo, že premýšľa nad tvojou otázkou) a zobrazí náhodne zvolenú odpoveď.
Nespýtaš sa, či je toto najgeniálnejší program všetkých čias? Ako môžeš urobiť „podvádzanie“, kde všetky odpovede budú kladné alebo záporné? (Rada: použi tlačítka.)