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

Nastavljamo sa našim Blink programom!


U prethodnom postu rekli smo nekoliko reči o hardveru, tj. elektronici koju koristimo, kao i o promenljivim. Tada sam pričao o vrlo jednostavnom primeru Blink programa te sam odlučio da stvari malo zagorčam! 🙂

U ovom delu ćemo (sada kada znamo osnovne funkcije digitalWrite(), delay(), pinMode(), kao i tipove promenljivih) napisati i analizirati malo napredniji Blink program. Naime koristićemo naše funkcije u programu, koje ćemo sami definisati…


Evo našeg novog koda:

void brzo_paljenje();
void sporo_paljenje();

int ledPin = 2;
int vremeBrzo = 100;
int vremeSporo = 300;

void setup(){
  pinMode(ledPin,OUTPUT);
}

void loop(){
  brzo_paljenje();
  sporo_paljenje();
}

void brzo_paljenje(){
  for(int i = 0; i < 20; i++){
    digitalWrite(ledPin,HIGH);
    delay(vremeBrzo);
    digitalWrite(ledPin,LOW);
    delay(vremeBrzo);
  }
}

void sporo_paljenje(){
  for(int i = 0; i < 10; i++){
    digitalWrite(ledPin,HIGH);
    delay(vremeSporo);
    digitalWrite(ledPin,LOW);
    delay(vremeSporo);
  }
}

Prvo što nam zapada u oči je:

void brzo_paljenje();

void sporo_paljenje();

Nije reč ni o čemu strašnom. 🙂 Reč je o dve funkcije koje smo deklarisali.

3.2.2. Funkcije

Funkcija, kao što smo ranije rekli, predstavlja uređeni blok naredbi koje će program izvršiti, i na kraju (može a i ne mora) da vrati neki rezultat u program kao rešenje. Do sada smo se susreli sa nezaobilaznim funkcijama- a to su setup() i loop(), kao i sa digitalWrite() i pinMode() i delay(). Razlika između njih i brzo_paljenje() i sporo_paljenje() je u tome što smo ove dve mi sami napravili, dok su ove ostale predefinisane, ugrađene u standardne Arduino biblioteke. Dakle možemo sami praviti funkcije.

Pisati program svrstan u veći broj funkcija olakšava preglednost programa, lakše shvatanje koda kao i ispravljanje eventualnih greški u pisanju. Kao prvo, ako želimo koristiti, tj. napraviti našu funkciju prvo treba da smislimo za kakvu operaciju nam je potrebna. U našem slučaju ove 2 funkcije koje smo deklarisali treba da nam služe da jedna izvršava brzo paljenje i gašenje LED,  a druga sporo paljenje i gašenje LED.

Pravljenje i koriščenje funkcija

Deklarisanje

Kao i kod promenljivih i funkcije imaju tip. Taj tip moramo deklarisati na početku programa i on predstavlja tip promenljive koju će funkcija vratiti u program, dakle povratni tip. Naše funkcije ne vraćaju nikakve promenljive u program te smo zato kao tip funkcije odredili void tip, koji se koristi u ovakvim situacijama kada nam tip nije potreban, a ipak ga moramo deklarisati kako bi funkcija normalno radila. Osim tipa, funkciji treba odrediti ime.

Za deklarisanje, takođe kao kod promenljivih, moramo funkciju nekako nazvati. Naše funkcije se zovu brzo_paljenje i sporo_paljenje.

Sigurno ste primetili, da za razliku od promenljivih funkcije imaju nakon imena obične zagrade (). U te zagrade se smeštaju argumenti, ili pri definisanju, lista parametara. O tome ćemo kasnije, jer nam trenutno nije potrebno za ovaj program.

Definisanje (inicijalizovanje)

Da se podsetimo razlike između „deklarisanja“ i „definisanja“. Deklaracijom se određuju tip i ime neke funkcije ili promenljive, a definisanjem dodeljujemo neku vrednost promenljivoj, ili u slučaju funkcije, dodeljujemo joj blok naredbi koje treba da se u njoj izvrše.

Sintaksa funkcije:

povratni_tip ime_funkcije (lista_parametara){

telo funkcije (blok naredbi)

}

Sada iz datog koda na početku teksta možete videti da smo na početku deklarisali funkciju, nakon toga ispisali 2 nezaobilazne funkcije programa (setup() i loop()), a nakon svega toga definisali naše funkcije.

Dakle redosled je sledeći:

1.deklarisanje naših funkcija (dodeliti im tip, ime i argumente ukoliko ih imaju i nakon toga napisati znak za kraj naredbe ; )

2.pozivanje naših funkcija ( pozivanje naših funkcija vrši se unutar glavne funkcije loop(), ovo ne mora uvek biti slučaj, nakon pozivanja funkcije, program skače u tu funkciju i uzvršava instrukcije unutar njenog tela)

3.definisanje naših funkcija (upisivanje bloka naredbi koje funkcija treba izvršiti)

Ovaj redosled je obavezan jer da nismo deklarisali funkcije na početku, kompajler bi izbacio grešku u telu funkcije loop() u kojoj se poziva naša funkcija, kako ona ne postoji, jer je nismo deklarisali na početku, kao što to radimo sa promenljivim. Takođe ste se možda zapitali zašto odmah na početku nismo definisali naše funkcije, tj. napisali njihove blokove naredbi. To nismo uradili jer nije ispravno. Takođe, u slučajevima da ovu praksu kasnije koristite za C programiranje neki kompajler vam u tom slučaju može izbaciti grešku u prevođenju, tako da bolje se pridržavajte mojih saveta za redosled deklarisanja i definisanja funkcija.

U funkcijama smo napisali blokove naredbi. U njima se nalaze funkcije koje smo i ranije koristili (delay, digitalWrite), taj deo bi trebalo da vam je jasan, dakle digitalWrite() pali i gasi određeni pin, delay() predstavlja određeno čekanje iliti zakašnjenje, a for…to je petlja. 🙂

3.2.3. Petlje

Postoje:

petlje ponavljanja ( while, do while i for),

i petlje grananja (if i switch).

U ovom tekstu ćemo samo reći nešto o petlji ponavljanja for koju koristimo u našem programu.

FOR

Sintaksa petlje for:

for (izraz 1; uslov; izraz 2)

{

telo petlje

}

Na mestima izraz 1 i izraz 2 mogu stajati bilo koje naredbe. U našem slučaju to su naredba „i = 0“ i na drugom mestu naredba „i++“. Na mestu uslova imamo „i < 10“, a svi parametri su odvojeni znakom ; . Taj uslov predstavlja uslov koji je zadat i dokle god je on tačan izvršavaće se telo petlje.

Naša for petlja predstavlja brojač koji broji -u prvom slučaju do 10, a u drugom do 20, ali posmatrajmo za primer slučaj kada broji do 10, tj. drugu for petlju. Pojasnimo.

Na mestu „izraz 1“ definisali smo novu promenljivu „int i = 0“. Dakle celobrojnu koja ima vrednost 0. Nakon definisanja, proverava se uslov petlje „i < 10“. U tom trenutku, kao što smo definisali, „i“ ima vrednost „0“, dakle uslov glasi „0  < 10“, što je tačno. Kada je uslov tačan dolazimo do trećeg člana liste parametra tj. „izraz 2“. Taj izraz glasi „i++“, što predstavlja skraćenicu izraza „i = i + 1“. Taj izraz, skraćeni, zove se inkrementiranje (povećavanje vrednosti za 1 u odnosu na prethodnu vrednost), i to postfiksnom notacijom jer smo znakove inkrementiranja „++“ napisali nakon imena promenljive.

Nakon što je uslov ispunjen, blok petlje počinje da se izvršava. Nakon što se izvrši ponovo opet se proverava uslov koji će ovaj put glasiti „1 < 10“. Sada je „1“ jer smo uvećali početnu vrednost promenljive „i“. Naredni put će biti „2 < 10“, zatim „3 < 10″… i tako sve dok ne dođemo do „10 < 10“ što je netačno. Dakle kada dođe do ovog slučaja petlja for se neće ponovo pokrenuti već će program nastaviti tamo dokle je stao nakon pozivanja petlje for.

Kada pogledamo, telo for petlje se izvršilo za i = 0 do i = 9, dakle 10 puta se izvršilo. U telu smo zadali funkcije koje predstavljaju treptanje, tj. paljenje i gašenje LED, što znači da smo ovom for petljom upalili i ugasili LED tačno 10 puta.

Ovaj brojač ima široku primenu, i naravno, na mesto izraza 1 i 2, i uslova, možemo staviti šta god nam zatreba, praviti mnogo kompleksnije brojače itd… o tome ćemo više u nekom drugom tekstu.

Deklarisanje globalnih i lokalnih

Lokalne promenljive su promenljive koje su deklarisane/definisane unutar neke funkcije ili petlje, i ona se u tom slučaju može koristiti samo unutar te funkcije ili petlje.

Globalne promenljive se deklarišu/definišu na početku programa, van svih funkcija i petlji, kako bi se mogla ta promenljiva koristiti u svakoj funkciji ili petlji u programu.

Kada pogledamo naš program uočavamo da imamo 3 globalne promenljive i 2 lokalne. Možete li uočiti te 2 lokalne? Ne? 🙂

Te 2 lokalne promenljive se nalaze u petljama for. Kao prvi parametar u petlji definisali smo celobrojnu promenljivu „i“, koja je aktivna samo unutar te for petlje. Takođe, u drugoj for petlji imamo celobrojnu promenljivu „i“, ali nije reč o istoj promenljivoj, jer su obe lokalne i aktivne su samo za „lokalne“ funkcije tj. petlje u kojima su deklarisane/definisane.

Umesto toga mogli smo zajedno sa ove 3 globalne na početku definisali i ove 2 promenljive koje su nam potrebne za brojač. Ali u tom slučaju one ne bi mogle isto da se zovu. U tom slučaju i one bi bile globalne promenljive i mogli bismo u bilo kom delu programa da ih koristimo i da manipulišemo njihovim vrednostima.

Vratite se na početak teksta i posmatrajte kod programa, da li vam je sada kod razumljiv? Nadam se da jeste 🙂

Povežite komponente kao što je rečeno u prethodnom tekstu, i to je to, prvi tutorijal je gotov!


Do sledećeg teksta eksperimentišite, menjajte vrednosti, imena, redosled…pokušajte napraviti nešto komplikovanije…

Pozdrav!

Autor:

Aleksa Ristić

Student, bloger, veliki entuzijast i kreativac

Advertisements

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

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

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

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

WordPress.com лого

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

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

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

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

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

Google+ photo

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

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