BBC micro:bit je malý počítač s maticí 5×5 LED diod. Tyto diody můžeme programově rozsvěcet a zhasínat podle potřeby. Nyní si ukážeme, jak naprogramovat postupné rozsvěcování a zhasínání diod v libovolném pořadí pomocí tlačítek A a B. Kód je napsán v MakeCode Pythonu pro MakCode, ale principy platí i pro JavaScript a blokové programování.
Princip programu
Cílem je, aby se po každém stisku tlačítka A rozsvítila jedna další LED dioda v předem zvoleném pořadí a po každém stisku tlačítka B se poslední rozsvícená dioda opět zhasla. Pořadí rozsvěcování si určujeme sami pomocí matice (pole souřadnic).
Jak micro:bit ovládá LED diody
- Micro:bit má displej tvořený 25 LED diodami uspořádanými do čtverce 5×5.
- Každou diodu ovládáme pomocí souřadnic (x, y), kde x a y nabývají hodnot 0 až 4.
- Pro rozsvícení diody použijeme příkaz
led.plot(x, y). - Pro zhasnutí diody použijeme příkaz
led.unplot(x, y).
Jak funguje matice pořadí
- Vytvoříme si pole
led_order, které obsahuje souřadnice všech diod v pořadí, v jakém je chceme rozsvěcet. V našem případě se začínají diody rozsvěcet v levém horním rohu, pokračují na konec prvního řádku a pak pokračují v opačném směru v řádku pod ním a tak dále. - Každý prvek pole je dvojice čísel
[x, y]. Levý horní roh má souřadnice[0, 0]. Souřadnice x se zvyšuje směrem doprava, souřadnice y se zvyšuje smrem dolů. - Změnou pořadí v tomto poli jednoduše změníme i pořadí rozsvěcování na displeji.
Vysvětlení kódu
# Definice matice pořadí LED diod (každý prvek je [x, y])
led_order = [
[0, 0], [1, 0], [2, 0], [3, 0], [4, 0],
[4, 1], [3, 1], [2, 1], [1, 1], [0, 1],
[0, 2], [1, 2], [2, 2], [3, 2], [4, 2],
[4, 3], [3, 3], [2, 3], [1, 3], [0, 3],
[0, 4], [1, 4], [2, 4], [3, 4], [4, 4]
]
# Počáteční nastavení proměnné, která si pamatuje kolik diod je rozsvícených
# Protože na začátku není rozsvícena žádáná dioda, nastavujeme hodnotu proměnné na -1
current_index = -1
# Začátek
def on_forever():
global current_index
if input.button_is_pressed(Button.A):
if current_index < len(led_order) - 1:
current_index += 1
x = led_order[current_index][0]
y = led_order[current_index][1]
led.plot(x, y)
basic.pause(100) # zabrání opakovanému čtení stisku
if input.button_is_pressed(Button.B):
if current_index >= 0:
x = led_order[current_index][0]
y = led_order[current_index][1]
led.unplot(x, y)
current_index -= 1
basic.pause(100) # zabrání opakovanému čtení stisku
basic.forever(on_forever)
Co jednotlivé části dělají:
- led_order – pole určující pořadí rozsvěcení diod. Každý prvek je dvojice
[x, y], což jsou souřadnice jedné LED diody na displeji. - curent_index – proměnná, která si pamatuje, kolik diod je právě rozsvícených. Počítá se od -1, což znamená žádná dioda. 0 Znamená rozsvícenou jednu diodu, neboť první prvek v poli má pořadové číslo 0.
- input.button_is_pressed(Button.A/B)
VracíTrue, pokud je tlačítko A nebo B právě stisknuté. Používá se pro zjištění, jestli je právě stisknuté tlačítko A nebo B. - led.plot(x, y)
Rozsvítí LED na pozici (x, y). - led.unplot(x, y)
Zhasne LED na pozici (x, y). - basic.pause(100)
Zajistí krátkou prodlevu (100 ms), aby nedocházelo k opakovanému čtení stisku tlačítka. - basic.forever(on_forever)
Spustí funkcion_foreverv nekonečné smyčce.
Jak změnit pořadí rozsvěcování?
Stačí změnit pořadí souřadnic v poli led_order. Například pokud chcete, aby se nejdřív rozsvítil střed displeje a pak ostatní, dejte [2][2] na začátek pole.
Shrnutí použitých příkazů
| Příkaz | Význam |
|---|---|
input.button_is_pressed(Button.A) | Vrací True, pokud je tlačítko A právě stisknuté |
input.button_is_pressed(Button.B) | Vrací True, pokud je tlačítko B právě stisknuté |
led.plot(x, y) | Rozsvítí LED diodu na souřadnicích (x, y) |
led.unplot(x, y) | Zhasne LED diodu na souřadnicích (x, y) |
basic.pause(ms) | Pozastaví program na zadaný počet milisekund (ms) |
basic.forever(funkce) | Spustí zadanou funkci v nekonečné smyčce (hlavní cyklus programu) |
global nazev_promenne | Umožní měnit hodnotu proměnné definované mimo funkci |
len(pole) | Vrátí počet prvků v poli (seznamu) |


