Co je potřeba









Schéma zapojení

- Zapojení LED: anoda (delší nožička +) směrem k rezistoru, katoda (kratší nožička –) směrem ke GND.
- Všechny body GND jsou spojeny dohromady. Na nepájivém poli v řádku označeném -.
- Tlačítka při stisku propojí P0 nebo P1 s GND. Program používá události dotykových pinů, které reagují na krátké spojení a uvolnění.
- Přiřazení PIN: tlačítko hráče 1 na P0 spouští čas hráče 2; tlačítko hráče 2 na P1 spouští čas hráče 1. LED na P16 svítí, když se odpočítává čas hráči 1, LED na P8 svítí, když se odpočítává čas hráči 2.
Stručný postup sestavení
- Osaď Micro:bit do rozšiřujícího konektoru a ten pak do středu nepájivého pole.
- Při odpojeném napájení zapoj tlačítka a LED podle schématu. Tlačítka a LED umísti každé na stranu příslušného hráče. Hráč 1 (piny P0 a P16) je na levé straně a hráč 2 (piny P1 a P8) je na pravé straně micro:bit.
- Otevři editor Microsoft MakeCode a přepni na Python. Přiložený kód používá rozhraní MakeCode, nikoli běžný MicroPython.
- Vlož níže napsaný kód, stáhni program a nahraj jej do micro:bitu.
- Připoj napájení.
Zdrojový kód
def Kresli(POCET: number):
global index
basic.clear_screen()
index = 0
while index <= POCET - 1:
led.plot(led_order[index][0], led_order[index][1])
index += 1
def on_pin_pressed_p0():
global HRAC
if GAME == 3:
HRAC = 2
pins.digital_write_pin(DigitalPin.P16, 0)
pins.digital_write_pin(DigitalPin.P8, 1)
input.on_pin_pressed(TouchPin.P0, on_pin_pressed_p0)
def ZobrazHrace():
if HRAC == 1:
basic.show_leds("""
. . # . .
. # . . .
# # # # #
. # . . .
. . # . .
""")
pins.digital_write_pin(DigitalPin.P16, 1)
pins.digital_write_pin(DigitalPin.P8, 0)
elif HRAC == 2:
basic.show_leds("""
. . # . .
. . . # .
# # # # #
. . . # .
. . # . .
""")
pins.digital_write_pin(DigitalPin.P16, 0)
pins.digital_write_pin(DigitalPin.P8, 1)
def on_button_pressed_a():
global MIN, HRAC
if GAME == 0:
MIN += 1
if MIN >= len(AR_MIN):
MIN = 0
Kresli(AR_MIN[MIN])
elif GAME == 1:
if HRAC == 1:
HRAC = 2
else:
HRAC = 1
ZobrazHrace()
input.on_button_pressed(Button.A, on_button_pressed_a)
def on_button_pressed_b():
global DELKA_MIN, HRAC, GAME, ODPOCET1, ODPOCET2, ZACATEK
if GAME == 0:
DELKA_MIN = AR_MIN[MIN]
HRAC = 1
GAME = 1
ODPOCET1 = DELKA_MIN * 60000
ODPOCET2 = DELKA_MIN * 60000
ZobrazHrace()
elif GAME == 1:
GAME = 2
basic.show_icon(IconNames.YES)
music.play(music.builtin_playable_sound_effect(soundExpression.twinkle),
music.PlaybackMode.UNTIL_DONE)
basic.pause(200)
GAME = 3
ZACATEK = input.running_time()
input.on_button_pressed(Button.B, on_button_pressed_b)
def on_pin_pressed_p1():
global HRAC
if GAME == 3:
HRAC = 1
pins.digital_write_pin(DigitalPin.P16, 1)
pins.digital_write_pin(DigitalPin.P8, 0)
input.on_pin_pressed(TouchPin.P1, on_pin_pressed_p1)
def Odpocitej(ZBYVA: number):
global index
basic.clear_screen()
index = 0
while index <= Math.ceil(ZBYVA / 60) - 1:
led.plot(led_order[index][0], led_order[index][1])
index += 1
KONEC = 0
ZACATEK = 0
ODPOCET2 = 0
ODPOCET1 = 0
DELKA_MIN = 0
index = 0
MIN = 0
led_order: List[List[number]] = []
AR_MIN: List[number] = []
HRAC = 0
GAME = 0
GAME = -1
HRAC = 1
AR_MIN = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 25]
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]]
pins.digital_write_pin(DigitalPin.P8, 1)
pins.digital_write_pin(DigitalPin.P16, 1)
MIN = 4
basic.show_leds("""
. # # # .
# . # . #
# . # # #
# . . . #
. # # # .
""")
music.play(music.builtin_playable_sound_effect(soundExpression.hello),
music.PlaybackMode.UNTIL_DONE)
basic.pause(100)
Kresli(AR_MIN[MIN])
GAME = 0
def on_forever():
global KONEC, ZACATEK, ODPOCET1, ODPOCET2
if GAME == 3:
KONEC = ZACATEK
ZACATEK = input.running_time()
if HRAC == 1:
ODPOCET1 = ODPOCET1 - (ZACATEK - KONEC)
Odpocitej(Math.ceil(ODPOCET1 / 1000))
elif HRAC == 2:
ODPOCET2 = ODPOCET2 - (ZACATEK - KONEC)
Odpocitej(Math.ceil(ODPOCET2 / 1000))
if ODPOCET1 < 1 or ODPOCET2 < 1:
basic.show_icon(IconNames.SKULL)
music._play_default_background(music.built_in_playable_melody(Melodies.DADADADUM),
music.PlaybackMode.UNTIL_DONE)
def on_pause_until():
return input.button_is_pressed(Button.B)
pause_until(on_pause_until)
control.reset()
basic.forever(on_forever)
Jak hodiny fungují
- Nastavení času: Na začátku se zobrazí symbol hodin
a po té se rozsvítí horní 5 LED na horním řádku displeje.
To znamená výchozí nastavení 5 minut. Jedna LED znamená jednu minutu. Tlačítkem A vybíráš čas pro každého hráče 1 až 10, 15, 20 nebo 25 minut. - Potvrzení: stiskem tlačítka B.
- Volba začínajícího hráče: Po té se rozsvítí šipka směrem ke hráči 1.
Tlačítkem A přepínáš hráče, který bude začínat. Šipka a LED ukazují vybraného hráče. - Potvrzení a start: znovu stiskem tlačítka B.

- Během hry: svítí LED hráče, kterému právě ubíhá čas. Po tahu hrající hráč krátce stiskne a uvolní své externí tlačítko (připojená k pinům P0 a P1) — tím spustí odpočet času soupeře.
- Displej: ukazuje zbývající čas právě aktivního hráče; jeden bod představuje jednu započatou minutu.
- Konec: po vypršení času jednoho z hráčů se zobrazí lebka a přehraje melodie. Tlačítkem B se hodiny restartují do nastavení. Program neobsahuje pauzu ani přidávání času za tah.
Simulátor
Na simulátoru si můžete po stisknutí tlačítka „zobrazit simulátor“ vyzkoušet funkčnost aplikace. Tlačítky A, B se provádí počáteční nastavení. Klikání na piny P0 a P1 simuluje tlačítka hráčů. Zvýraznění pinů P8 a P16 simuluje rozsvícení LED diod.
Poznámky k programu
- Dva nezávislé časy – proměnné
ODPOCET1aODPOCET2uchovávají zbývající čas každého hráče. Odečítá se pouze čas hráče, který je právě na tahu. - Měření skutečně uplynulého času –
input.running_time()vrací čas od spuštění programu v milisekundách. Rozdíl dvou měření určuje, kolik času odečíst; program tak nespoléhá na pravidelné čekání. - Přepínání hráčů – tlačítko na P0 předá tah hráči 2, tlačítko na P1 hráči 1. Současně se přepnou LED na P16 a P8, které ukazují, komu běží čas.
- Displej jako ukazatel minut – seznam
led_orderurčuje pořadí rozsvěcování bodů „po řádcích tam a zpět“. FunkceOdpocitej()rozsvítí jeden bod za každou započatou zbývající minutu.
Jak nastavit pořadí rozsvěcování LED pomocí matic najdete v článku MICRO:BIT – Postupné rozsvěcování LED diod. - Jednoduché stavy programu – proměnná
GAMErozlišuje nastavení času (0), výběr hráče (1), přípravu startu (2) a běžící hru (3). Stejná tlačítka proto mohou v různých fázích dělat jiné věci. - Volitelné délky hry – seznam
AR_MINobsahuje nabízené časy. Jeho úpravou lze nabídku změnit; kvůli displeji s 25 body je vhodné zachovat maximum 25 minut. - Konec a restart – po vypršení času se zobrazí lebka a zazní melodie. Program počká na stisk B a pomocí
control.reset()spustí kód znovu od začátku.
Výroba hodin z kartonu
Protože hodiny potřebují velká tlačítka, nezbylo než je vyrobit. Základna je vyrobená z kartonu. Zahnuté konce jsou obalené alobalem, přichyceným vteřinového lepidlem a kancelářskou sešívačkou a pomocí provázku jsou vytvarované do velkých tlačítek. Nepájivé pole s micro:bitem je přilepené ke kartonové základně, stejně jako bateriový držák. Vše je pospojované spoustou drátku, na tlačítka jsou potřeba propojovací vodiče s krokosvorkou na jednom konci.


Napsat komentář