Arduino IDE: Varijable

Što je varijabla?

 
Varijabla je ime za neku lokaciju u memoriji, a ta lokacija sadrži vrijednost s kojom radimo. Osnovni razlog zašto ih koristimo je što mi i računala ne pričamo istim jezikom. Digitalni elektronički krugovi s logic gateovima (vrijednosti 1 i 0), interno, koriste binarni sustav. Nama bi iznimno komplicirano bilo komunicirati pomoću binarnog sustava, stoga koristimo compiler iliti prevoditelj koji pretvara naš jezik u binarni. U Arduino IDE-u se također nalazi jedan compiler koji je posebno kreiran za AVR mikrokontrolere(naziva avr-gcc), a u ovom tutorialu ćemo se pozabaviti varijablama koje koristimo prilikom pisanja koda za Croduino i druge Arduino kompatibilne pločice.
 
Online binarni konverter
 
Prilikom programiranja Croduina koristimo ih kako bi dali ime i spremili neku vrijednost, npr. očitanja senzora, za daljnje korištenje u programu. Varijabla ima svoj tip, ime i vrijednost. Pogledajmo primjer:

int led = 13;

int je tip varijable, led je ime varijable, a 13 je vrijednost varijable. Ovaj dio se zove deklaracija ili zadavanje varijable, više o tome u sljedećem odlomku.
 
Osim toga varijable imaju i svoj djelokrug (scope) pa ih djelimo na lokalne i globalne. Globalne varijable su vidljive u svakoj funkciji programskog koda, dok su lokalne vidljive samo u funkciji u kojoj su deklarirane.

// na sve varijable deklirane u ovom dijelu Arduino IDE
// gleda kao globalne

// "led" je globalna varijabla
int led = 13;

void setup() {
// na sve varijable deklinirane unutar neke funkcije Arduino IDE
// gleda kao lokalne, i mogu se koristiti samo unutar te funkcije

// "broj" je lokalna varijabla 
int broj = 3;
  
  // varijablu led možemo pozvati u bilo kojoj funkciji
  pinMode(led,OUTPUT);
}

void loop() {
  
  // Arduino IDE će nam javiti error za ovaj dio koda
  // jer lokalnu varijablu koristimo izvan funkcije definiranja
  broj = broj + 1;
}

Grešku u kodu iznad možemo ispraviti tako da varijablu broj definiramo izvan funkcije, na taj način postaje globalna varijabla.

Kako zadati varijablu

 
Naziv varijable
 
Nazivi varijable mogu sadržavati samo slova (velika i mala) i brojeve, od znakova isključivo underscore "_" simbol. Također, ne smiju sadržavati i posebne znakove hrvatskog jezika poput "č","ć","đ" i druge. Ne smiju započinjati brojem, imati razmak u nazivu ili biti istog naziva kao neke ključne riječi(engl. keywords) predefinirane u programskom jeziku. Nazive varijabli obično započinjemo malim slovom.
 
Ovo su neki primjeri ispravnih(iako ne preporučljivih) naziva varijabli:

pIn
LED
led_pin
_ledPin13
_
LeDpIn

Ovo su neki primjeri neispravih naziva varijabli:

13pin    (ne smije započinjati brojem)
moj pin  (ne smije sadržavati razmak)
$led     (ne smije sadržavati posebne znakove)
očitanje (ne smije sadržavati posebne znakove hrv jezika)
while    (ne smije imati isto ime kao predefinirana funkcija)

 
Tipovi varijabli
 
Tip varijable je način na koji se neka varijabla sprema u memoriju, a ovisi o tome što zapravo želimo spremiti pod određenom varijablom. Dobar programer će pripaziti koji tip će odabrati za definiranje svoje varijable. Osim što kod krivo odabranog tipa varijable može doći do nesporazuma s računalom, može zauzeti puno više memorije nego što mu je zapravo potrebno. Naime, svaki tip varijable zauzima određenu memoriji računala bez obzira je li ona iskorištena ili ne.
 
Ispod je lista tipova varijabli, koje često srečemo u Arduino IDE-u, s veličinom memorije koje zauzimaju.
 

  • boolean (8bitni) - jednostavni true/false, vrijednost 1(true) ili 0(false)
  • byte (8bitni) - pozitivni brojevi od 0-255
  • char (8bitni) - brojevi od -128 do 127, možemo definirati i simbole pomoću jednostrukih zagrada(npr. 'e')
  • word (16bitni) - pozitivni brojevi između 0-65535
  • unsigned int (16bitni) - isto što i word
  • int (16bitni) - brojevi između -32768 do 32767
  • unsigned long (32bitni) - pozitivni brojevi između 0-4,294,967,295
  • long (32bitni) - brojevi između -2,1471486,648 i 2,147,483,647
  • float (32bitni) - single precision brojevi s decimalnom točkom od -3.42823e+38 do 3.4028235e+38
  • double (64bitni) - doubleprecision brojevi s decimalnom točkom s velikom preciznošću i rasponom
  •  
    Napomena: Preporučuje se izbjegavati float te koristiti double umjesto(ali samo u Arduinu, ne generalno C-u!). Prefix unsigned označava da koristimo samo pozitivne brojeve čime se omogućuje veći raspon pozitivnih brojeva(ne mogu se koristiti negativni brojevi s tom varijablom).

 
Vrijednosti varijabli
 
Varijablama možemo, a i ne moramo dodjeliti vrijednost. Ponekad se u adresi memoriji koja je dodjeljena varijabli već nalazi spremljena neka vrijednost pa je preporučeno definirati vrijednost "0" ako s varijablom želimo raditi matematičke operacije.

int varijabla;
int varijabla = 0;   // obje su ispravne

Treba imati na umu roll-over koji se pojavljuje kada varijabla izađe iz svoje domene. Na primjeru byte tipa varijabli koji ima raspon od 0-255:

byte broj = 255;
broj = broj + 1;  // "broj" sada iznosi 0

broj = 0;
broj = broj - 1;  // "broj" sada iznosi 255

#define i const

 
#define omogućuje davanje imena konstantnoj vrijednosti prije kompalacije programa te ju smatramo predprocesorskom naredbom. Tu vrijednost nije moguće mijenjati kasnije u kodu.

#define led 13

const je prefiks koji se dodaje tipu funkcije kada želimo stvariti neku konstantu (kao i #define) i tako čini varijablu read-only.

const float pi = 3.14;
Leave a Reply