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 )).

../_images/happy.png

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 18 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?