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!