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


