Folytatjuk a micro:bit és a micropython együttműködését taglaló cikkünket, a ebben a leckében a gombok használatával, lehetőségeivel ismerkedünk meg.
Gombok
. A micro:bit lapka három gombot tartalmaz, kettőt a ledmátrix jobb illetve bal oldalán, ezek programjainkban szabadon felhasználhatóak különböző feladatok ellátására, tovább egyet a hátsó oldalon, közvetlenül az USB csatlakozó mellett. Ez a gomb az eszköz reszetelésére szolgál.
Az előlapi gombok betűjelzéssel vannak ellátva, a bal oldali az A, a jobb oldali a B jelű, a rájuk való hivatkozás programban a button_a.utasítás, illetve a button_b.utasítás formátumban lehetséges.

Az ismerkedést kezdjük egy rövid programmal, aminek segítségével kiírathatjuk a led-kijelzőre, hogy melyik oldali gombot nyomtuk le. Amennyiben nem történt gombnyomás, a kijelző sötét marad.
from microbit import * while True: if button_a.is_pressed(): display.show("B") elif button_b.is_pressed(): display.show("J") else: display.clear()
A program első sora importálja a micro:bit eljárásgyűjtemény könyvtárát, a második sor egy ciklus kezdete (ciklusfej). Ezzel a beállítással a program mindaddig fut, míg a programot le nem állítjuk. Az un. ciklusmagban ( a ciklus azon része, ami az ismétlődő utasításokat tartalmazza) helyezkedik el az a szerkezet, amit a programozók feltételes vezérlésátadásnak neveznek. A program futása annak függvényében fut valamelyik szálon, hogy történt-e gombnyomás, illetve ha igen, akkor melyik gombot nyomtuk le (A vagy B)?
A feladatot egy HA (IF) függvénnyel oldjuk meg, ami három választási lehetőséget kínál, HA (IF) az A gombot nyomjuk meg, a kijelzőn egy B betű jelenik meg, HA (ELIF) a B-t, akkor egy egy J betű, EGYÉBKÉNT (ELSE) törlődik a kijelző. A második ha esetet leíró ELIF kifejezés az ELSE-IF rövid alakja.
A gombok használatát ( button_a illetve button_b ) nagyban könnyítik a hozzájuk kapcsolódó eljárás függvényei. Ezek a következők:
- is_pressed() logikai függvény, értéke igaz, ha a gomb le van nyomva a lekérdezés pillanatában
- was_pressed() logikai függvény, értéke igaz, ha a gomb le volt nyomva a micro:bit indítása, vagy a függvény utolsó meghívása óta
- get_presses() numerikus értéket ad, ami a micro:bit indítása, vagy a függvény utolsó hívása óta történt gombnyomások számát adja vissza
- reset_presses() a függvény nullára állítja a gombokhoz tartozó eseményszámlálók értékét
LEDek
A micro:bit előlapján a két nyomógomb között egy 25 led-ből álló (5×5) kijelző található. A ledek színe nem, de fényerejük változtatható. A „kijelzőn” előre elkészített ledminták, feliratok, számok jeleníthetőek meg, illetve lehetőség van a pixeleket egyenként ki, illetve bekapcsolni. Erre a következő utasítás használható:
display.set_pixel( x, y, b)
ahol az x,y értékek a pozíciót, a b érték (0..9) a fényerőt állítja be.
Ha a kijelzőre szeretnénk programot írni, célszerű az alábbi „sablont” használni:

A következő mintaprogram segítségével „bekeretezhetjük” a kijelzőt, azaz sorban, egy while ciklus ciklusmagjában négy for ciklus segítségével egyesével bekapcsoljuk a szélső két sor, illetve két oszlop ledjeit, majd újabb négy for ciklussal egyesével kikapcsoljuk azokat.

from microbit import * while True: # bekapcsolás # felső sor for i in range(0,5): display.set_pixel(i,0,9) sleep(100) # jobb szélső oszlop for i in range(1,5): display.set_pixel(4,i,9) sleep(100) # alsó sor for i in range(2,6): display.set_pixel((5-i),4,9) sleep(100) # bal szélső oszlop for i in range(2,5): display.set_pixel(0,(5-i),9) sleep(100) # kikapcsolás # felső sor for i in range(0,5): display.set_pixel(i,0,0) sleep(100) # jobb szélső oszlop for i in range(1,5): display.set_pixel(4,i,0) sleep(100) # alsó sor for i in range(2,6): display.set_pixel((5-i),4,0) sleep(100) # bal szélső oszlop for i in range(2,5): display.set_pixel(0,(5-i),0) sleep(100)
Végezetül egy, a micro:bit ledmátrixra tervezett játék, amiben az a cél, hogy a kijelzős alsó sorában lévő „játékos” (villogó pixel) elkerülje a felülről lefelé haladó „akadályokat” a rendelkezésre álló három sávnyi pályán. A programban alkalmazott eljárásokat a következő fejezetekben részletesen megvizsgáljuk! A játékhoz jó szórakozást!
from microbit import * import random def draw(track, t, x, y): img = Image(track) img.set_pixel(x,y,t * 4 + 1) return img def PlayGame(): # oldalvonalak track_bits = [ "50005:", "53005:", "50305:", "50035:" ] # kezdősáv track = "50005:50005:50005:50005:50005:" # játékos koordinátái x = 2 y = 4 # villogás beállítása tick = 0 # sáv beállítás paws = 75 last = 0 alive = True while alive==True: tt = draw(track,tick,x,y) if button_a.was_pressed() and x!=1: x = x - 1 elif button_b.was_pressed() and x!=3: x = x + 1 # tikkek frissítése tick += 1 # track bekapcsolása display.show(tt) # minden harmadik tikk if tick == 3: # check for collision if tt.get_pixel(x,y-1)!=0: alive = False # reset tikk tick =0 # alsó sor törlése track = track[:-6] # sáv frissítése if last==0: last = random.randint(0, len(track_bits)-1) else: last = 0 track = track_bits[last] + track # képernyő újrarajzolása tt = draw(track,tick,x,y) display.show(tt) sleep(paws) def main(): while True: if button_a.was_pressed(): PlayGame() sleep(3000) sleep(50) main()
A három forráskód letölthető:
A cikkben használt BBC micro:bit és sok más tartozéka megvásárolható a pi-shop.hu és MálnaPC Webshopjában!