2.1 Brojač pritisaka tipke
Do sada je pločica samo govorila. U ovom primjeru počinje slušati: čitat ćeš tipku pomoću Soldered NULA MINI pločice i brojati koliko je puta pritisnuta, ispisujući tekući ukupan broj u konzolu.
U ovoj dokumentaciji naučit ćeš:
- Kako spojiti tipku bez dodatnih komponenti, koristeći otpornik ugrađen u čip
- Kako konfigurirati pin kao ulaz pomoću
Pin.INiPin.PULL_UP - Kako pročitati taj pin pomoću
value() - Zašto pritisnuta tipka daje 0, a ne 1
Potreban hardver:
- 1x Soldered NULA MINI pločica
- 1x Breadboard
- 1x Tipka
- 2x Jumper žice
- 1x USB-C kabel
Spajanje komponenti
Prati pet koraka ispod. Svaka fotografija snimljena je s istog položaja, pa je možeš usporediti s prethodnom i vidjeti točno što se promijenilo.
1. Umetni NULA MINI pločicu na breadboard
Utisni pločicu u jedan kraj breadboarda tako da njezina dva reda pinova sjednu s obje strane središnjeg kanala, s čipom okrenutim prema dolje. Pritisni je ravnomjerno dok svi pinovi ne sjednu.

Odvoji trenutak da nađeš dva pina koja ovaj primjer koristi. Imena pinova ispisana su duž oba ruba pločice, a svaki pin sjedi u svom numeriranom redu. Na fotografiji iznad pločica zauzima redove 25 do 30, što stavlja IO19 u red 27 i GND u red 30.
2. Postavi tipku
Utisni tipku u sredinu breadboarda tako da premosti središnji kanal, nekoliko redova dalje od pločice. Na fotografiji su njezine nožice u redovima 15 i 17.

3. Spoji GND na tipku
Masa ide u dva skoka, koristeći plavu − vodilicu duž ruba breadboarda kao dijeljenu liniju mase.
- Prva jumper žica: iz reda u kojem je GND (red 30 na fotografiji) do plave − vodilice.
- Druga jumper žica: s te iste plave − vodilice natrag u red 15, na f–j strani tipke.

4. Spoji IO19 na tipku
Sada signalna žica. Povuci jednu jumper žicu iz reda u kojem je IO19 (red 27 na fotografiji) u red 17, na a–e strani tipke.

Primijeti da dvije žice dolaze do tipke s suprotnih strana: red 15 na f–j strani, red 17 na a–e strani. To je dijagonalni par opisan iznad, i to je ono što tipku čini stvarnim prekidačem.
5. Spoji pločicu na računalo
Priključi USB-C kabel u pločicu. LED-ica napajanja se upali čim pločica dobije struju.

Čitanje ulaza
Izlazni pin je onaj koji pločica pobuđuje; ulazni pin je onaj koji mjeri. U 1.2 Blinkanje LED-ice pin je stvoren s Pin.OUT jer smo u njega pisali. Ovdje želimo obrnuto, pa je pin stvoren s Pin.IN, a value() prijavljuje što nađe, kao 1 (visoko) ili 0 (nisko).
Pin koji nije spojen ni na što je problem: kaže se da lebdi, i skuplja dovoljno električnog šuma iz okoline da sam od sebe skače između visokog i niskog stanja. Pločica bi brojala pritiske koji se nikada nisu dogodili. Pinu treba nešto što ga drži na poznatoj vrijednosti kad tipka ništa ne radi.
Za to služi Pin.PULL_UP. On uključuje otpornik unutar čipa koji nježno veže pin na 3.3 V, pa pin čita 1 dok se ništa drugo ne događa. Posao tipke je samo spojiti taj pin na GND, što nadglasa slabi unutarnji otpornik i povuče pin na 0 V.
btn = Pin(BUTTON_PIN, Pin.IN, Pin.PULL_UP)
pinMode(BUTTON_PIN, INPUT_PULLUP) unutar setup(). MicroPython oboje sklapa u jednu liniju iznad: treći argument funkcije Pin() je ono što uključuje pull-up.Brojanje pritisaka
Budući da u MicroPythonu nema loop(), pišemo vlastitu beskonačnu petlju i čitamo tipku unutar nje. Kada je vrijednost 0, tipka je pritisnuta, pa brojaču dodajemo jedan i ispisujemo novi ukupan broj.
Operator += je skraćeni zapis za "dodaj onome što je već tu", pa counter += 1 znači isto kao counter = counter + 1.
if reading == 0:
counter += 1
print("Counter:", counter)
print() odvojenih zarezima ispisuje ih u jednoj liniji s razmakom između, pa print("Counter:", counter) daje Counter: 4. To te spašava od toga da sam spajaš tekst i broj.Ostavljeno tako, držanje tipke pritisnutom poslalo bi brojač u vrtoglavi rast, jer bi petlja u svakom prolazu našla tipku još pritisnutu. Zato nakon što izbrojimo pritisak čekamo da se tipka vrati gore prije nego nastavimo:
while btn.value() == 0:
# Čekaj dok se tipka ne otpusti
time.sleep_ms(10)
reading == 0 izbrojao bi jedan pritisak nekoliko puta. Čekanje otpuštanja drži program na mjestu dok se kontakti ne umire i dok tvoj prst ne otiđe s tipke, pa u praksi jedan pritisak daje jedan broj: pet promišljenih pritisaka na pločici korištenoj za ovu stranicu dalo je točno pet linija. Cijena je to što ta petlja blokira: dok je tipka pritisnuta, pločica sjedi u njoj i ne može raditi ništa drugo. 2.2 Debounce tipke je zamjenjuje mjeračem vremena koji nikada ne blokira, a to je ono što programu koji ima još posla stvarno treba.Kod
# Modul machine sadrži sve što razgovara s hardverom, a Pin upravlja pojedinim pinom.
from machine import Pin
import time
# Ovo je varijabla kojoj predajemo broj pina na koji smo spojili TIPKU.
# NULA pločica ima logiku imenovanja pinova ovako: IO19, gdje je 19 broj koji dajemo varijabli.
BUTTON_PIN = 19
# Ovdje stvaramo naš Pin objekt, koji smo nazvali "btn". Pin.IN govori pločici da ovaj pin treba čitati vrijednost
# umjesto da je piše. Pin.PULL_UP uključuje otpornik unutar čipa koji nježno veže pin na 3.3V,
# pa tipka mora samo spojiti pin na GND i nikakvi dodatni dijelovi na breadboardu nisu potrebni.
btn = Pin(BUTTON_PIN, Pin.IN, Pin.PULL_UP)
# Ova varijabla drži vrijednost našeg brojača.
counter = 0
# Ispiši početnu poruku da znamo da se program uspješno pokrenuo.
print("Button Counter Example started!")
print("Press the button to increase the counter...")
# Petlja while True ponavlja se unedogled, pa se kod unutar nje izvršava dok ne zaustavimo program.
while True:
# value() je funkcija koja čita vrijednost s našeg pina, ili 1 (visoko) ili 0 (nisko).
# Pull-up otpornik drži pin na 3.3V dok je tipka otpuštena, pa čitamo 1, a pritisak tipke
# spaja pin na GND pa čitamo 0. Tipka spojena na ovaj način naziva se active low.
reading = btn.value()
# Ako je tipka pritisnuta, povećaj brojač za jedan i ispiši ga u konzolu.
# Budući da ova verzija ne uključuje debounce, za jedan pritisak može se pojaviti više brojeva.
if reading == 0:
counter += 1
print("Counter:", counter)
# Čekaj da se tipka otpusti prije nego dopustimo novo brojanje.
while btn.value() == 0:
# Čekaj dok se tipka ne otpusti
time.sleep_ms(10)
# time.sleep_ms() pauzira program za zadani broj milisekundi. Vrlo kratka pauza ovdje ostavlja
# procesoru trenutak da obavi svoj posao u pozadini umjesto da svaki ciklus troši na provjeru tipke.
time.sleep_ms(10)
time.sleep_ms(10) čeka deset milisekundi. To je druga funkcija od time.sleep() koju si koristio za blinkanje LED-ice, a koja mjeri u sekundama. time.sleep_ms(10) i time.sleep(0.01) su ista pauza zapisana na dva načina.Što bi trebao vidjeti
Pritisni Run. Dvije početne poruke pojavljuju se u Shellu odmah, a svaki pritisak dodaje liniju:
Button Counter Example started!
Press the button to increase the counter...
Counter: 1
Counter: 2
Counter: 3
Counter: 4
Cijeli primjer
Pogledaj cijeli kod primjera na linku ispod:
2.1_Button_Counter.py
Primjer koji broji koliko je puta tipka pritisnuta i ispisuje ukupan broj u konzolu.