Digitálna menovka
Displej
Pracujeme…
Táto kapitola je ešte rozpracovaná, zatiaľ tu nájdeš iba základné informácie. V najbližšom čase ju budeme ešte dopĺňať.
Menovka
Ako si si mohol/mohla všimnúť, micro:bit má na svojej prednej strane 5x5 červených LED diód. MicroPython Ti dáva viacero možností, akými na displeji niečo vykreslovať či vypisovať.
Najbežnejším prvým programom pri učení sa nového programovacieho jazyka býva vypísanie textu „Ahoj, Svet!“.
V MicroPythone vieme napísať tento program v dvoch riadkoch kódu:
from microbit import display
display.scroll("Ahoj, Svet!")
Každý riadok vykaná niečo iné. Prvý riadok:
from microbit import dispay
povie micro:bitu, aby pre nás pripravil funkcionalitu display
z modulu microbit
. Tento modul obsahuje predprogramované funkcie, ktoré ovládajú napríklad zobrazovanie textu na obrazovke. Takéto ‘zavolanie’ voláme import
. Moduly sa taktiež niekedy nazývajú aj knižnicami (no namiesto kníh majú v sebe kód).
Druhý riadok:
display.scroll("Ahoj, Svet!")
povie micro:bitu, aby na displej postupne vypísal reťazec znakov „Ahoj, Svet!“. Slovo display
je objekt z modulu microbit
, ktorý predstavuje fyzický displej zariadenia (hovoríme „objekt“ namiesto „hento“, „oné“ alebo „tá vec“). Za objekt sme napísali bodku, za ktorou nasleduje príkaz (po správnosti nazývaný metóda
). V tomto prípade používame metódu scroll
, čo po slovensky znamená posúvať. Aby ale micro:bit vedel, aký text má na obrazovke posúvať, musíme ho označiť pomocou dvojitých úvodzoviek "
(na začiatku a aj na konci) a poslať do príkazu scroll. To spravíme vložením textu do zátvoriek za metódou scroll()
. Obsah zátvoriek nazývame argument. Takže display.scroll(„Ahoj, svet!“) znamená po slovensky „Chcem, aby si použil displej a posúval na ňom text ‚Ahoj, svet!‘“. Ak metóda nepotrebuje argumenty, musíme to dať jasne najavo použitím prádznych zátvoriek - takto: scroll()
.
Teraz svoj kód ešte skontroluj - či už opticky, alebo v Mu editore
pomocou tlačidla check
(veľký palec). Ak si v programe nenašiel žiadne chyby, nahraj ho na micro:bit (v Mu editore pomocou tlačidla Flash
).
Ak by si chcel zistiť, aké iné argumenty môžeš pre príkaz scroll()
použiť, pozri si dokumentáciu
Warning
Je možné, že Ti program nebude fungovať hneď na prvý krát. Nezľakni sa, ani skúseným programátorom väčšinou nevýjde všetko hneď na prvý krát.
Úloha č. 1
Pozmeň program tak, aby si z neho spravil digitálnu menovku a vypisoval Tvoje (krstné) meno.
Úloha č. 2
Doplň program tak, aby okrem Tvojho mena zobrazoval aj to, v ktorom meste bývaš. Výsledný program by mal mať 3 riadky kódu (vrátane riadka, kde importujeme).
Kontrolné otázky
- Čo je to argument metódy?
- Ak do metódy neposielam žiadne argumenty, musím písať zátvorky?
Trvalé zobrazovanie textu
Podarilo sa nám text vypísať na obrazovku, avšak zatiaľ sa vždy vypíše iba jeden krát. No čo ak si chceme spraviť menovku, ktorá by stále ukazovala Tvoje krstné meno? Potrebujeme nejakým spôsobom docieliť, aby sa náš riadok kódu s príkazom display.scroll()
donekonečna spúšťal. Môžme skúsiť daný riadok skopírovať čo najviac krát::
from microbit import display
display.scroll("Volam sa Marek")
display.scroll("Volam sa Marek")
display.scroll("Volam sa Marek")
display.scroll("Volam sa Marek")
display.scroll("Volam sa Marek")
# atď.
ale aj tak sa raz vykonávanie programu skončí. Potrebujeme preto nekonečný cyklus::
from microbit import display
while True:
display.scroll("Volam sa Marek")
Príkaz while
sa vždy pozerá na to, čo sme napísali za neho. Pokým je za ním pravdivá hodnota tak bude vykonávať všetky príkazy prislúchajúce do daného cyklu. A keďže True
(anglicky pravda
) je vždy pravdivé, tak micro:bit bude kód opakovať donekonečna. To, či nejaký kód patrí do cyklu zistíš tak, že ďaľšie riadky sú posunuté do prava o 4 medzerníky (jeden tabulátor - kláves nad CapsLock-om). Toto posunutie sa po slovensky volá odsadenie
a po anglicky indentation
čiže indentácia
.
Všimni si, že na konci riadku s príkazom while
sa nachádza dvojbodka. Tá sa vždy používa v kombinácií s príkazmi, po ktorých aspoň jeden ďaľší príkaz odsadíš a bude sa vykonávať na základe toho, aká je podmienka v riadku s dvojbodkou.
Pozrime sa teraz na tento kód:
from microbit import display
while True:
display.scroll("Marek")
display.scroll("Z Bratislavy")
display.scroll("toto sa nikdy nevypise")
Z kódu vieme vyčítať, že donekonečna budeme vypisovať „Marek“ a „z Bratislavy“. Príkaz s textom „toto sa nikdy nevypise“ nie je odsadený, a tak nie je súčasťou while cyklu. Preto by sa vykonal až keď while cyklus skončí. Ten ale nikdy neskončí, keďže True
má vždy pravdivú hodnotu, a tak sa tento riadok kódu nikdy nespustí.
Kým v predchádzajúcej ukážke sa posledný riadok kódu nikdy nespustí, aspoň sa nám zobrazovali príkazy „Marek“ a „z Bratislavy“. Čo ak by sme ale doplnili takýto riadok:
from microbit import display
while True:
display.scroll("Marek")
display.scroll("Z Bratislavy")
display.scroll("toto sa nikdy nevypise")
display.scroll("dalsi riadok")
V tomto prípade by nám program vôbec nespustil a vypísal by chybu, pretože posledný riadok je odsadený aj keď by nemal byť.
Chyby sú bežné…
Skús spustiť posledný kód (s nesprávnym odsadzovaním) a zistiť, aký chybu vypíše micro:bit na displej.
Kontrolné otázky
- O koľko medzerníkov sa odsadzuje príkaz patriaci do cyklu?
- Na čo v nekonečnom cykle využívame príkaz
True
? - Koľko najviac príkazov za sebou môže byť v jednom nekonečnom cykle?
Pauza medzi vypisovaním textu
Čo ak by sme chceli medzi dva výpisy textu na obrazovku pridať nejakú pauzu, napríklad 5 sekúnd? Využijeme príkaz, ktorý micro:bitu povie, aby chvíľu počkal::
from microbit import display, sleep
display.scroll("Ahoj")
sleep(5000)
display.scroll("Ako sa mas?")
Príkaz sleep()
sme vložili medzi dva výpisy textu, a tak sa najprv zobrazí text „Ahoj“, chvíľu počká a potom vypíše text „Ako sa mas?“. To, ako dlho má čakať povieme micro:bitu pomocou argumentu, ktorý napíšeme do zátvoriek za metódou sleep
. Tento krát vkladáme číslo a nie reťazec, preto nepoužívame úvodzovky "
. Napíšeme tam, koľko milisekúnd má micro:bit čakať. Jedna milisekunda je tisícina sekundy, 1000 milisekúnd je 1 sekunda a 5000 milisekúnd je 5 sekúnd, čiže náš kód počká 5 sekúnd.
Úlohy
- Využi príkaz
sleep()
v nekonečnom cykle. - Uprav nasledujúci kód tak, aby micro:bit vypísal „Ahoj Martin“, počkal 3 sekundy, vypísal „Ahoj Vanessa“ a zas počkal 3 sekundy::
from microbit import display
while True:
display.scroll("Ahoj Martin")
display.scroll("Ahoj Vanessa")
Kontrolné otázky
- Čo sa stane, ako použijeme viac príkazov
sleep()
za sebou? - Akú chybu vypíše micro:bit ak by sme namiesto čísla poslali to metódy
sleep
reťazec označený úvodzovkami (napríkladsleep("5000")
)?
Posledná zmena: 28.2.2020