Vous êtes sur la page 1sur 40

ARDUINO RADIONICA

PROGRAMIRANJE
Proces kreiranja programa

Programiranje se moe posmatrati kao niz/serija procesa. Upotreba


procesa je tehnika koja se koristi u kontroli kvaliteta kako bi se
osiguralo da se zadaci obavljaju na isti nain svaki put. Iako ovo
moe na prvi pogled da zvui pomalo dosadno i monotono, ukoliko
se razvijaju programi na dosledan i standardizovan nain,
smanjuju se poznati nedostaci a dobija sistematian nain
spreavanja da se nove greke ponovo ponavljaju.

Proces se moe posmatrati kao kontrolni spisak (kontrolna lista). Da


bi proces bio uspean, mora se obaviti u korektnom redosledu niz
zadataka. Kako se ovde ne radi o programiranju mehanikih i
nefleksibilnih aktivnosti, ve se radi sa mainama koje se zovu
raunari iji rad je regulisan strogim pravilima, programi moraju
biti vrlo precizni.

Jedna od manje oiglednih pogodnosti vezanih za korienje


procesa je to da proces takoe moe biti standard. Praksa pokazuje
da esto neki program tokom njegove eksploatacije odrava vie
programera. Kada programer radi sa neijim tuim programom,
ukoliko taj program nije razvijen u skladu sa industrijskim
standardom, tada su male anse da e novi programer bez
problema moi da prepravlja preuzeti program. Kao to se kuna
elektrina instalacija razvodi prema standardu tako da kasnije
moe da je prepravlja bilo koji elektriar, tako i u sluaju kreiranja
programa treba se pridravati standarda da bi se olakalo
potonje odravanje.
Proces koji koriste programeri za kreiranje i odravanje raunarskih
programa je proces razvoja programa. Ako se taj proces potuje i
koriste njegovi glavni koraci, on deluje kao kontrolni spisak koji e u
velikoj meri poveati anse za uspeh.
Disciplinovan pristup programiranju

Poinje se sa dobro definisanim modelom, zatim sledi


dokumentovanje modela i okonava sa kreiranjem programa
Modeli - putanje ka savrenom reenju

Modeli treba da predstavljaju idealno reenje. Model treba da uzme


u obzir sve zahteve bez pristrasnosti i da identifikuje ta bi bilo
najbolje mogue logiko reenje. Ponekad se model naziva
konceptualnim pogledom (idealni svet)
dok je realni program fiziki pogled ili primena (implementacija)
logike.

Hoe li definisani model odslikavati konano reenje?

Moda da, moda ne. esto idealno reenje je teko realizovati


programskim jezikom, a ponekad idealno reenje se ne izvrava
najefikasnije. Takoe, razliiti programski jezici imaju razliite
prednosti i slabosti.

Model: model je apstrakcija stvarnosti/realnosti. Kod modelovanja


projekta koriste se zahtevi i objedinjuju da bi se dobilo reenje.
Model omoguava da se eksperimentie i fino podeava vizija
reenja sve dok se ne ostvari zadovoljavajua tanost. Prilikom toga
treba obratiti panu da nije ostao neprimeen neki zahtev. Logiki
model treba posmatrati kao vodilju ka savrenom programu.

Logiki put: logika putanja je jednostavo sekvenca/niz instrukcija i


iskaza. Ponekad se putanja logikih iskaza naziva algoritam. Logiki
put ili algoritam je skup koraka/instrukcija za obavljanje konkretnog
zadatka. Program se obino sastoji od vie serija logikih puteva
kada je u pitanju reavanje velikih problema.

Jedna od tehnika koje pomau programeru da modelira logiku je


dijagram toka (flow chart). Mada je dijagram toka vizuelno
lako itljiv, nije ga lako sastaviti. Ukoliko osoba ne raspolae
bogatom praksom i nema smisla za araniranje blokova, korienje
papira i olovke ili ablona dijagram toka u odgovarajuem editoru
bie veoma zamoran proces.

Dijagrami tokova sastoje se od standardnih grafikih simbola


povezanih linijama kod kojih svaki simbol odraava logiku
operacije. Pored toga, svaki simbol ne samo da je standardizovan
da predstavlja operaciju (npr. IF naredbu odluivanja), ve i
oznaava logiku operacije sa kratkim objanjenjem ta ta logika
instrukcija obavlja.

Simboli dijagrama toka su:

Pravougaonik sa zaobljenim temenima: koristi se za oznaavanje


poetka i kraja logikog toka. Ovaj simbol se zove i simbol
terminator.
Krug: koristi se za povezivanje dijagrama koji se proteu na vie
stranica papira i pomau kod povezivanja logikih putanja sa jedne
strane na drugu. Krug oznaava kraj dijagrama na strani i sadri
unutar sebe identifikacioni broj. Sledea strana poinje sa krugom
sa istim identifikacionim brojem. Ovo pomae da se korektno
poveu dijagrami sa dve stranice.
Pravougaonik: koristi se za prikazivanje jednog koraka u logikom
modelu. Na primer, neka aktivnost, izraunavanje itd.

Romb: koristi se za predstavljanje odluke. Ishod odluke moe biti


taan/netaan (true/false) i obino se u programskom kodu
implementira kao IF naredba.

Trapez: predstavlja logiki ulaz ili izlaz (tj. itanje sa


tastature/senzora ili iz fajla ili ispisivanje na ekranu/tampau).

Linije: pokazuju kretanje logike i pravac informacije od simbola


do simbola.

Prednosti dijagrama toka

Najvea prednost dijagrama toka proistie iz njegove


jednostavnosti. Oni su jednostavni za razumevanje i kreiranje.
Budui da veina programera (i ljudi uopte) ima tenju da lake
prihvata koncepte koji se izlau vizuelno, dijagrami toka su u skladu
sa tim. Kada ovek vidi ispred sebe logiki dijagram, mnogo mu je
lake da raspravlja o svrsi programa i programskim koracima.
Korienjem Microsoft Visio aplikacije mogu se lako, brzo i efikasno
kreirati dijagrami toka.

Nedostaci dijagrama toka

Dijagrami toka imaju tri slabosti/nedostatka.


Prvi nedostatak se ogleda u tekoi crtanja sofisticirane logike koja
se protee na nekoliko listova papira.Da bi se to prevazilo ili svaki
simbol mora biti iscrtan u mikroskopskoj razmeri ili italac dijagrama
mora imati na raspolaganju ogromnu radnu povrinu kako bi mogao
da rasprostre vie listova papira koji obrazuju dijagram toka.
Drugi nedostatak se javlja zbog potrebne crtake vetine koja
moe predstavljati problem za neke programere. Crtaki softver tipa
Microsoft Visio umnogome ublaava ovaj nedostatak.
Trei nedostatak moe biti potekoa u prevoenju logike
dijagrama toka u naredbe programskog jezika.

Arduino programi

Arduino programi se sastoje od tri sekcije:


strukture,
funkcija i
vrednosti (promenljive i konstante).
Struktura

Osnovna struktura Arduino programskog jezika je prilino


jednostavna i sastoji se iz dva dela. Ta dva neophodna dela, ili
funkcije, obuhvataju blokove naredbi.

void setup()
{
naredbe;
}

void loop()
{
naredbe;
}

Moe se rei da je setup() pripremni a loop() izvrni deo programa.


Obe funkcije su neophodne da bi program radio.

Funkcija setup() sledi posle deklaracija promenljivih i samim tim nalazi


se na samom poetku programa. To je prva funkcija koju program
izvrava i izvrava se samo jedanput a koristi se za postavljanje reima
rada nekog od pinova Arduino ploice ili za inicijalizaciju serijske
komunikacije. Mora postojati u programu ak i ako nema naredbi koje
bi trebalo da izvri.

void setup()
{
pinMode(pin, OUTPUT); // postavlja 'pin' kao izlaz
}

Sledea funkcija koja se po redu pojavljuje u programu je funkcija


loop(). Ona radi ba ono to njen engleski naziv i implicira,
ciklino/kruno izvrava naredbe koje obuhvata. Omoguava programu
da reaguje i upravlja Arduino ploicom.

void loop()
{
digitalWrite(pin, HIGH); // ukljuuje 'pin'
delay(1000); // zadrka od 1 sekunde
digitalWrite(pin, LOW); // iskljuuje 'pin'
delay(1000); // zadrka od 1 sekunde
}
Funkcije

Funkcija je blok naredbi koji ima svoj naziv/ime, tj. to je blok


programskog koda koji se izvrava kada se funkcija pozove. Funkcije
setup() i loop() su ve objanjene.

Namenske funkcije se piu za obavljanje ponavljajuih zadataka kako


bi se smanjila neitljivost programa.

Funkcije se definiu tako to se prvo deklarie tip funkcije.

Tip funkcije se odnosi na tip vrednosti koji vraa funkcija po svom


izvravanju. Ukoliko funkcija po izvravanju vraa celobrojnu vrednost
onda ona treba da se deklarie da je tipa 'int', a ukoliko uopte ne
vraa vrednost tada treba da se deklarie da je tipa 'void'.

Osim tipa funkcije, deklarie se naziv funkcije a u zagradama


parametri koji se prosleuju funkciji.

Primer funkcije

type functionName(parameters)
{
int v; // kreira privremenu promenljivu 'v'
v = analogRead(pot) // ita analognu vrednost 'pot'
v/= 4; // konvert. opseg 0 do 1023 u opseg 0 do 255
return v; // vraa konanu vrednost
}

Vitiaste zagrade - {}

Vitiaste zagrade definiu poetak i kraj funkcijskog bloka ili bloka


naredbi koji se nalazi u sklopu for i if naredbe.

type function()
{
naredbe;
}

Leva (otvarajua) vitiasta zagrada mora uvek biti praena desnom


(zatvarajuom) vitiastom zagradom, tj. zagrade moraju biti
izbalansirane. Neizbalansirane zagrade dovode do greaka prilikom
prevoenja programa a i takve programe je teko logiki ispratiti.

Arduino okruenje poseduje


pogodno svojstvo koje omoguuje
automatsko praenje balansiranja
vitiastih zagrada. Naime, kada
korisnik oznai/selektuje zagradu ili
postavi kursor mia (tzv.taku
umetanja) neposredno ispred ili iza
vitiaste zagrade, okruenje istie
njenog logikog pratioca.

Oznaka taka-zapeta - ;

Oznaka ; se mora postaviti da oznai kraj naredbe i na taj nain


razdvaja elemente programa. Takoe, ta oznaka se koristi da odvoji
elemente u petlji for.

int x = 13; // deklarie promenljivu 'x' kao celobrojnu vrednost 13

Napomena: Ukoliko se ne postavi oznaka kraja naredbe, kompajler e


javiti greku.

Blokovski komentar - /* ... */

Blokovski ili vieredni komentari su oblasti teksta koje program ignorie


i koriste se za opisivanje koda ili kao komentari koji pomau drugima
da shvate delove programa. Blok poinje oznakom /* a zavrava se
oznakom */ i moe da obuhvati vie redova/linija.

/* ovo je poetak blokovskog


komentara koji se protee
u vie redova.
*/

Napomena: Dozvoljeno je da se linijski komentar ugnezdi unutar


blokovskog komentara, ali nije dozvoljeno ugnjeivanje blokovskih
komentara.

Linijski komentari - //

Komentar koji zahvata jednu liniju/red zapoinje sa oznakom // a


zavrava se sa sledeom linijom programskog koda. Program ih
ignorie kao i blokovske komentare i ne zauzimaju memorijski prostor.

// ovo je jednoredni komentar

Ovaj tip komentara se esto koristi za dodatno objanjavanje onoga to


radi naredba koja neposredno sledi.

Promenljive

Promenljiva (varijabla) je nain da se smesti numerika vrednost za


kasnije korienje od strane programa. Promenljive su brojevi koji se
mogu kontinualno menjati nasuprot konstantama ije se vrednosti ne
mogu nikada menjati. Promenljivu je potrebno deklarisati i opciono joj
dodeliti vrednost koju treba da uva. Sledei segment koda deklarie
promenljivu pod nazivom inputVariable a zatim joj dodeljuje vrednost
koja se dobija sa analognog ulaznog pina pod rednim brojem 2:

int inputVariable = 0; // deklarisanje promenljive i


// dodeljivanje vrednosti 0
inputVariable = analogRead(2); // postavljanje promenljive na
// vrednost sa analognog pina 2
Prvi red deklarie da e promenljiva 'inputVariable' sadrati celobrojnu
vrednost (engl. integer; skraenica int). Drugi red postavlja promenljivu
na vrednost koja dolazi sa analognog pina 2. Ovime je omogueno da
vrednost oitana sa pina 2 bude dostupna svuda u programu.

Kada je promenljivoj dodeljena ili ponovo dodeljena vrednost, moe se


testirati njena vrednost da se proveri da li zadovoljava konkretne
uslove a moe se njena vrednost i direktno koristiti. U svrhu
objanjavanja rada sa promenljivama sledi primer sa tri korisne
operacije.
Kd testira da li je vrednost promenljive inputVariable manja od 100 i

ako je to tano dodeljuje joj vrednost 100

a zatim postavlja zadrku ije je trajanje bazirano na vrednosti


promenljive inputVariable:

if (inputVariable < 100) // test da li je promenljiva manja od 100


{
inputVariable = 100; // ako je to tano onda joj dodeli vrednost 100
}
delay(inputVariable); // koristi vrednost promenljive za zadrku/pauzu

Napomena:
Promenljivama treba dodeljivati opisna imena/nazive kako bi kd bio
jasniji.

Promenljive tiltSensor ili startTaster


pomau programeru, odnosno onome ko ita program da lake shvati
ta promenljiva predstavlja. Promenljivama se mogu dodeljivati
proizvoljni nazivi izuzimajui slubene rei Arduino programskog jezika.

Deklaracija promenljive

Sve promenljive moraju da se deklariu pre nego to se koriste.


Deklarianje promenljive znai definisanje njenog tipa vrednosti,
specificiranje naziva i opciono dodeljivanje inicijalne vrednosti. Ovo je
potrebno uraditi samo jednom u okviru programa, dok se vrednost
promenljive moe menjati u zavisnostiod logike programa.

Sledei primer deklarie promenljivu inputVariable kao int, tj.


celobrojnog tipa i dodeljuje joj inicijalnu vrednost 0. To je primer
jednostavnog dodeljivanja.

int inputVariable = 0;

Promenljiva se moe deklarisati na razliitim mestima u programu a


mesto gde je deklaracija postavljena odreuje koji delovi programa
mogu koristiti tu promenljivu.

Oblast vaenja promenljive

Promenljiva se moe deklarisati:


na poetku programa pre funkcije setup(),
lokalno unutar funkcije/funkcija i
ponekad unutar bloka naredbi, recimo unutar for petlje.

Mesto gde je promenljiva deklarisana odreuje oblast vaenja (ili


domet) promenljive, tj. mogunost da konkretni delovi programa mogu
da koriste tu promenljivu.

Globalna promenljiva je ona promenljiva koju moe da vidi i koristi


svaka funkcija i naredba u programu. Takva promenljiva se deklarie
na poetku programa, pre funkcije setup().

Lokalna promenljiva je promenljiva koja je definisana unutar funkcije


ili unutar for petlje.

Ona je vidljiva i moe se koristiti samo unutar funkcije u kojoj je


deklarisana.

Meutim, mogue je da program ima dve ili vie promenljivih sa istim


nazivom u svojim razliitim delovima koji koriste razliite vrednosti.
Osiguravajui da samo jedna funkcija ima pristup svojim
promenljivama pojednostavljuje program i redukuje potencijalne
programerske greke.

Sledei primer pokazuje kako moe da se deklarie vie razliitih
tipova promenljivih i demonstrira vidljivost svake promenljive:

int value; // 'value' je vidljivo


// za sve funkcije
void setup()
{
// setup nije potreban
}

void loop()
{
for (int i=0; i<20;) // 'i' je vidljivo samo
{ // unutar for petlje
i++;
}
float f; // 'f' je vidljivo samo
} // unutar loop funkcije
Tipovi podataka

Svakom raunaru je vano sa kakvim podacima barata. U Arduino


okruenju razlikuju se sledei tipovi podataka:

kratki celobrojni - byte,


celobrojni - int,
proireni celobrojni - long,
realni - float.

Svaki tip podatka zauzima odreenu veliinu (memoriju) u raunaru i


ima odreeni opseg vrednosti koji pokriva.

byte
Promenljiva tipa Byte smeta 8-bitnu numeriku vrednost bez
decimalne take. Ima opseg vrednosti od 0 do 255.

byte nekaPromenljiva = 180; // deklarie promenljivu 'nekaPromenljiva'


// da je tipa byte

int
Promenljiva tipa int (integer) je primarni tip podatka za smetanje
brojeva bez decimalne take i prihvata 16-bitne vrednosti koje mogu
biti u opsegu od 32767 do -32768.

int nekaPromenljiva = 1500; // deklarie promenljivu 'nekaPromenljiva'


// da je tipa int

Napomena:
Celobrojne (integer) promenljive e prebaciti vrednost na drugi kraj
opsega ukoliko budu primorane da premae minimalnu ili maksimalnu
vrednost prilikom nekog dodeljivanja vrednosti ili poreenja. Na primer,
ako je x = 32767 a sledea naredba dodaje 1 na x, tj. x = x + 1 ili je
x++, x e se prebaciti na drugi kraj opsega i biti jednako -32768.

long
Tip podatka koji obuhvata proireno podruje za celobrojne vrednost,
bez decimalne take i smeta 32-bitnu vrednost u opsegu od 2 147 483
647 do - 2 147 483 648.

long nekaPromenljiva = 90000; // deklarie promenljivu 'nekaPromenljiva'


// da je tipa long

float
Tip podatka za realne brojeve ili brojeve koji imaju decimalnu taku.
Realni brojevi (ili brojevi sa pokretnom zapetom) imaju veu rezoluciju
od celobrojnih brojeva i smetaju se kao 32-bitne vrednosti u opsegu
od 3.4028235E+38 do -3.4028235E-38.

float nekaPromenljiva = 3.14; // deklarie promenljivu 'nekaPromenljiva'


// da je tipa float

Napomena:
Brojevi u pokretnoj zapeti nisu ba egzaktni i mogu da daju neobine
rezultate prilikom poreenja. Takoe, matematike operacije sa ovim
brojevima su mnogo sporije u odnosu na iste operacije sa celobrojnim
brojevima, stoga je poeljno izbei korienje ovih brojeva kadgod je to
mogue.

Nizovi
Niz je kolekcija vrednosti kojima se pristupa korienjem indeksnog
broja. Bilo koja vrednost u nizu moe se pozvati navoenjem naziva
niza i indeksnog broja te vrednosti. Nizovi se indeksiraju poevi od 0,
tako da prva vrednost u nizu ima indeksni broj 0. Niz mora da se
deklarie i mogu opciono da mu se dodele vrednosti pre nego to bude
korien (pozivan/referenciran).

int myArray[ ] = {vrednost0, vrednost1, vrednost2, ... }

Takoe, mogue je deklarisati niz navoenjem tipa i veliine niza a


kasnije dodeljivati vrednosti preko pozicije indeksa:

int myArray[5]; // deklarie celobrojni niz od 5 lanova


myArray[3] = 10; // dodeljuje 4-tom lanu niza vrednost 10

U sledeem primeru dat je niz koji ima 10 lanova. Poslednji lan


(element) niza se indeksira brojem 9. Prema tome:

int myArray[10] = {9,3,2,4,3,2,7,8,9,11};


// myArray[9] sadri vrednost 11
// myArray[10] ovo referencira neku drugu memorijsku adresu a ne niz
// myArray

Nizovi se esto koriste u for petljama gde se broja inkrementalnog tipa


koristi kao indeks pozicije za pristupanje vrednostima lanova niza.

Sledei primer koristi niz za blinkovanje (treperenje) svetlosne diode.


Na vrhu for petlje, broja poinje sa vrednou 0 i ujedno indeksira niz
flicker, tj. pokazuje na vrednost 180 a ta vrednost se dodeljuje pinu 10,
zatim sledi zadrka od 200ms i ponovo se ide na vrh petlje for i
inkrementira se broja tako da sada pokazuje na sledei lan niza
flicker itd.

inte ledPin = 10; // LED na pinu 10


// sledi niz sa 8 lanova
byte flicker[] = {180, 30, 255, 200, 10, 90, 150, 60};
//
void setup()
{
pinMode(ledPin, OUTPUT); // postavlja pin na
OUTPUT
}
//

void loop()
{
for (int i=0; i<7; i++) // broja petlje
{ // se koristi za indeksiranje,
analogWrite(ledPin, flicker[i]); // tj. pristup lanovima niza
delay(200); // zadrka od 200ms
}
}

Ova prezentacija je nekomercijalna.


Slajdovi mogu da sadre materijale preuzete sa Interneta, strune i naune grae, koji su zatieni Zakonom o
autorskim i srodnim pravima. Ova prezentacija se moe koristiti samo privremeno tokom usmenog izlaganja nastavnika
u cilju informisanja i upuivanja studenata na dalji struni, istraivaki i nauni rad i u druge svrhe se ne sme koristiti
lan 44 - Dozvoljeno je bez dozvole autora i bez plaanja autorske naknade za nekomercijalne svrhe nastave: (1)
javno izvoenje ili predstavljanje objavljenih dela u obliku neposrednog pouavanja na nastavi; - ZAKON O
AUTORSKOM I SRODNIM PRAVIMA ("Sl. glasnik RS", br. 104/2009 i 99/2011)
Dragan S. Markovi

Vous aimerez peut-être aussi