MICRO:BIT – Postupné rozsvěcování LED diod

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í funkci on_forever v 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říkazVý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_promenneUmožní měnit hodnotu proměnné definované mimo funkci
len(pole)Vrátí počet prvků v poli (seznamu)

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Time limit is exhausted. Please reload CAPTCHA.

This site uses Akismet to reduce spam. Learn how your comment data is processed.