Arduino učionica: 1. -BLINK program 2.deo!

Nastavljamo dalje!


 

2.0. Analiza programa “Blink”

Ispod se nalazi kod Blink programa.

void setup() {
  pinMode(13, OUTPUT);
}
void loop() {
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, LOW);
  delay(1000); 
}

Primetićete da se svaki program koji imate u „Examples“ sastoji iz najmanje dva bloka (ili tela, ta dva pojma imaju isto značenje). Recimo da blok je grupa naredbi koje se nalaze između vitičastih zagrada { …blok… }. Prvi blok je blok funkcije setup() u kome se ovaj put nalazi samo jedna naredba a to je funkcija pinMode(). Nakon toga nailazimo na funkciju loop() i njen blok koji ovog puta ima 4 naredbe.

2.1. Funkcije setup() i loop()

Šta zapravo predstavljaju ove funkcije?

Prva funkcija setup() predstavlja funkciju koja će se samo jednom izvršiti nakon pokretanja programa. Ona služi da u njoj definišemo neke početne informacije.

Funkcija loop() je glavna i osnovna funkcija svakog programa pisanog za Arduino. U loop() funkciji treba da se nalaze sve naredbe koje želimo da naš Arduino izvršava. Za razliku od setup() naredbe loop() naredba se izvršava beskonačno mnogo puta, dokle god nam je Arduino uključen. Treba napomenuti da svaki Arduino program mora imati i setup() i loop() funkciju pa makar njihova tela bila prazna!

Svaki blok mora se nalaziti između vitičastih zagrada, obratite pažnju, pogotovo ako se u bloku nalazi još blokova i mnogo funkcija, da uvek zatvorite blok jer ako ne bude zatvoren javiće se greška u kompajlovanju!

 

Sintaksa i implementacija funkcija setup() i loop():

setup(){

…telo funkcije koje

se izvršava samo jednom…

}

loop(){

…telo funkcije koje

se izvršava bez prestanka…

}

Ispred imena funkcija nailazimo na „void“. To je tip promenljive. O tome ćemo kasnije. Takođe ovo je osnovna upotreba ovih funkcija, u nekom od narednih tutorijala posvetićemo više vremena funkcijama, vrednostima koje funkcije mogu da vrate ili prime itd…

2.2. Funkcija pinMode()

U ovom primeru unutar tela setup() funkcije nalazi se naredba pinMode(13,OUTPUT); kojom govorimo Arduinu da želimo da nam pin 13 bude izlazni pin, dakle želimo da preko tog pina šaljemo neki signal. Isto tako mogli smo reći pinMode(2,OUTPUT); gde ova naredba ima isto značenje samo se odnosi na pin2.

Umesto „OUTPUT“ može da stoji i „INPUT“ kada želimo da primamo neki signal na tom pinu. Definisanje ulaznih tj. input pinova nije neophodno jer oni automatski rade u input režimu ali kako bismo izbegli greške najbolje je sve to lepo definisati na početku programa.

Recimo, želimo da nam pin 2 služi da pali i gasi LED diodu, a pin 3 da bude priključen za taster i da očitava podatke kada je taster pritisnut a kada nije, tada bismo napisali

void setup(){

pinMode(2,OUTPUT);  //pin 2 definišemo kao izlazni pin

pinMode(3,INPUT);  //pin 3 definišemo kao ulazni pin

}

 

Sintaksa ove funkcije je:

pinMode(pin,REŽIM);

 

Na mestu “pin” treba upisati broj pina kao u primeru iznad, ili ime pina, što ćemo uraditi u primeru ispod. Na mestu “REŽIM” treba upisati velikim slovima OUTPUT ili INPUT u zavisnosti od toga da li želimo da pin bude ulazni ili izlazni

 

int LEDpin = 2;

pinMode(LEDpin,OUTPUT);

 

Prva naredba defineše promenljivu LEDpin koja ima vrednost 2. Tom naredbom smo dali ime izlaznom pinu, jer to ime sada ima istu vrednost kao i broj 2 i zbog toga smo u funkciji pinMode() napisali na mestu prvog parametra LEDpin jer je to isto kao da smo uneli broj 2.

 

Ovo je mnogo bolji i praktičniji način definisanja pinova jer kada budemo pisali neki duži program i ako na primer hoćemo da promenimo da ne bude pin 2 nego pin 3 onda treba samo da skrolujemo na početak koda i izmenimo iz int LEDpin = 2; u int LEDpin = 3;

Da nismo koristili ovaj način definisanja pina onda bismo morali da tražimo po celom kodu gde smo dve upisali 2 i ispravljamo na 3, što nam troši mnogo vremena i ni malo nije praktično, osim za male programe gde možemo koristiti brojeve umesto imena.

Zapitali ste se čemu znak „;“? Taj znak se koristi na kraju svake naredbe, kako bi kompajler znao da je tu kraj naredbe i da narednu naredbu posmatra odvojeno. Ovaj „Semicolon“ znak se ne koristi na kraju funkcije kada koristimo vitičastu zagradu „}„!

2.3 Funkcija digitalWrite()

Idemo dalje. U telu funkcije loop() nailazimo na funkciju digitalWrite(13,HIGH); njom dajemo instrukciju da Arduino šalje digitalni signal na pin 13, HIGH znači da aktivira taj pin, tj. da na tom pinu bude signal od 5V.

U našem Blink primeru ova naredba pali pin 13 tj. LED diodu koja je ugrađena na Arduinov pin 13. U slučaju da smo povezali LED diodu na pin 2 onda bismo napisali digitalWrite(2,HIGH); ili ako smo nazvali pin kao u gornjem primeru LEDpin onda bismo napisali digitalWrite(LEDpin,HIGH);

Ako želimo da ugasimo taj pin onda ćemo napisati digitalWrite(LEDpin,LOW); kao što vidimo u Blink programu da se ispod gasi pin, samo što umesto LEDpin piše 13 jer taj pin nije prethodno nazvan tj. definisan.

 

Sintaksa ove funkcije je:

digitalWrite(pin,STANJE);

 

Gde „pin“ predstavlja broj ili ime pina, a „STANJE predstavlja aktivno i neaktivno stanje tj. HIGH ili LOW.

2.4. Funkcija delay()

Izmedju funkcija digitalWrite() nalaze se funkcije delay(). Ona predstavlja „čekanje“ u programu ili kako sam naziv kaže „zakašnjenje“. Unutar zagrada upisujemo vrednost u milisekundama, što znači da u Blink primeru vrednost od 1000 milisekunde predstavlja čekanje od 1 sekunde.

Gledajući ceo blok funkcije loop() možemo zaključiti da se prvom naredbom pali LED dioda, pravi pauza 1 sekundu, a potom LED dioda gasi, nakon toga opet pauza od 1 sekunde. Pošto smo rekli da se loop() funkcija izvršava u nedogled primećujemo da će se lampica paliti i gasiti na svakih 1 sekund sve dok ne ugasimo Arduino ili dok ne učitamo drugi program.

 

Takođe mogli smo napisati i:

 

int vreme = 1000;

delay(vreme);

 

Gde funkcija delay() uzima vrednost promenljive „vreme“ koja ima vrednost 1000, što znači da će imati istu vrednost kao i u našem Blink primeru.

Da smo hteli da „čekanje“ ne traje 1 sekundu nego 1,5 sekunde, onda bismo napisali:

digitalWrite(13,HIGH);

delay(1500);

digitalWrite(13,LOW);

delay(1500);

Jednostavno je, zar ne? 🙂

 

Sintaksa ove funkcije je:

delay(vrednost);

 

Vrednost je neka vrednost uneta brojem ili imenom, koja predstavlja vreme čekanja programa u milisekundama.


Ovo je bila kratka analiza Blink programa i objašnjenje šta predstavljaju naredbe unutar njega. U nastavku objašnjavamo električnu šemu a nakon toga ćemo napisati svoj prvi program kao što je ovaj Blink, samo malo napredniji 😉 Usputno dok budemo pisali kod pojasnićemo još neke pojmove kao na primer tipove promenljivih, deklaraciju i definisanje njih…itd

PročitajteNASTAVAK!

 

Autor:

Aleksa Ristić

Student, bloger, veliki entuzijast i kreativac

Advertisements

One thought on “Arduino učionica: 1. -BLINK program 2.deo!

  1. Повратни пинг: 1. -BLINK program 1.deo! – Arduinisti

Оставите одговор

Попуните детаље испод или притисните на иконицу да бисте се пријавили:

WordPress.com лого

Коментаришет користећи свој WordPress.com налог. Одјавите се / Промени )

Слика на Твитеру

Коментаришет користећи свој Twitter налог. Одјавите се / Промени )

Фејсбукова фотографија

Коментаришет користећи свој Facebook налог. Одјавите се / Промени )

Google+ photo

Коментаришет користећи свој Google+ налог. Одјавите се / Промени )

Повезивање са %s