Obrázky¶
Čo sa týka umenia, MicroPython ja asi rovnako dobrý ako ty, pokiaľ by si mal(a) k dispozícii iba sieť 5x5 červených LED diód (to sú tie svetielka na prednej strane zariadenia). MicroPython ti dáva pomerne veľa možností, ako ovládať displej, takže môžeš vytvoriť všelijaké zaujímavé efekty.
MicroPython má množstvo zabudovaných obrázkov, ktoré vie zobraziť na displeji. Napríklad, ak chceš, aby micro:bit vyzeral šťastne, napíš:
from microbit import *
display.show(Image.HAPPY)
Predpokladám, že si pamätáš, čo robí prvý riadok. Druhý riadok hovorí objektu display
(=“displej“), že má show
(=“zobraziť“) vstavaný obrázok. Šťastný obrázok, ktorý chceme zobraziť je súčasťou objektu Image
(„obrázok“) a volá sa HAPPY
(=“ŠŤASTNÝ“). Metóde show
((=“zobraziť“) povieme, že má použiť práve ten tak, že zadáme jeho názov do zátvoriek ((
a )
).

Tu je zoznam vstavaných obrázkov:
Image.HEART
(obrázok SRDCE)Image.HEART_SMALL
(obrázok MALÉ SRDCE)Image.HAPPY
(obrázok ŠŤASTNÝ)Image.SMILE
(obrázok ÚSMEV)Image.SAD
(obrázok SMUTNÝ)Image.CONFUSED
(obrázok ZMÄTENÝ)Image.ANGRY
(obrázok NAHNEVANÝ)Image.ASLEEP
(obrázok SPIACI)Image.SURPRISED
(obrázok PREKVAPENÝ)Image.SILLY
(obrázok HLÚPY)Image.FABULOUS
(obrázok ÚŽASNÝ)Image.MEH
(obrázok MEH)Image.YES
(obrázok ÁNO)Image.NO
(obrázok NIE)Image.CLOCK12
,Image.CLOCK11
,Image.CLOCK10
,Image.CLOCK9
,Image.CLOCK8
,Image.CLOCK7
,Image.CLOCK6
,Image.CLOCK5
,Image.CLOCK4
,Image.CLOCK3
,Image.CLOCK2
,Image.CLOCK1
(obrázky HODÍN o 12.-1. hodine)Image.ARROW_N
,Image.ARROW_NE
,Image.ARROW_E
,Image.ARROW_SE
,Image.ARROW_S
,Image.ARROW_SW
,Image.ARROW_W
,Image.ARROW_NW
(obrázky ŠÍPOK v rôznych smeroch označených anglickými skratkami zemepisných smerov (N-sever, S-juh, E-východ, W - západ)Image.TRIANGLE
(obrázok TROJUHOLNÍK)Image.TRIANGLE_LEFT
(obrázok TROJUHOLNÍK VĽAVO)Image.CHESSBOARD
(obrázok ŠACHOVNICA)Image.DIAMOND
(obrázok DIAMANT)Image.DIAMOND_SMALL
(obrázok MALÝ DIAMANT)Image.SQUARE
(obrázok ŠTVOREC)Image.SQUARE_SMALL
(obrázok MALÝ ŠTVOREC)Image.RABBIT
(obrázok ZAJAC)Image.COW
(obrázok KRAVA)Image.MUSIC_CROTCHET
(obrázok ŠTVRŤOVǍ NOTA)Image.MUSIC_QUAVER
(obrázok OSMINOVÁ NOTA)Image.MUSIC_QUAVER
(obrázok OSMINOVÉ NOTY)Image.PITCHFORK
(obrázok VIDLIČKA)Image.XMAS
(obrázok VIANOCE)Image.PACMAN
(obrázok PACMAN)Image.TARGET
(obrázok TERČ)Image.TSHIRT
(obrázok TRIČKO)Image.ROLLERSKATE
(obrázok KOLIESKOVÉ KORČULE)Image.DUCK
(obrázok KAČICA)Image.HOUSE
(obrázok DOM)Image.TORTOISE
(obrázok KORYTNAČKA)Image.BUTTERFLY
(obrázok MOTÝĽ)Image.STICKFIGURE
(obrázok POSTAVIČKA)Image.GHOST
(obrázok DUCH)Image.SWORD
(obrázok MEČ)Image.GIRAFFE
(obrázok ŽIRAFA)Image.SKULL
(obrázok LEBKA)Image.UMBRELLA
(obrázok DÁŽDNIK)Image.SNAKE
(obrázok HAD)
Je ich fakt dosť! Skúsme, ako bude vyzerať micro:bit, keď vymeníme jeho šťastný obrázok za nejaký iný vstavaný obrázok. (Jednoducho iba nahraď obrázok Image.HAPPY
za nejaký iný zo zoznamu.)
Vlastné obrázky¶
Jasné, chceš si urobiť vlastný obrázok, ktorý sa zobrazí na micro:bite, však?
Je to jednoduché.
Na každom LED pixeli displeja vieme nastaviť jednu z deisatich hodnôt. Ak má pixel hodnotu 0
(nula), je vypnutý. Má doslova nulový jas. Ale ak ho nastavíme na 9
, potom má najvyšší jas. Hodnoty 1
až 8
predstavujú úrovne jasu medzi vypnutou diódou (0
) a maximálnym jasom (9
).
Vyzbrojení touto informáciou môžeme vytvoriť nový obrázok takto jednoducho:
from microbit import *
boat = Image("05050:"
"05050:"
"05050:"
"99999:"
"09990")
display.show(boat)
(Keď sa to spustí, zariadenie by malo zobraziť historickú loď „Modrý Peter“ so stožiarmi, ktoré sú tmavšie ako trup lode.)
Už vieš ako nakresliť obrázok? Vidíš, že každý riadok displeja sa zobrazuje ako riadok čísel končiaci :
a uzavretý dvojitými úvodzovkami "
? Každé z čísiel označuje jas. Keďže je tam päť riadkov po päť čísiel, dokážeme tak nastaviť jas pre každý jeden pixel displeja. Takto vytvárame nové obrázky.
Jendoduché!
Vlastne, ani ich nepotrebuješ písať na niekoľko riadkov. Ak si myslíš, že nestratíš prehľad, môžeš ich zapísať aj takto:
boat = Image("05050:05050:05050:99999:09990")
Animácia¶
Statické (nemenné) obrázky sú zábavné, ale oveľa väčšia zábava je, keď ich rozhýbeš. S MicroPythonom je aj toto úžasne ľahké - jednoducho použi zoznam obrázkov!
Tu je náš nákupný zoznam:
Eggs
Bacon
Tomatoes
Takto zapíšeš zoznam v Pythone:
shopping = ["Eggs", "Bacon", "Tomatoes" ]
Vytvoril som zoznam s názvom shopping
(„nákup“), ktorý obsahuje tri položky. Python view, že je to zoznam, pretože je uzavretý v hranatých zátvorkách ([
a ]
). Položky v zozname sú oddelené čiarkou (,
) a v tomto prípade sú položky tri reťazce znakov: "Vajíčka"
, "Slanina"
and "Rajčiny"
. Vieme, že sú to reťazce znakov, pretože sú uzavreté v úvodzovkách "
.
V Pythone môžeš v zozname uložiť čokoľvek. Tu je zoznam čísel:
primes = [2, 3, 5, 7, 11, 13, 17, 19]
Poznámka
Čísla nemusia byť v úvodzovkách, pretože predstavujú hodnotu (teda nie reťazec znakov). Je rozdiel medzi 2
(číselná hodnota 2) a "2"
(znak/číslica predstavujúca číslo 2). Ak ti to zatiaľ nedáva zmysel, netráp sa tým. Čoskoro si na to zvykneš.
Dokonca je možné v jednom zozname uchovávať rôzne typy vecí:
mixed_up_list = ["hello!", 1.234, Image.HAPPY]
Všímaš tu poslednú položku? To bol obrázok!
MicroPythonu môžeme povedať, aby animoval zoznam obrázkov. Našťastie už máme zopár zoznamov obrázkov už vstavaných v MicroPythone. Volajú sa Image.ALL_CLOCKS
(obrázky VŠETKÝCH HODÍN) a Image.ALL_ARROWS
(obrázky VŠETKÝCH ŠÍPOK):
from microbit import *
display.show(Image.ALL_CLOCKS, loop=True, delay=100)
Tak ako pri samostatnom obrázku, používame display.show
na zobrazenie obrázkov na displeji zariadenia. Ale tentokrát povieme MicroPythonu, že má použiť Image.ALL_CLOCKS
a on rozumie, že má zobraziť každý obrázok zo zoznamu, jeden po druhom. Taktiež povieme MicroPythonu, že má zobrazovanie opakovať (takže animácia bude trvať donekonečna) pomocou argumentu loop=True
. Navyše mu povieme, že chceme, aby medzi jednotlivými obrázkamibol interval (prestávka) iba 100 milisekúnd (desatina sekundy) pomocou argumentu delay=100
.
Prídeš na to, ako animovať zoznam šípok Image.ALL_ARROWS
? Ako sa vyhneš opakovaniu donekonečna (rada: opak True
(„Pravda“) je False
(„Nepravda“) ale predvolená hodnota opakovania je loop = False
)? Dokážeš zmeniť rýchlosť animácie?
Na záver je tu ukážka, ako si urobiť vlastnú animáciu. V mojom prípade potopím svoju loď pod okraj displeja:
from microbit import *
boat1 = Image("05050:"
"05050:"
"05050:"
"99999:"
"09990")
boat2 = Image("00000:"
"05050:"
"05050:"
"05050:"
"99999")
boat3 = Image("00000:"
"00000:"
"05050:"
"05050:"
"05050")
boat4 = Image("00000:"
"00000:"
"00000:"
"05050:"
"05050")
boat5 = Image("00000:"
"00000:"
"00000:"
"00000:"
"05050")
boat6 = Image("00000:"
"00000:"
"00000:"
"00000:"
"00000")
all_boats = [boat1, boat2, boat3, boat4, boat5, boat6]
display.show(all_boats, delay=200)
Takto funguje kód:
- Vytvoril som šesť obrázkov člnu (
boat
) presne podľa plánu, ktorý som popísal vyššie. - Teraz ich všetky vložím do zoznamu s názvom
all_boats
(všetky člny) - Nakoniec zavolám metódu
display.show
, ktorá mi animuje zoznam s intervalom 200 milisekúnd. - Keďže som nenastavil
loop=True
čl sa potopí iba raz (a teda urobíme tak animáciu z vedeckého hľadiska presnú). :-)
Čo budeš animovať ty? Dokážeš animovať špeciálne efekty? Ako by si spravil(a), aby obrázok vybledol a opäť sa objavil?