Skip to main content

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 Serial Monitor.

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 pinMode() i INPUT_PULLUP
  • Kako pročitati taj pin pomoću digitalRead()
  • Zašto pritisnuta tipka daje LOW, a ne HIGH

Potreban hardver:

  • 1x Soldered NULA MINI pločica
  • 1x Breadboard
  • 1x Tipka
  • 2x Jumper žice
  • 1x USB-C kabel
ℹ️
Za ovaj primjer nije potreban otpornik. Tipke na ovoj pločici koriste otpornik ugrađen u sam čip, koji se uključuje u kodu. Sve što ti treba je tipka i dvije žice.

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

ℹ️
Ovaj korak pretpostavlja da znaš kako je breadboard spojen iznutra i što su njegove naponske vodilice (power rails). Za uvod pogledaj stranicu dokumentacije Osnove breadboarda.

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.

NULA MINI pločica postavljena na breadboard
Korak 1: pločica postavljena na breadboard

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.

ℹ️
Tvoja pločica može sjediti u drugim redovima od one na fotografiji. Važno je u koji red sleti koji pin. Čitaj imena ispisana na pločici, a ne prepisuj brojeve.

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.

Tipka postavljena preko središnjeg kanala
Korak 2: tipka premošćuje središnji kanal
⚠️
Tipka ima četiri nožice, ali samo dvije su važne. Dvije nožice na istoj strani tipke trajno su spojene unutar nje. Pritisak tipke spaja jednu stranu s drugom. Zato uvijek koristi jednu nožicu s obje strane središnjeg kanala, jednu u pojasu a–e i jednu u pojasu f–j. Ako uzmeš obje žice s iste strane, te dvije su već spojene i pločica će se ponašati kao da je tipka zauvijek pritisnuta.

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.
Dvije jumper žice spajaju GND na tipku preko negativne vodilice
Korak 3: GND dolazi do tipke preko plave − vodilice
ℹ️
Obje žice moraju ići u isti stupac vodilice, onaj koji ide uz plavu liniju. Vodilica uz crvenu liniju je zaseban pojas i nije spojena s njom.

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.

Jumper žica spaja IO19 na lijevu stranu tipke
Korak 4: IO19 spojen na drugu stranu 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.

Gotov krug s priključenim USB-C kabelom
Korak 5: gotov krug, napajan preko USB-C

Čitanje ulaza

Izlazni pin je onaj koji pločica pobuđuje; ulazni pin je onaj koji mjeri. digitalRead() prijavljuje što nađe, kao HIGH ili LOW.

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 HIGH i LOW. 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 INPUT_PULLUP. On uključuje otpornik unutar čipa koji nježno veže pin na 3.3 V, pa pin čita HIGH dok se ništa drugo ne događa. Jedini posao tipke je spojiti taj pin na GND, što nadglasa slabi unutarnji otpornik i povuče pin na 0 V.

ℹ️
Zato pritisnuta tipka daje LOW. Pin se drži na HIGH dok je tipka otpuštena, a čita LOW dok je pritisnuta, obrnuto od onoga što većina ljudi očekuje. Tipka spojena na ovaj način naziva se active low, i to je standardni način spajanja tipke na bilo koji mikrokontroler.

Kod

/*
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.
*/
const int BUTTON_PIN = 19;

/*
Ova varijabla drži vrijednost našeg brojača.
Svaki put kada je tipka pritisnuta, vrijednost brojača povećat će se za jedan.
*/
int counter = 0;

void setup() {

/*
pinMode() je funkcija koja konfigurira zadani pin da se ponaša ili kao ulaz ili kao izlaz.
Budući da naš pin mora otkriti je li tipka pritisnuta, pin ćemo staviti u INPUT_PULLUP mod.
INPUT_PULLUP uključuje mali otpornik unutar čipa koji nježno veže pin na 3.3V. Bez njega bi pin
lebdio, dakle ne bi bio spojen ni na što i skupljao bi slučajni šum, a pločica bi čitala pritiske koji
se nikada nisu dogodili. Budući da otpornik pin drži na visokoj razini, tipka mora samo spojiti pin na GND, pa nikakvi dodatni
dijelovi na breadboardu nisu potrebni.
*/
pinMode(BUTTON_PIN, INPUT_PULLUP);

/*
Serial.begin() inicijalizira serijsku komunikaciju između NULA pločice i računala.
Ovdje ga koristimo da bismo mogli ispisati trenutnu vrijednost brojača u Serial Monitor.
*/
Serial.begin(115200);

/*
Ispiši početnu poruku da znamo da se program uspješno pokrenuo.
*/
Serial.println("Button Counter Example started!");
Serial.println("Press the button to increase the counter...");
}

void loop() {

/*
digitalRead() je funkcija koja čita vrijednost sa zadanog digitalnog pina, ili HIGH ili LOW.
Primijeti da je vrijednost obrnuta od onoga što bi mogao očekivati. Pull-up otpornik drži pin na 3.3V
dok je tipka otpuštena, pa pločica čita HIGH, a pritisak tipke spaja pin na GND pa čita
LOW. Tipka spojena na ovaj način naziva se active low.
*/
bool reading = digitalRead(BUTTON_PIN);

/*
Ako je tipka pritisnuta, povećaj brojač za jedan i ispiši ga u Serial Monitor.
Budući da ova verzija ne uključuje debounce, za jedan pritisak može se pojaviti više brojeva.
*/
if (reading == LOW) {
counter++;
Serial.print("Counter: ");
Serial.println(counter);

/*
Čekaj da se tipka otpusti prije nego dopustimo novo brojanje.
To sprječava brojač da raste previše brzo dok je tipka još pritisnuta.
*/
while (digitalRead(BUTTON_PIN) == LOW) {
// Čekaj dok se tipka ne otpusti
}
}
}

Što bi trebao vidjeti

Prenesi skicu, pa otvori Tools → Serial Monitor i postavi baud rate na 115200. Pojavljuju se dvije početne poruke, a svaki pritisak dodaje liniju.

Serial Monitor prikazuje brojač koji raste sa svakim pritiskom tipke
Brojač raste sa svakim pritiskom
ℹ️
U Serial Monitoru nema ničega? Provjeri je li baud rate 115200, i pritisni tipku RST na pločici da ponovno pokreneš skicu pa da opet vidiš početne poruke.

Cijeli primjer

Pogledaj cijeli kod primjera na linku ispod:

2.1_Button_Counter.ino

Primjer koji broji koliko je puta tipka pritisnuta i ispisuje ukupan broj preko Seriala.