MicroPython — dugmad A i B na micro:bit-u


Micro:bit ima dva fizička dugmeta — A i B. Pomoću njih možemo napraviti interakciju sa korisnikom. U ovoj lekciji naučićeš kako da:

  • proveriš da li je dugme trenutno pritisnuto
  • reaguješ na klik (jedan pritisak)
  • kombinuješ dugmad A i B
  • napraviš mini projekat koristeći dugmad

Primere možeš isprobati u: ✔ Thonny (Run → Select interpreter → MicroPython BBC micro:bit) ✔ https://python.microbit.org/ (online editor)


1️⃣ Provera da li je dugme pritisnuto (is_pressed)


Metoda is_pressed() proverava da li je dugme trenutno pritisnuto. Vraća vrednost True ili False.


from microbit import *

while True:
    # Proveravamo stanje dugmeta A
    if button_a.is_pressed():
        display.show("A")   # Prikazujemo slovo A
    else:
        display.clear()     # Ako nije pritisnuto – brišemo ekran

□ Važno: Ovaj kod reaguje dok DRŽIŠ dugme.


2️⃣ Reakcija na jedan klik (was_pressed)


Ako želimo da reagujemo samo jednom po kliku, koristimo metodu was_pressed().


from microbit import *

while True:
    # Ako je dugme A kliknuto
    if button_a.was_pressed():
        display.show(Image.HAPPY)
        sleep(500)
        display.clear()

□ Razlika:

  • is_pressed() – reaguje dok držiš dugme
  • was_pressed() – reaguje samo jednom po kliku

3️⃣ Dugme B


Na isti način koristiš dugme B:


from microbit import *

while True:
    if button_b.was_pressed():
        display.show("B")
        sleep(500)
        display.clear()

4️⃣ Različite reakcije za A i B


Možemo napraviti da svako dugme ima drugačiju funkciju.


from microbit import *

while True:

    # Ako je kliknuto A – prikazujemo srce
    if button_a.was_pressed():
        display.show(Image.HEART)
        sleep(500)

    # Ako je kliknuto B – prikazujemo osmeh
    if button_b.was_pressed():
        display.show(Image.SMILE)
        sleep(500)

    display.clear()

□ Ovde koristimo dva odvojena if uslova. To znači da oba mogu biti izvršena.


5️⃣ Istovremeno dugme A i B


Možemo proveriti da li su oba dugmeta pritisnuta u istom trenutku.


from microbit import *

while True:
    if button_a.is_pressed() and button_b.is_pressed():
        display.show(Image.HEART)
    else:
        display.clear()

Operator and znači: oba uslova moraju biti tačna.


6️⃣ Primer — Brojač pomoću dugmeta A


Sada pravimo mali projekat. Svaki klik na dugme A povećava broj za 1.


from microbit import *

broj = 0  # početna vrednost

while True:
    if button_a.was_pressed():
        broj = broj + 1   # uvećavamo promenljivu
        display.show(broj)
        sleep(500)

Ovo je pravi mini projekat — koristimo:

  • promenljivu
  • dugme
  • LED ekran

7️⃣ Primer — Dugme A povećava, B smanjuje



from microbit import *

broj = 0

while True:

    if button_a.was_pressed():
        broj += 1   # skraćeni zapis za broj = broj + 1

    if button_b.was_pressed():
        broj -= 1   # smanjujemo vrednost

    display.show(broj)
    sleep(200)

□ Sada imamo potpunu kontrolu nad promenljivom pomoću dugmadi.


8️⃣ Mini projekat — Jednostavan meni


Napravimo mali meni:

  • Dugme A → prikazuje temperaturu
  • Dugme B → prikazuje svetlost
  • A + B → prikazuje srce

from microbit import *

while True:

    if button_a.is_pressed() and button_b.is_pressed():
        display.show(Image.HEART)

    elif button_a.was_pressed():
        t = temperature()
        display.scroll("T:" + str(t))

    elif button_b.was_pressed():
        l = display.read_light_level()
        display.scroll("L:" + str(l))

Ovo je već ozbiljniji projekat jer kombinuje:

  • dugmad
  • promenljive
  • senzore
  • tekstualni prikaz

Najčešće greške

  • Zaboravljen while True — program se izvrši samo jednom.
  • Zaboravljen sleep() — broj se menja prebrzo.
  • Mešanje is_pressed() i was_pressed().

Mini zadaci za vežbu

Zadatak 1 (lak)

Kada pritisneš A — prikaži slovo A. Kada pritisneš B — prikaži slovo B.

Zadatak 2

Napraviti brojač koji počinje od 10 i smanjuje se pritiskom na dugme A.

Zadatak 3

Napraviti program gde:

  • A → prikazuje osmeh
  • B → prikazuje tužno lice
  • A + B → prikazuje srce

Zadatak 4 (srednje težak)

Napraviti brojač koji:

  • A povećava broj
  • B resetuje broj na 0

Zadatak 5 (izazov)

Napraviti jednostavnu igru:

  • A dodaje 1 poen
  • B dodaje 2 poena
  • A + B prikazuje trenutni rezultat

Šta si naučio?

  • kako da koristiš dugmad A i B
  • razliku između is_pressed i was_pressed
  • kako da kombinuješ uslove
  • kako da praviš interaktivne projekte

Povezivanje sa stranicom “Naredbe u MakeCode-u”

Na stranici Naredbe u MakeCode-u možeš da vidiš pregled različitih blokova i *komandi* koje se najčešće koriste u programiranju micro:bit uređaja, kao što su komande iz:

  • Basic — za tekst, brojeve i osnovne akcije
  • Input — dugmad, pokreti, senzori
  • Music — tonovi i melodije
  • Logic — uslovne odluke
  • Variables — promenljive
Ovo ti pomaže da razumeš koncept blok-naredbi pre nego što pređeš na *tekstualni MicroPython kod*. :contentReference[oaicite:2]{index=2}

U nastavku su tri primera koji su analogni MakeCode naredbama, ali rešeni u MicroPython-u.


Primer 1 — “Prikazi ime na startu”

U MakeCode-u koristiš blok Basic → show string da odmah prikažeš poruku kada program počne. U MicroPython-u ovo radimo ovako:


from microbit import *

# Prikazuje ime jednom na početku
display.scroll("Marko")

✔ Ovaj kod se izvršava odmah po pokretanju programa — kao MakeCode blok on start → show string.


Primer 2 — “Prikaz srca kada se protrese”

U MakeCode-u postoji Input → on shake gest koji reaguje na tresenje. U MicroPython-u možemo proveriti gest u petlji:


from microbit import *

while True:
    if accelerometer.was_gesture("shake"):
        display.show(Image.HEART)
        sleep(600)
        display.clear()

□ Ovaj kod detektuje tresenje (shake) i onda prikazuje srče — slično MakeCode-ovom bloku za gest.


Primer 3 — “Prikaži nasumičan broj kad se protrese”

U MakeCode-u koristimo blok Math → pick random u okviru Input → on shake. U MicroPython-u radimo isto uz random modul:


from microbit import *
import random

while True:
    if accelerometer.was_gesture("shake"):
        broj = random.randint(1, 6)  # nasumicni broj 1–6
        display.show(broj)
        sleep(800)
        display.clear()

□ Ovaj primer pravi digitalnu “kockicu” — svaki tresak daje novi broj od 1 do 6. □ U MakeCode-u bi to bio blok “on shake → show number(randint(1, 6))”. :contentReference[oaicite:3]{index=3}


Ove MicroPython verzije ti pokazuju kako koncepti iz MakeCode-a i blokova mogu da se prevede u pravi Python kod — i da rade isto na tvom micro:bit-u.

Skriveni mini kviz — MakeCode i MicroPython

Proveri da li možeš da prepoznaš koji MakeCode blok odgovara datom MicroPython kodu. Otvori kviz i testiraj svoje znanje.

Otvori kviz

Mini kviz: Prevedi Python u MakeCode blok

1. Koji MakeCode blok odgovara ovom MicroPython kodu?


display.scroll("Zdravo")




2. Koji blok je ekvivalent sledećem kodu?


if button_a.is_pressed():
    display.show(Image.HEART)




3. Koji MakeCode blok odgovara sledećem kodu?


import random
broj = random.randint(1, 6)
display.show(broj)




4. Šta radi ovaj kod?


if accelerometer.was_gesture("shake"):
    display.show(Image.SMILE)







Mini projekti — Integracija znanja (LED + dugmad + logika)


Ovi zadaci kombinuju sve što si do sada naučio:

  • LED matricu (tekst, slike, animacije)
  • dugmad A i B
  • promenljive
  • petlje i uslove

Zadaci su izazovni i namenjeni su za samostalan rad.


Mini projekat 1 — Brojač sa kontrolom

Cilj: Napravi interaktivni brojač.

Zahtevi:

  • Dugme A povećava broj za 1
  • Dugme B smanjuje broj za 1
  • Kada su oba dugmeta pritisnuta — broj se resetuje na 0
  • Trenutna vrednost se prikazuje na LED matrici

Uputstvo za rešavanje:

  1. Napraviti promenljivu broj = 0
  2. Koristiti while True petlju
  3. U petlji proveravati stanja dugmadi
  4. Nakon svake promene prikazati novu vrednost
  5. Dodati malu pauzu (sleep(200)) da se izbegne višestruko brojanje

Razmisli: kako sprečiti da jedno držanje dugmeta poveća broj više puta?



Mini projekat 2 — Mini meni (interaktivni izbor)

Cilj: Napravi jednostavan meni sa tri opcije.

Scenario:

  • Dugme A menja opciju (1 → 2 → 3 → 1)
  • Dugme B potvrđuje izbor

Opcije mogu biti:

  • 1 → Prikaži srce
  • 2 → Prikaži tekst „Hello“
  • 3 → Pokreni kratku animaciju

Uputstvo:

  1. Kreiraj promenljivu opcija = 1
  2. Na dugme A povećavaj vrednost opcije
  3. Ako opcija pređe 3 — vrati je na 1
  4. Na dugme B izvrši akciju u zavisnosti od opcije
  5. Koristi if / elif / else

Ovaj zadatak uvodi osnovu za pravljenje pravih interaktivnih sistema.



Mini projekat 3 — Mini igra: Pogodi broj

Cilj: Napravi jednostavnu igru pogađanja broja.

Pravila:

  • Micro:bit generiše nasumičan broj od 1 do 5
  • Dugme A povećava tvoju pretpostavku
  • Dugme B potvrđuje izbor
  • Ako pogodiš — prikaži srce ❤️
  • Ako pogrešiš — prikaži tužno lice i generiši novi broj

Smernice:

  1. Koristi import random
  2. Kreiraj promenljivu za tajni broj
  3. Kreiraj promenljivu za igračev izbor
  4. Ograniči izbor od 1 do 5 (vrati na 1 ako pređe 5)
  5. Nakon svake runde resetuj igru

Ovo je kombinacija:

  • promenljivih
  • uslova
  • dugmadi
  • LED prikaza
  • logike igre

□ Izazov za napredne: Dodaj brojač pokušaja i prikaži koliko je puta igrač pokušao da pogodi broj.


Rešenja mini projekata (za nastavnike)

Ovaj deo je namenjen nastavnicima radi provere i demonstracije mogućih rešenja. Preporuka je da učenici prvo pokušaju samostalno.

Prikaži rešenja

Mini projekat 1 — Interaktivni brojač


from microbit import *

brojac = 0  # početna vrednost

while True:

    # Ako je pritisnuto dugme A, povećaj brojač
    if button_a.was_pressed():
        brojac = brojac + 1
        display.show(str(brojac))  # pretvaramo broj u tekst

    # Ako je pritisnuto dugme B, smanji brojač
    if button_b.was_pressed():
        brojac = brojac - 1
        display.show(str(brojac))

    # Ako su oba dugmeta pritisnuta istovremeno, resetuj brojač
    if button_a.is_pressed() and button_b.is_pressed():
        brojac = 0
        display.show("0")

    sleep(100)

Metodička napomena:
Obratiti pažnju na razliku između was_pressed() i is_pressed(). was_pressed() reaguje samo jednom po pritisku — idealno za brojače.


Mini projekat 2 — Mini meni sa ikonama


from microbit import *

# Lista ikona (meni)
ikone = [Image.HEART, Image.HAPPY, Image.SAD]
pozicija = 0

display.show(ikone[pozicija])

while True:

    # Dugme A -- sledeća ikona
    if button_a.was_pressed():
        pozicija = pozicija + 1
        if pozicija >= len(ikone):
            pozicija = 0  # vraćamo na početak
        display.show(ikone[pozicija])

    # Dugme B — prethodna ikona
    if button_b.was_pressed():
        pozicija = pozicija - 1
        if pozicija < 0:
            pozicija = len(ikone) - 1
        display.show(ikone[pozicija])

    sleep(100)

Metodička napomena:
Ovaj zadatak uvodi rad sa listama i indeksima. Učenici uče kako funkcioniše len() i ciklično kretanje kroz listu.


Mini projekat 3 — Reakcioni test


from microbit import *
import random

while True:

    # Nasumično čekanje između 2 i 5 sekundi
    cekanje = random.randint(2000, 5000)
    sleep(cekanje)

    display.show("!")

    start = running_time()  # beležimo početno vreme

    # Čekamo da korisnik pritisne dugme A
    while not button_a.is_pressed():
        pass

    reakcija = running_time() - start  # računamo razliku vremena

    display.scroll(str(reakcija) + "ms")
    sleep(2000)

Metodička napomena:
Ovaj projekat kombinuje:

  • rad sa promenljivama
  • rad sa vremenom (running_time())
  • petlje
  • nasumične brojeve
Odličan primer integracije više lekcija u jedan projekat.