Utripanje dveh LED diod

Razvojna plošča Intel Galileo temelji na Intelovi arhitekturi in je združljiva s platformo Arduino. Z uporabo razvojnih orodij Arduino in vmesnika za razvoj programske opreme lahko umetniki, razvijalci in drugi navdušenci na preprostejši način ustvarjajo interaktivne predmete ali okolja.

Slika 1: Razvojna plošča Intel Galileo.

Slika 1: Razvojna plošča Intel Galileo.


Plošča Intel Galileo vključuje sistem na čipu Intel Quark SoC X1000, prvi izdelek iz družine nizkoenergijskih enojedrnih procesorjev Intel Quark. Sistem na čipu Quark SoC X1000, ki je zasnovan na Irskem, je 32-bitni, enojedrni, enonitni procesor hitrosti do 400 MHz, združljiv z naborom ukazov Pentium (ISA). Intelova razvojna plošča zagotavlja uporabo in zmogljivosti, ki segajo prek ekosistema Arduino, ter je opremljena s številnimi standardnimi vhodno-izhodnimi vmesniki, kot so ACPI, PCI Express*, 10/100Mb Ethernet, SD, vhodi USB 2.0 in EHCI/OHCI USB, UART visoke hitrosti, serijski vmesnik RS-232, pomnilnik 8MB NOR ter vhod JTAG za enostavno razhroščevanje.

Razvojna plošča Intel Galileo tako predstavlja odlično orodje za hitro oblikovanje preprostih interaktivnih prototipov, kot so zasloni LED, ki se odzivajo na družabne medije, kot tudi za zahtevnejše projekte od avtomatizacije domačih pripomočkov do gradnje velikih robotov, ki jih je mogoče upravljati prek pametnih telefonov. 

Za dodatne informacije obiščite naslov http://arduino.cc/en/ArduinoCertified/IntelGalileo.

Utripanje dveh LED diod:

Za izdelavo vaje, bomo najprej pogledali skico priključitve posameznih elementov na razvojno ploščo Intel Galileo:

Slika 2: Prikaz povezave elementov na razvojno ploščo Intel Galileo.

Zaporedno z vsako LED diodo povežemo upor vrednosti 470 ohmov. Digitalna izhoda 4 in 5 imata v času, ko LED dioda sveti napetost 5 V, kar je za LED diodo preveč. Hkrati pa moramo paziti, da izhodnih priključkov razvojne plošče Intel Galileo ne preobremenimo.

Programsko okolje in glavne lastnosti:

Programiramo v okolju Galileo Arduino IDE (download). Mi bomo izbrali operacijski sistem Windows, program naložimo in obvezno upoštevamo 5 potrebnih korakov (Galileo Getting Started - Windows). Programski jezik ima lastnosti programskega jezika C++, reference pa najdemo na tej povezavi.

Da ne razlagamo na dolgo in široko je najbolje, da se lotimo našega prvega primera, kjer bomo sproti spoznavali posamezne lastnosti programskega okolja in jezika.

Z dvoklikom na ikono okolja se odpre okno, kjer pišemo program.

 //Program za utripanje dveh LED diod:

 /*

 Opis kode:

 Program vklopi LED1 za 1 sekundo, v tem času je LED2 izklopljena. Nato LED diodi preklopita za 1

 sekundo. Postopek se ponavlja.

 Avtor: Milan Ivič

 Datum: september 2014. 

 */

 //Deklariranje spremenljivk tipa int:

 int LED1 = 4;         //LED1 je priključena na pin 4

 int LED2 = 5;        //LED2 je priključena na pin 5

 //Rutina (funkcija) void setup() se izvede 1-krat, ko zaženemo program ali če pritisnemo na tipko Reset.

 void setup()

 {

   //Inicializacija digitalnih pinov kot izhod:

   pinMode(LED1, OUTPUT);       //Pin 4, kamor je priključena LED1 je izhod

   pinMode(LED2, OUTPUT);       //Pin 5, kamor je priključena LED2 je izhod

 } 

  //Zanka (loop) se neprestano izvaja:

 void loop()

 {

  digitalWrite(LED1, HIGH);         //Vklop LED diode 1

  digitalWrite(LED2, LOW);        //Izklop LED diode 2

  delay(1000);                                //Pavza 1 sekundo

  digitalWrite(LED1, LOW);        //Izklop LED diode 1

  digitalWrite(LED2, HIGH);         //Vklop LED diode 2

  delay(1000);                                //Pavza 1 sekundo0);

 }  

Blok komentarja se začne z /* in konča z */ in lahko zavzema več vrstic. Vrstica komentarja pa se začne in konča v isti vrstici z dvema poševnicama //. Komentarji nimajo nobenega vpliva na izvajanje programa, programerju služijo za kratke opise programa oziroma posameznih delov programa.

Deklarirali smo dve spremenljivki, prvo z imenom LED1, drugo z imenom LED2. Pri imenovanju spremenljivk moramo upoštevati določena pravila. Ime spremenljivke se mora začeti s črko ameriške abecede (a-z) (A-Z) ali podvezajem (_). V imenu lahko nastopajo poleg teh tudi številke, vendar se ime ne sme začeti s številko. Uporabimo lahko poljubno ime, ki sledi tem pravilom in ni identično s katerokoli ključno besedo ali že uporabljenim imenom v določenem dosegu.

Obe spremelnljivki sta tipa int (integer) kar pomeni, da lahko v tako spremenljivko shranjujemo (spremenljivki dodelimo) cela števila.

Funkcija void setup() se začne z zavitim oklepajem ({) za () in konča s pripadajočim zavitim zaklepajem (}). Kar pišemo vmes spada k tej funkciji. Izvede se le enkrat, so zaženemo program ali če pritisnemo na tipko reset. V tej funkciji smo določili vlogo priključka (pina) 4 in priključka (pina) 5 z operatorjem pinMode in pripadajočima parametroma (LED1, OUTPUT) oziroma (LED2, OUTPUT). Oba morata biti izhodna (OUTPUT), saj bo procesor na podlagi programa na ta dva pina pošiljal napetost enkrat 0 V, drugič 5 V.

Zanka void loop() se izvaja neprestano. Začne se z zavitim oklepajem ({) za () in konča s pripadajočim zavitim zaklepajem (}). Kar pišemo vmes je naš program.

Z operatorjem digitalWrite in parametrom (LED1, HIGH) določimo, da procesor na pin, kamor je priključena LED1, pošlje napetost 5 V. Z operatorjem digitalWrite in parametrom (LED2, LOW) pa določimo, da procesor na pin, kamor je priključena LED2, pošlje napetost 0 V.

Z operatorjem delay in parametrom (1000) določimo, da se izvajanje programa ustavi za čas 1 sekunde. Število v parametru (kar je med navadnima oklepajema) predstavlja ms (milisekunde). 1000 ms = 1 s. Po tej zakasnitvi program določa, da LED diodi preklopita, LED1 se izklopi, LED2 pa vklopi. Takšno stanje traja 1 sekundo. Nato se vse skupaj ponavlja.

Paziti moramo, da na koncu vsakega stavka napišemo podpičje (;).

Ko smo program napisali, ga preverimo s pritiskom na gumb za preverjanje v orodni vrstici:

Slika 3: Gumb v orodni vrstici za preverjanje napisanega programa.

Pri pisanju programa smo lahko nehote napisali kakšno slovnično napako, zamenjali veliko črko z malo, pozabili za vsakim stavkom napisati podpičje,... V takšnem primeru nas okolje pri preverjanju programa obvesti. Šele ko je preverjanje uspešno, program naložimo v procesor razvojne plošče Intel Galileo.

Slika 3: Gumb v orodni vrstici za nalaganje programa.

Postopek:

      4. Izberemo našo razvojno ploščo: menijska vrstica: Orodja >plošča > Intel Galileo.

      5. Program naložimo.

//Program za utripanje dveh LED diod z uporabo stavka if:

/*

 Opis kode:

 Program vklopi LED1 za 1 sekundo, v tem času je LED2 izklopljena. Nato LED diodi preklopita za 1

 sekundo. Postopek se ponavlja.

 Avtor: Milan Ivič

Datum: september 2014.

 */

 //Deklariranje spremenljivk tipa int:

 int LED1 = 4;       //LED1 je priključena na pin 4

 int LED2 = 5;      //LED2 je priključena na pin 5

 int stevec = 0;      //Deklariranje spremenljivke stevec in inicializacija

 //Rutina (funkcija) void setup() se izvede 1-krat, ko zaženemo program ali če pritisnemo na tipko Reset.

 void setup()

 {

   //Inicializacija digitalnih pinov kot izhod:

   pinMode(LED1, OUTPUT);   //Pin 4, kamor je priključena LED1 je izhod

   pinMode(LED2, OUTPUT);   //Pin 5, kamor je priključena LED2 je izhod

 } 

 //Zanka (loop) se neprestano izvaja:

 void loop()

 {

    if (stevec % 2 == 1)        //Vrednost stevca delimo z 2. Ali je ostanek deljenja enak 1?

        { 

            digitalWrite(LED1, HIGH);         //Vklop LED diode 1

            digitalWrite(LED2, LOW);        //Izklop LED diode 2

            delay(1000);                              //Pavza 1 sekundo

        }

     if (stevec % 2 == 0)        //Vrednost stevca delimo z 2. Ali je ostanek deljenja enak 0?

       {            

            digitalWrite(LED1, LOW);     //Vklop LED diode 1

            digitalWrite(LED2, HIGH);     //Izklop LED diode 2

            delay(1000);                        //Pavza 1 sekundo

        }

    stevec = stevec + 1;    //Spremenljivka stevec se ob vsakem prehodu zanke poveča za 1

 /*

 Operator % prikaže ostanek deljenja vrednosti spremenljivke stevec z 2:

 1 % 2 = 1

 2 % 2 = 0

 3 % 2 = 1

 4 % 2 = 0

 5 % 2 = 1

 6 % 2 = 0

 itd

 */

}

S stavkom if preverjamo ali je pogoj (napisan med navadnima oklepajema) resničen ali neresničen. Če je pogoj resničen, se izvede blok ukazov sicer pa ne.

Slika 4: Prikaz delovanja stavka if.

Blok ukazov je vse, kar je ujeto med ujemajoča se zavitima oklepajema {}.

Slika 5: if stavek, pogoj in blok ukazov.

Vrednost spremenljivke stevec je na začetku eneka 0. Ob vsakokratnem prehodu zanke (loop) se vrednost spremenljivke stevec poveča za 1. Z if stavkoma preverjamo ostanek deljenja vrednosti spremenljivke stevec z 2. Če je ostanek 1 (npr. 3/2 = 1, ostane 1), se vklopi LED1 in izklopi LED2. Če pa je ostanek 0 (npr. 2/2 = 1, ostane 0), se LED1 izklopi in LED 2 vklopi. Z operatorjem delay in parametrom 1000 določimo sekundno zakasnitev med preklopom LED diod.

//Program za utripanje dveh LED diod z uporabo stavka if else:

/*

 Opis kode:

 Program vklopi LED1 za 1 sekundo, v tem času je LED2 izklopljena. Nato LED diodi preklopita za 1

 sekundo. Postopek se ponavlja.

 Avtor: Milan Ivič

 Datum: september 2014.

 */


 //Deklariranje spremenljivk tipa int:

 int LED1 = 4;        //LED1 je priključena na pin 4

 int LED2 = 5;        //LED2 je priključena na pin 5

 int stevec = 0;      //Deklariranje spremenljivke stevec in inicializacija


  //Rutina (funkcija) void setup() se izvede 1-krat, ko zaženemo program ali če pritisnemo na tipko Reset.


 void setup()

 {

   //Inicializacija digitalnih pinov kot izhod:

   pinMode(LED1, OUTPUT);       //Pin 4, kamor je priključena LED1 je izhod

   pinMode(LED2, OUTPUT);       //Pin 5, kamor je priključena LED2 je izhod

 } 


   //Zanka (loop) se neprestano izvaja:


 void loop()

 {

    if (stevec % 2 == 1)        //Vrednost stevca delimo z 2. Ali je ostanek deljenja enak 1?

       {

               //Ja, ostanek deljanja je enak 1, izvedi ta blok ukazov.

            digitalWrite(LED1, HIGH);     //Vklop LED diode 1

            digitalWrite(LED2, LOW);      //Izklop LED diode 2

            delay(1000);                  //Pavza 1 sekundo

        }


     else

        {

              //Ostanek deljenja ni enak 1. Izvedi ta blok ukazov.

            digitalWrite(LED1, LOW);      //Vklop LED diode 1

            digitalWrite(LED2, HIGH);     //Izklop LED diode 2

            delay(1000);                  //Pavza 1 sekundo

        }

    stevec = stevec + 1;    //Spremenljivka stevec se ob vsakem prehodu zanke poveča za 1


 /*

 Operator % prikaže ostanek deljenja vrednosti spremenljivke stevec z 2:

 1 % 2 = 1

 2 % 2 = 0

 3 % 2 = 1

 4 % 2 = 0

 5 % 2 = 1

 6 % 2 = 0

 itd

 */

}

Če nas zanima ali je pogoj resničen in ali je neresničen uporabljamo poleg if tudi else. V odvisnosti od izpolnitve postavljenega pogoja, se izvede eden od dveh med seboj neodvisnih blokov.

Slika 6: Prikaz delovanja stavka if-else.