Arduino učionica: 2. -SVETLEĆI KRUG 1. deo!

Nastavljamo sa Arduino tutorijalima iz kategorije „Arduino učionica“ u kojoj možete naučiti kako da radite sa Arduinom i kako da napravite zanimljive i korisne projekte! O projektima možete pročitati u kategoriji Arduino radionica.


U ovom tutorijalu napravićemo svetleći krug koji će da menja brzinu svetljenja…uostalom videćete i sami o čemu pričam 🙂

Potrebno vam je:

bilo koji Arduino
6 LED dioda (po mogućstvu da budu iste boje)
8 jumper žica (jumper wires – kratkospojnici)
6 otpornika 330Ω (ili 220)

Povežite kolo kao na slici ispod.

sema122

Obratite pažnju na raspored nožica LED da ne okrenete suprotno. Nadam se da nisu potrebna dodatna pojašnjenja jer sam u prethodnim tekstovima objasnio sve što je potrebno, ako ipak ima nejasnoća pročitajte ponovo prethodni tutorijal, a ako ni to ne pomogne kontaktirajte me za pomoć.

Naš program će izgledati ovako:


int led1 = 2;
int led2 = 3;
int led3 = 4;
int led4 = 5;
int led5 = 6;
int led6 = 7;

int vreme;

void okretanje_nalevo();
void okretanje_nadesno();

void ubrzavanje_nalevo();
void usporavanje_nalevo();

void ubrzavanje_nadesno();
void usporavanje_nadesno();

void setup(){

  pinMode(led1,OUTPUT);
  pinMode(led2,OUTPUT);
  pinMode(led3,OUTPUT);
  pinMode(led4,OUTPUT);
  pinMode(led5,OUTPUT);
  pinMode(led6,OUTPUT);
}

void loop(){
  okretanje_nalevo();
  okretanje_nadesno();
}

void okretanje_nalevo(){
  ubrzavanje_nalevo();
  usporavanje_nalevo();
}

void okretanje_nadesno(){
  usporavanje_nadesno();
  ubrzavanje_nadesno();
}

void ubrzavanje_nalevo(){
  for (vreme = 100; vreme > 0; vreme=vreme-20){

    for (int i = 2; i < 8; i++){

      digitalWrite(i,HIGH);
      delay(vreme);
      digitalWrite(i,LOW);
      delay(vreme);
    }
  }
}

void usporavanje_nalevo(){
  for (vreme = 0; vreme < 100; vreme=vreme+20){

    for (int i = 2; i < 8; i++){

      digitalWrite(i,HIGH);
      delay(vreme);
      digitalWrite(i,LOW);
      delay(vreme);
    }
  }
}

void ubrzavanje_nadesno(){
  for (vreme = 100; vreme > 0; vreme=vreme-20){

    for (int i = 7; i > 1; i--){

      digitalWrite(i,HIGH);
      delay(vreme);
      digitalWrite(i,LOW);
      delay(vreme);
    }
  }
}

void usporavanje_nadesno(){
  for (vreme = 0; vreme < 100; vreme=vreme+20){

    for (int i = 7; i > 1; i--){

      digitalWrite(i,HIGH);
      delay(vreme);
      digitalWrite(i,LOW);
      delay(vreme);
    }
  }
}


Kao što sam rekao u nekom od prethodnih postova, kod ćemo pisati tako da bude svrstan u više funkcija, pa smo tako i uradili. Napravili smo naših 6 funkcija.

Definisanje promenljivih koje se odnose na LED nam nisu neophodne, ali ja sam ih definisao kako bih kasnije znao sa kojim pinovima sam povezivao diode.

Računajući da ne moram da objašnjavam sve iz početka preći ću odmah na naše funkcije. U funkciji okretanje_nalevo nalaze se još 2 naše funkcije i to ubrzavanje_nalevousporavanje_nalevo.

U funkciji ubrzavanje_nalevo nalaze se 2 brojača, jedan za vreme tj. delay a drugi za pin na kojem se nalazi dioda. U unutrašnjem brojaču, odnosno brojaču za diode palimo i gasimo jednu po jednu diodu sa razmakom vremena iz spoljašnjeg brojača tj. brojača za vreme. Dakle, naše LED će da se upale jedna po jedna, redosledom od 2 do 7, kada se svaka upali i ugasi, promenljiva „vreme“ iz spoljašnjeg brojača se dekrementuje za 20. što znači da kada se napravi jedan krug nakon toga se vreme skrati, što, kao što smo rekli, predstavlja ubrzavanje okretanja, tj. redosleda svetljenja LED. I onda možemo zaključiti da će se u celoj funkciji ubrzavanje_nalevo izvršiti 6 obrtanja. Kada je vreme 100, pa kada je 80 (100-20), pa 60, pa 40, pa 20 i na kraju kada je vreme 0.

Nakon što se cela funkcija ubrzavanje_nalevo izvršila na red dolazi funkcija usporavanje_nalevo. Princip je isti, s tim što se umesto odbrojavanja brojača tj. dekrementovanja sada nalazi brojanje tj. inkrementovanje. U unutrašnjem brojaču sve je isto, dakle pali i gasi svaku diodu pojedinačno istim redosledom, a u spoljašnjem, tj. brojaču za vreme, promenljiva „vreme“ se inkrementuje za 20. Takođe ćemo imati 6 obrtanja. Kada je vreme 0, pa 20, pa 40, pa 60, pa 80 i na kraju kada je vreme 100.

Sada je red na funkciju okretanje_nadesno. U njoj se nalaze naše funkcije usporavanje_nadesno i ubrzavanje_nadesno. Princip je isti kao i za prethodne funkcije, s tim što ćemo ovaj put promeniti unutrašnji brojač, tj. brojač za LED. Umesto brojanja on će da odbrojava, dekrementovanjem, redosledom od 7 do 2. Dakle, ono što praktično radi ovaj brojač je pali i gasi svaku diodu pojedinačno ali obrnutim redosledom.

Za spoljašnji brojač priča je ista kao i u funkciji okretanje_nalevo. Kada usporava onda broji, a kada ubrzava onda odbrojava.

Na videu ispod može se videti kako bi trebalo da izgleda izvršavanje ovog programa.


U odnosu na prethodni BLINK program ovo je veliki skok. Kako biste shvatili sve u srž potrebno je eksperimentisati. Pravite sami brojače u programu, menjajte vrednosti, rasporede pinova, rasporede funkcija, dodajte još 2 diode u krug, sklonite 2 diode iz kruga (napravite kvadrat), itd, itd, mogućnosti su neograničene, što je i suština svega ovoga. 🙂

U narednom delu ubacićemo i ulazne vrednosti u program pa će to još više proširiti mogućnosti eksperimentisanja.

Do sledećeg teksta budite kreativni, pozdrav!

Autor:

Aleksa Ristić

Student, bloger, veliki entuzijast i kreativac

Advertisements

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

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

WordPress.com лого

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

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

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

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

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

Google+ photo

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

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