1.2 Blinkanje LED-ice
Ovaj primjer pali i gasi LED-icu pomoću Soldered NULA MINI pločice. To je obično prvi projekt koji svatko sagradi s mikrokontrolerom, jer pokriva najosnovniju ideju koja postoji: dovođenje pina u HIGH (uključeno) ili LOW (isključeno).
U ovoj dokumentaciji naučit ćeš:
- Kako dodijeliti pin varijabli za lakše upravljanje kodom.
- Kako konfigurirati pin kao izlaz pomoću
pinMode(). - Kako kontrolirati stanja pina pomoću
digitalWrite()(HIGH i LOW) - Kako koristiti
delay()za pauziranje izvršavanja programa
Potreban hardver:
- 1x Soldered NULA MINI pločica
- 1x Breadboard
- 1x LED-ica (bilo koje boje)
- 1x otpornik od 330 ohma
- Jumper žice
- USB-c kabel
Spajanje komponenti
Prvo sastavi krug. Prođi korake po redu, jer svaki ovisi o onome prije njega.
1. Umetni NULA MINI pločicu na breadboard
Ako tvoja pločica ima muške headere zalemljene na pinove, utisni je u breadboard. Spajanje svega ostalog je tako lakše i urednije.

Ako ih nema, spoji komponente direktno na pločicu. Zbrkanije je, ali radi.
2. Spoji LED-icu na NULA MINI pločicu
Uzmi jumper žicu i utisni jedan kraj u slobodan GPIO pin na pločici. Ovaj primjer koristi IO4. Utisni drugi kraj u bilo koji slobodan red na breadboardu, dakle red u kojem nema ničega drugoga.

Uzmi jedan otpornik od 330 Ω i stavi jedan kraj u isti red u kojem je žica. Stavi drugi kraj u drugi slobodan red.

Pogledaj dvije nožice LED-ice. Jedna je duža od druge:

Stavi dužu nožicu, anodu, u red u kojem je daleki kraj otpornika od 330 Ω.

Kraća nožica, katoda, ide na pin GND na NULA pločici.
Spoji NULA MINI pločicu na računalo preko USB-c kabela:

Dodjeljivanje pinova varijablama
Umjesto pisanja broja pina direktno u svaki poziv funkcije, možeš ga spremiti u varijablu radi bolje čitljivosti. U ovom primjeru varijabli pinNumber dodijeljena je vrijednost 4, što odgovara pinu IO4 na NULA pločici. Ako kasnije odlučiš prebaciti LED-icu na drugi pin, moraš izmijeniti samo varijablu na jednom mjestu, a ostatak koda će i dalje raditi.
Poslužit će bilo koji pin označen s IO. Dijagram ispod prikazuje sve njih:

Varijable pinNumber i delayMS deklarirat ćemo prije setup():
/*
Ovo je varijabla kojoj predajemo broj pina na koji smo spojili LED-icu.
NULA pločica ima logiku imenovanja pinova ovako: IO4, gdje je 4 broj koji dajemo varijabli.
Ako želiš koristiti drugi pin, pobrini se da koristiš pin označen s IO__.
*/
int pinNumber = 4;
/*
Ovo je varijabla koja definira vrijeme blinkanja, u milisekundama.
Slobodno eksperimentiraj s ovom vrijednošću.
*/
int delayMS = 1000;
Konfiguriranje pinova kao ulaza ili izlaza
Svaki IO pin na NULA MINI može raditi kao ulaz (čitanje tipki, senzora i sličnog) ili kao izlaz (pobuđivanje LED-ica, buzzera, motora). LED-ica je nešto čime želimo upravljati, pa njezin pin mora biti izlaz. Pinovi na početku ne znaju u kojem smjeru rade, a pinMode() je ono što im to kaže.
Funkcija pinMode(pinNumber, mode) govori mikrokontroleru kako se određeni pin treba ponašati. Ako mod postaviš na OUTPUT, pin može spojenim komponentama kao što su LED-ice, buzzeri ili motori davati napon (HIGH) ili nikakav napon (LOW). Ako ga postaviš na INPUT, pin sluša signale koji dolaze izvana, kao što je stanje tipke ili razina senzora. Postoji i INPUT_PULLUP, koji uključuje otpornik unutar čipa da drži pin na poznatoj razini kada ništa nije spojeno. O tome ima više u kasnijem poglavlju.

Funkciju pinMode() pozvat ćemo unutar setup():
void setup() {
/*
pinMode() je funkcija koja konfigurira zadani pin da se ponaša ili kao ulaz ili u ovom slučaju kao izlaz.
To jednostavno znači da pin "čita" dostupne podatke kada je u ulaznom modu, a "piše" podatke kada je u izlaznom modu.
Budući da naš pin mora upaliti LED-icu, pin ćemo staviti u OUTPUT mod.
*/
pinMode(pinNumber, OUTPUT);
}
Upravljanje stanjima pina pomoću digitalWrite()
Kada je pin konfiguriran kao izlaz, njegovim stanjem možeš upravljati funkcijom digitalWrite(). Sintaksa je digitalWrite(pinNumber, value), gdje value može biti ili HIGH ili LOW.
Pisanje HIGH postavlja pin na logičku visoku razinu (3.3V na NULA MINI pločici), što dopušta struji da teče kroz spojeni krug, u ovom slučaju paleći LED-icu.
Pisanje LOW postavlja pin na 0V, što zaustavlja tok struje i gasi LED-icu.
Funkciju digitalWrite() pozvat ćemo unutar loop():
void loop() {
/*
digitalWrite() je funkcija koja nam daje mogućnost da promijenimo vrijednost koju naš pin (prethodno postavljen kao OUTPUT pin)
piše. Kako nam ime funkcije kaže, možemo prebacivati samo između digitalnih vrijednosti, visoke i niske. Te vrijednosti
predstavljene su različitim razinama napona, visoka je 3.3V dok je niska 0V. Počet ćemo dovođenjem pina u HIGH
mod, dajući LED-ici 3.3V i paleći je.
*/
digitalWrite(pinNumber, HIGH);
//Pin dovodimo u LOW mod, gaseći LED-icu.
digitalWrite(pinNumber, LOW);
}
Pauziranje izvršavanja programa
Kada bi LED-icu samo palio i gasio u brzom nizu, promjene bi se događale tako brzo da ih tvoje oči ne bi otkrile. Da blinkanje postane vidljivo, koristit ćeš funkciju delay(). Sintaksa je delay(milliseconds), gdje broj predstavlja koliko dugo program treba pauzirati.
U ovom primjeru varijabla delayMS postavljena je na 1000, što znači da svaka pauza traje jednu sekundu. Kod prvo pali LED-icu pomoću digitalWrite(pinNumber, HIGH), pa pauzira pomoću delay(delayMS). Nakon toga gasi LED-icu pomoću digitalWrite(pinNumber, LOW) i ponovno pauzira jednu sekundu. Ta petlja nastavlja se unedogled, proizvodeći vidljiv uzorak blinkanja.
Funkciju delay() pozivamo nakon svakog poziva digitalWrite():
void loop() {
/*
digitalWrite() je funkcija koja nam daje mogućnost da promijenimo vrijednost koju naš pin (prethodno postavljen kao OUTPUT pin)
piše. Kako nam ime funkcije kaže, možemo prebacivati samo između digitalnih vrijednosti, visoke i niske. Te vrijednosti
predstavljene su različitim razinama napona, visoka je 3.3V dok je niska 0V. Počet ćemo dovođenjem pina u HIGH
mod, dajući LED-ici 3.3V i paleći je.
*/
digitalWrite(pinNumber, HIGH);
/*
delay() je funkcija koja započinje pauzu u kodu. Trajanje pauze definirano je parametrom ms.
U ovom slučaju želimo malo počekati nakon što smo upalili LED-icu.
*/
delay(delayMS);
//Pin dovodimo u LOW mod, gaseći LED-icu.
digitalWrite(pinNumber, LOW);
//Ostavi LED-icu ugašenu na trenutak.
delay(delayMS);
}
Cijeli primjer
Pogledaj cijeli kod primjera na linku ispod:
1.2_LED_blinking.ino
Primjer koji pokazuje kako upravljati blinkanjem obične LED-ice