You are on page 1of 34

ipc@optinet.

hr
1 / 34

Bela Nemet, dipl.ing.


ARDUINO - PROGRAMIRANJE
Robotika i mikrokontroleri postali su (sa znatnim zakašnjenjem u odnosu na naprednije susjede) i
kod nas popularni, barem u školama i radionicama tehni ke kulture. Pa ipak, starije generacije
stru njaka – pa i inženjera i inovatora, da ne govorimo o drugima, o tome esto ne znaju ništa, pa
je vrijeme za cjeložvotno u enje.

Creative_Commons_Attribution-ShareAlike_ 3.0 Derived Translation by Bela Nemet from Arduino cc Reference Language
Dopušteno je korištenje, kopiranje i dijeljenje uz naznaku izvora i autora derivacije (sažetog prijevoda izvornika) pod uvjetima
Creativ Commons Attribution-ShareAlike (dijeli pod istim uvjetima). Detaljne uvjete vidi na linku CC.

ARDUINO - PROGRAMIRANJE
Napomena:

Ako ste potpuni po etnik, dobro e biti da prije ovog tutoriala prou ite osnove dostupne (engleski) na:
(https://www.arduino.cc/en/Tutorial/Foundations#basics). Upišite tu web-adresu u adresnu
traku, ako link ne radi sa ovog teksta. Osnove sadrže nekoliko cjelina, nažalost samo engleski. U
uvodu https://www.arduino.cc/en/Guide/Introduction objašnjava što je Arduino i za što se
koristi. Na istoj web-adresi umjesto /Introduction upišite /BoardAnatomy za upoznavanje
anatomije razvojnih plo a na kojima ete razvijati svoje projekte, a /Environment objašnjava tzv.
IDE softversko okruženje koje koristi Arduino. O osnovama kodiranja, tj. pisanja programa za Arduino
govori uputa https://www.arduino.cc/en/Tutorial/Sketch.
Skra eni prijevod prikaza osnovnih sastavnica mikrokontrolera, tj. vrsta nožica ( /DigitalPins
umjesto /Sketch u gornjem linku, /AnalogInputPins i /PWM) uklopljen je na po etku ovih uputa,
a za vrste raspoloživih memorija mjesto /Sketch u zadnjem linku upišite /Memory .

Neki doma i tutorijali, ve inom za pojedine specijalnosti mogu se na i na Internetu uglavnom za


hrvatsku verziju Arduina, CRODUINO.

Rijeka, sije anj 2019.

www.inovatori.hr www.youtube.com/c/iPCRijeka
2

ARDUINO - PROGRAMIRANJE

Arduino (ili hrvatska verzija – Croduino) - "instant" razvojno-eksperimentalna platforma dostupna


je danas u prodaji u jednostavnijim i složenijim verzijama s bogatom ponudom ugradbenih
elemenata, uputama i besplatnim programskim alatima, pa su ostvareni svi uvjeti za cjeloživotno
enje. Kad ga ve koriste djeca i hobisti, vrijeme je da ih upoznaju i stru njaci i inovatori, kojima
Arduino otvara široko polje kreativnosti, tim prije, što je uz pomo ovog hardvera i softvera mogu e
razviti i ozbiljnije inovacijske projekte ra unalno upravljanih ure aja ili instrumenata.
Hardverski paket Arduina sadrži odabranu verziju Arduino mikroprocesora s potrebnim sklopovima
za povezivanje s ra ualom, oscilatorom za generiranje takta, modemom za beži nu vezu i drugim
osnovnim sklopovima, ovisno o odabranoj verziji. Verzije idu od najjeftinije po etni ke verzije Uno,
do skupljih i mo nijih verzija s kojima je mogu e složiti i upravljati primjerice i 3D printer.
U sve verzije je uklju ena i razvojna plo a s nekoliko osnovnih elektroni kih elemenata za
sastavljanje pokaznih primjera uklju enih u isporuku. Ostali elementi iz galerije nude se On-Line.
enje se može po eti i bez izdataka, na svakom Windows ili Linux baziranom ra unalu, slažu i
ure aje na virtualnoj razvojnoj plo i prikazanoj na ekranu ra unala, koriste i neki od Arduino-
simulatora, primjerice Fritzing koga se može besplatno preuzeti na http://fritzing.org/download/

Simulator može prikazati:


razvojnu plo u (breadboard) sa galerijom elektroni kih elemenata (parts) koji se na nju
mogu slagati, a po potrebi se mogu ak i kreirati, ili
šematski prikaz sklopa koga kreiramo (shematic), ili
tiskanu plo icu (PCB – Printed circuit board) s potrebnom skicom za izradu. Izradu tiskane
plo ice izvest e neki od za to specijaliziranih servisa. Jedan od njih je i Fritzing- Fab.
Fritzing automatski generira shemu i tiskanu plo icu na temelju sklopa sastavljenog na razvojnoj
plo i u pogledu Breadboard, u kome prikaz sli i fizi koj izvedbi stvarnog ure aja/projekta. Svaka
promjena u bilo kojem od ta tri prikaza, automatski se prenosi u ostala dva.
Uz simulator na ra unalo treba instalirati i programski paket Arduino preuzet sa
https://download.freedownloadmanager.org/Windows-PC/Arduino/FREE-1.8.6.html
(ili eventualno hrvatsku verziju Croduino – u tom slu aju treba instalirati i pripadaju e drajvere).
Fritzing je opremljen detaljnim HELP-om, tj. objašnjenjima (engleski) - osim programiranja - za
izvo enje svih radnji s primjerima pokaznih projekata.
Budu i da je bez upravljanja posloženi hardver samo mrtva skalamerija, Fritzing uz navedena tri
pogleda uklju uje i prozor CODE za pisanje upravlja kog programa. U pokaznim projektima, kodovi
su ve upisani u okviru Code. U vlastitim projektima, upravljanje e programirati, tj. kodove u
prozor Code upisati korisnik – autor projekta, a to ete biti Vi. Tome treba pomo i ovaj pregled
programskih elemenata i naredbi. U okviru Code treba odabrati platformu (u našem slu aju to je
Arduino) i verziju Arduino-hardvera koga smo nabavili ili namjeravamo nabaviti, te port preko koga
se Arduino povezuje na ra unalo. Ovaj tekst je prera eni hrvatski sažetak predzadnje verzije 1-8-7
iz 2018.g. Arduinovih pregleda naredbi, varijabli i funkcija Language reference. Nije ažuriran po
najnovijoj verziji 1-8-8 s po etka 2019.g..
Izvorna objašnjenja (engl.) mogu se na i na web-adresi: https://www.arduino.cc/en/Main/Donate . Tko
ne želi donirati iznos za razvoj Arduina, na toj stranici treba odabrati opciju JUST DOWNLOAD,
Gornji link treba ukopirati u adresnu traku Internet-pretraživa a, ako se ne otvara na klik u ovom
tekstu i preuzeti detaljnije upute, koje ete spremiti na disk za kasniju uporabu.
Kad su elementi složeni na razvojnoj plo i i veze na priklju ke plo e povu ene sa nožica elemenata
(mišem), te napisan kod, odnosno upravlja ki program, treba ga aktivirati klikom na dugme Upload
u donjem desnom uglu okvira Code. Time se pokre e simulacija, pa funkcioniranje sklopa možemo
pratiti u pogledu breadboard.
Sustav je opremljen i dijagnosti kim alatom, te bilježi povijest izmjena s mogu noš u povratka na
prijašnja stanja projekta.

S obzirom da se u sustavu pomo i Fritzing-a mogu na i detaljna objašnjenja o svim hardverskim


sastavnicama simulatora i njegovom korištenju, u nastavku se ograni avamo na sažetiji prikaz
Arduino programskih elemenata (varijabli i funkcija) te naredbi, a nešto detaljniji engleski original
može se preuzeti kako smo naveli, na https://www.arduino.cc/en/Main/Donate .
3
SASTAVNICE MIKROKONTROLERA
Arduino razvojno-eksperimentana platforma u hardverskom dijelu sadrži neku od brojnih verzija
razvojne plo e (Breadboard), temeljene na ugra enom mikrokontroleru – mikrointegriranom ipu,
naj eš e neku verziju ATMEGA ipa. Ne emo se baviti onim ugra enim skopovima koji rade
automatski bez naše intervencije, poput unutarnje gra e ipa, generatora takta, sklopova za vezu s
ra unalom, napajanja i dr.
Podatke i naloge s mikrokontrolerom koji ih obra uje razmijenjujemo slanjem na, ili o itavanjem sa
nožica mikrokontrolera (pin-ovi), uz pomo naloga uklopljenih u program (Sketch) za upravljanje
ure ajima ili instrumentima ili elektroni kim elementima složenim ili priklju enim na razvojnu plo u.
DIGITAL PINS
Nožice (pins) Arduina se mogu konfigurirati za ulaz (INPUT) ili izlaz (OUTPUT) informacija. Iako se
ovaj opis odnosi na digitalne pinove, ve ina Atmeginih analognih nožica može se konfigurirati i
koristiti na isti na in.
INPUT
Arduino (Atmega) nožice su pretpostavljeno konfigurirane kao ulazne (INPUT), pa ih ne treba
posebno konfigurirati ako se koriste za ulaz.
Za Arduino (Atmega) pinove konfiguirane nalogom pinMode() kao ulazne (INPUT), kaže se da su u
stanju "visoke impendance". One imaju vrlo male zahtjeve na strujni krug koji vrši o itavanje, jer su
im otpori ekvivalentni serijski vezanom otporniku od 100 megaoma ispred nožice. To ih ini
prikladnima za o itanje raznih senzora (npr. osjetnika dodira, LED foto-diode, analognih senzora sa
shemom poput RCTime i sl.).
To me utim tako er zna i, da e ove nožice konfigurirane sa pinMode(pin,INPUT) koje nisu nikamo
spojene (ili su na nikamo spojenoj žici) mijenjati stanje po slu ajnim vrijednostima uzrokovanim
"elektronskom bukom" iz okoline ili kapacitivnom spregom sa susjednim nožicama.
PULLUP OTPORNIK SA ULAZNOM NOŽICOM
esto je korisno postaviti ulazni pin na poznato stanje ako nema ulaznog signala. To se može posti i
dodavanjem pullup otpornika vezanog na +5 V ili vezanjem ulazne nožice preko pulldown otpornika
na masu (0 V). Otpornik od 10 k je dobra vrijednost za pullup ili pulldown otpornik.
SVOJSTVA NOŽICE KONFIGURIRANE KAO INPUT_PULLUP
Atmega ip ima ugra en pullup otpornik od 20k kome se može pristupiti postavom pinMode() na
INPUT_PULLUP. Takva postava obr e ponašanje INPUT režima, tako da HIGH ozna ava
isklju en, a LOW uklju en senzor vezan na nožicu.
Vrijednost tog otpornika zavisi o korištenom mikrokontroleru. Na ve ini AVR plo a je od 20 do 50 k ,
a na Arduinu Due izme u 50 i 150 k . To na vrijednost je na podatkovnoj tablici plo e.
Senzor na nožici konfiguriranoj sa INPUT_PULLUP drugim krajem se spaja na masu (0 V). Otvoreno jednostavno
tipkalo se na nožici ita kao HIGH, a pritisnuto, tj. zatvoreno kao LOW.
Pullup otpornici isporu uju dovoljno struje za prigušeno svjetlo LED-diode na ulaznoj nožici.
Pullup otpornike kontroliraju isti registri (interne pozicije u memoriji ipa), koji kontroliraju stanje
nožice (HIGH ili LOW). Zato ulazni pin (INPUT) s uklju enim pullup otporikom pokazuje HIGH ako
pin prebacimo s pinMode() na OUTPUT. To funkcionira i u drugom smjeru, tj. izlazna nožica u
stanju HIGH imat e priklju en pullup otpornik ako se s pinMode() konfigurira na ulaznu.
Prije Arduina 1.0.1 interni pull-up se mogao konfigurirati na sliede i na in:
pinMode(pin, INPUT); // postavlja nožicu kao ulaznu
digitalWrite(pin, HIGH); // uklju uje pullup otpornik
Napomena: Digitalni pin 13 je teže koristiti kao ulazni nego druge, jer je na ve ini plo a na njega
tvorni ki vezan na plo i ulemljen LED s otpornikom. U slu aju uklju enja u ip ugra enog 20k
otpornika, taj e raspolagati sa samo 1,7 a ne 5 V, jer e on-board LED s otpornikom na plo i srušiti
napon nožice te e ona uvijek pokazivati LOW. Zato ako se pin 13 mora koristiti kao digitalni ulaz,
pinMode() treba postaviti na INPUT i koristiti vanjski pullup otpornik.
SVOJSTVA NOŽICA KONFIGURIRANIH ZA IZLAZ (OUTPUT) vidi u opisu OUTPUT (str.14).
Izlazne nožice mogu isporu iti struje do 40 mA priklju enim elementima, a ja e ih mogu uništiti.

PROGRAMIRANJE
(OPISI I SVOJSTVA FUNKCIJA, KOMANDI I VARIJABLI)
Arduino koristi prilago enu varijantu ra unalnog jezika CC ++ , gdje su sadržane tri grupe
programskih elemenata i naredbi:
strukturne naredbe (sadrže elemente Arduino C++ koda)
vrijednosti (varijable i konstante)
funkcije (kontroliraju razvojnu plo u i izra une)
4
Pa, idemo redom po navedenim grupama i njihovim podgrupama. Klik na komandu iz popisa
premješta Vas na opis elemenata nizanih približno abecednim redosljedom. U cilju lakšeg pra enja
stranih tutoriala i izvornih opisa koristimo izvorne (engleske) nazive podgrupa. Tko se do sada
zanimao za bilo kakvo elementarno programiranje, dio nabrojanih komandi prepoznat e i u ovom
popisu (matematski i poredbeni operatori, strukturne komande i dr, sa uobi ajenom ili nešto
izmijenjenom sintaksom).

STRUKTURNE KOMANDE - elementi Arduino CC++ koda)

Sketch (skica) Control Structure Further Syntax


loop() break - prekid #define (define)
setup() continue - nastavi #include (include)
do…while – izvrši … ako je /* */ (block comment)
else – u protivnom // (single line comment)
for - od ; (semicolon)
goto - idi na {} (curly braces)
if - ako
if … else – ako … u protivnom
return – vrati (se na)
switch … case – uklju i u slu aju
while – ako je
Arithmetic Operators Comparison Operators Booleqan Operators
% (remainder) – ostatak) != (not egal to) – nejednako ! (logical not) – logi ka negacija
* (multiplication) – množenje < (less than) – manje od && (logical end) – logi ki dodat
+ (addition) – pribrajanje <= (less than or egal to) || (logical or) – logi ki "ili"
- (subtraction) – oduzimanje == (egal to) – jednako
/ (divizion) – dijeljenje > (greather than) – ve e od
= (assigment operator) postavi >= (greather than or egal to)
Pointer Access Operators Bitwise operators Compound operators
& (reference operator) & (bitwise and) &= (compound bitwise and)
* (dereference operator) << (bitshift left) *= (compound multiplication)
>> (bitshift right) ++ (increment) – porast
^ (bitwise xor) += (compound addition)
| (bitwise or) -- (decrement) – smanjenje
~ (bitwise not) -= (compound subtraction)
/= (compound division)
^= (compound bitwise xor)
|= (compound bitwise or)
%= (compound modulo)

VARIABLE (Arduino vrste podataka i konstanti) Variable Scope


Constants Data Types Conversion & Qualifiers
Floating Point Constants String() byte() const
Integer Constants array char() variable scope
HIGH | LOW bool float() static
INPUT | OUTPUT | boolean int() volatile
INPUT_PULLUP byte long()
LED_BUILTN char word() Utilities
true | false double PROGMEM
float sizeof()
int
long
short
string
unsigned char
unsigned int
unsigned long
void
word
5
FUNKCIJE (kontrola Arduino razvojne plo e i izra uni)

Digital I/O Analog I/O Advaced I/O Time


DigitalRead() analogRead()
noTone() delay()
digital Write() analogReference()
pulseIn() delayMicroseconds()
pinMode() analogWrite()
pulseInLong() micros()
shiftIn() milis()
Zero, Due & MKR Family Random Numbers shiftOut()
analogReadResolution() random() tone() Characters
analogWriteResolution() randomSeed() isAlpha()
isAlphaNumeric()
Math Trigonometry Bits and Bytes isAscii()
abs() cos() bit() isControl()
constrain() sin() bitClear() isDigit()
map() tan() bitRead() isGraph()
max() bitSet() isHexadecimalDigit()
min() Inerrupts bitWrite() isLowerCase()
pow() interrupts() highByte() isPrintable()
sq() noInterrupts() lowByte() isPunct()
sqrt() isSpace()
isUpperCase()
Communications External Interrupts USB isWhitespace()
Serial attachInterrupt() Keyboard
stream detachInterrupt() Mouse

Opisi komandi, vrste varijabli i funkcija u nastavku su navedeni su približno abecednim redosljedom.
No prije toga, za po etnike kratka napomena o na inu pisanja koda u Arduino C++ jeziku:
Kao i kod drugih jezika, kod se piše u programskim redcima – linijama. U na elu, svaka linija sadrži
jednu naredbu, no to nije uvijek obavezno. Svaka naredba me utim (uz neke izuzetke) obavezno
završava znakom ; Izostanak te završne oznake naredbe uzrokovao bi programsku grešku.
esto se po inje deklariranjem (može se re i imenovanjem) varijabli koje e se uklju iti u kod,
navo enjem vrste varijable i njenog imena iza toga, npr:

int vrijedSenz; // gdje int deklarira cjelobrojnu varijablu (integer), koja se zove "vrijedSenz".
/* Imena varijabli su pri tome proizvoljna. Usput, desni dio gornjeg retka iza znakova // je
objašnjenje – uputa, primjedba programera. Takve tekstove zovemo komentarima, koji ne utje u
na izvo enje ili ponašanje programa, tj. procesor koji obra uje kod ih ignorira. Komentar u jednom
retku (jednolinijski) se po inje znakom // i završava na kraju retka. Komentar u više redaka (blok
komentar) se ozna ava ovako kao ovaj odsje ak i obavezno mora imati po etnu i završnu oznaku
kao ovaj odsje ak. Izostanak završne oznake blok-komentara proizvest e greške u programu. */

Program (ili kôd, kako se eš e kaže) sadrži pojedine cjeline – sekvence. One obi no po inju nekom
naredbom, možda i uvjetom (koji naj eš e sadrži izraze s poredbenim ili drugim operatorima) a iza
toga unutar viti astih zagrada {} slijedi naredba ili niz naredbi. Svaka naredba kako smo rekli
završava znakom ; a iza otvaranja viti aste zagrade (i naredbe ili nizanja naredbi) mora slijediti
zatvorena vitica, u protivnom program prijavljuje grešku.
Saberemo li re eno, neka programska sevenca u na elu izgleda ovako:
deklariranje varijabli;
naredba ili funkcija;
{
naredba1;
naredba2;
....
naredba n;
}

esto se usvaja na in pisanja kao gore, me utim u na elu nije bitno da li su viti aste zagrade pisane
na po etku ili na kraju retka, bitno je da sekvencu moraju okruživati obje (otvorena i zatvorena) i da
svaka naredba treba završavati znakom ;
Postoje izuzetci, no oni e biti nazna eni u opisu naredbi kod kojih se javljaju.
6
Uz deklaracije, varijable i naredbe u kodu e se na i i funkcije i izrazi, sa injeni uz pomo
navedenih raznovrsnih (aritmetskih, poredbenih i drugih) operatora, koji su opisani u nastavku.
Treba ih dobro prou iti, jer se neki od njih ( npr = ) zna ajno razlikuju od uobi ajene namjene u
aritmetici, a mnogi e po etnicima biti posve nepoznati.

Možda je najvažnija sposobnost ra unala (ili mikroprocesora) sposobnost "grananja programa",


odnosno odlu ivanja, tj. usmjeravanja tijeka izvo enja zavisno od nekog uvjeta, rezultata, ulaznog
podatka i sl. Ova se sposobnost realizira uz pomo naredbi if, if…else, while, do…while, (ako,
ako…u protivnom, ini…dok) koje se svode na izvo enje jedne naredbe ili grupe naredbi ili
programske grane ako je neki uvjet ispunjen, a druge ako to nije slu aj. No, o tome detaljnije u
opisu tih naredbi.

Na kraju još napomena, da su u nastavku u naredbama i funkcijama, tj. sintaksi (na inu pisanja)
masnim znakovima otisnuti oni elementi koji doslovno moraju biti prisutni u naredbi odnosno
sintaksi, a obi nim znacima onaj dio naredbe ili sintakse koji zavisi od konteksta koda (to su
uglavnom parametri naredbi i funkcija), koji je dakle izmjenjiv od slu aja do slu aja. Uz ovaj
pregled, lakše ete pratiti nastavak i primjere kodova za Arduino. Takvi primjeri nisu navedeni, jer ih
ima dovoljno uz sve verzije Arduina, kao i u dostupnim izvorima. Svakako ih treba prou iti. Ovaj
sažetak s navedenim opisima treba Vam pomo i da ih lakše razumijete ili napišete svoj prvi kod.
SKUPNI PREGLED KOMANDI
Zaglavlje kolona nije uvijek striktno poštivano, neke kolone su po potrebi spojene zbog sažetijeg tabelarnog prikaza.

GRUPA
KOMANDA OPIS PRIMJEDBA sintaksa podgrupa
Tip varijable rezultata treba biti u
Ovi aritmetski operatori (osim =) izra unavaju Primjeri sintakse:
stanju prihvatiti rezultat operacije.
Arithmetic zbroj, razliku, umnožak ili rezultat dijeljenja dviju Ako su operandi razli itog tipa, y = y + 3; STRUCTURE
vrjednosti u uobi ajenom matematskom smislu. x = x – 7;
Operators + "širi" tip se koristi za kalkulaciju. Arithmetic
Me utim, rezultat ovisi i o vrsti operanda, Tako
+ Ako je jedan od operanada s i = j * 6; operators
primjerice dijele i cjelobrojne operande 9/4 dobi-
pomi . zarezom ili double, koristit r = r / 5;
- vamo (cjelobrojni) rezultat 2, razli it od ra unskog
e se izra un s pomi nim zarezom
*
integer konstante su pretpostavljeno int tipa, pa neke kalkulacije s njima mogu završiti u overflow (npr. 60*1000 e dati negativan rezultat)
/2
Koristi varijablu rezultata dovoljne veli ne za prihvat najve eg mogu eg rezultata kalkulacije
istraži u kom trenutku tvoja varijabla može biti "probijena" i što se može desiti u drugom smjeru – npr. (0 – 1) ili (0 –32768)
za ra unice koje zahtijevaju frakcije, koristi float varijable, ali to nosi i nedostatke: šire veli ine i sporo izra unavanje u procesoru
koristi cast operator, tj. (int)myFloat za konvertiranje jednog tipa varijable u drugi "u letu".

Operator dodjele – varijabli ili izrazu ispred Primjer:


znaka jednakosti dodijejuje (postavlja na) int ocitanje; //deklarira se (imenuje) varijabla "ocitanje"
= Assigment vrijednost iza znaka jednakosti. Lijeva varijabla ocitanje = analogRead(0);
. operator mora mo i prihvatiti dodijeljenu vrijednost, u /* (digitalizirana) vrijednost napona na analognoj nožici (pin)
STRUCTURE
(nesmije se protivnom e postavljena vrijednost biti pogrešna. 0 sprema se kao vrijednost o itanja*/
Arithmetic
Operator dodjele nema jednaku ulogu kao u algebri, Operators
zamijeniti sa ==) ! tj. ne izra unava vrijednost lijeve strane izraza, nego
Objašnjenje iznad ujedno je primjer za na in pisanja višeredne
varjabli ili izrazu s lijeva dodijeljuje (tj. postavlja je na) primjedbe izme u /* i */ u sklopu programa. Takva primjedba ne
desnu vrijednost. utje e na rezultat ili tijek izvršavanja programa, jer je program ignorira.

Za razumijevanje slijede ih, Bitwise operatora, treba znati pojam digitalnog brojevnog sustava. To je sustav sa samo dvije znamenke, i to 0 i 1. U fizikal- 8 4 2 1 vrijednost:
nom smislu u digitalnoj tehnici 1 ozna ava stanje pod naponom u promatranoj to ki nekog ure aja (u engleskom se bilježi i kao HIGH), a 0 stanje bez 0 0 0 1 1
napona (LOW). Ta, digitalna "cifra" se zove bit, dakle razlikuje se tzv. jedini ni bit (1) i nulti bit (0). Kao što se vrijednosti u dekadskom sustavu izražava- 0 0 1 0 2
ju zbrojem dekadskih jedinica, (jedinice, desetice, stotice. . .) tako se i u binarnom sustavu prikazuju zbrojem binarnih jedinica – bitova, ije su vrijednosti 0 0 1 1 2+1= 3
1, 2, 4, 8 itd (2n) koje zajedno ine kombinaciju koja se zove bajt (zaokruženo na skici). Primjer prikaza nekoliko vrijednosti u etverobitnom sustavu dat 0 1 0 0 4
je na desnoj skici. Zbroj vrijednosti svih jedini nih bitova u bajtu prikazan je u desnoj koloni. U suvremenim ra unalima se koriste (16), 32 i 64 bitni 0 1 0 1 4+1= 5
bajtovi. Korištenjem npr. 8-bitnog sustava, bajtom se može definirati 255 alfaumeri kih znakova. U fizi koj interpretaciji, jedini ni bit na elno ozna ava
0 1 1 0 4+2= 6
prisustvo indikativnog elementa ure aja (napona na nožici elektroni kog elementa, minijaturnog magnetskog ili laserskog traga na disku ili magnetskog
0 1 1 1 4+2+1= 7
polja u memoriji ra unala, itd), a nulti bit otsustvo indikativnog elementa. U Arduinu, bitovima u bajtu prikazuju se tako er stanja napona na nožicama
mikroprocesora. Tako se primjerice stanje nožce pod naponom ozna ava kao HIGH (visoko), a nožice bez napona kao LOW (nisko).

www.inovatori.hr www.youtube.com/c/iPCRijeka
2
u C++ jeziku Bitwise operatori kalkuliraju na nivou bitova. U digitalnom obliku brojevi se izražavaju uz pomo jedini nih i nultih bitova 0 i 1 (vidi
primjer.. Ovi operatori omogu uju rješavanje estih zadataka u programiranju. Detalje o njima (engleski) možete na i ovdje. U Arduinu, & i | se
esto koriste za kontrolu stanja napona na nožicama mikrokontrolera postupkom Read-Modify-Write (O itaj-promijeni-upiši). Svaka od osam nožica
(0,1,2,3,4,5,6,7) može imati napon (stanje HIGH –visoko tj. 1) ili biti bez napona (stanje LOW – nisko tj. 0). Stanje svih osam nožica tzv. PORT–a,
tj. "vratiju" se tako može izraziti 8-bitnim brojem u digitalnom obliku, pri emu svaki bit ozna ava stanje na jednoj od nožica. Operatorima & i | te
Bitwise Compound operatorima ++ (za porast) i -- (smanjenje) programom se mogu mijenjati pojedini ili svi bitovi o itanog ili postavljenog stanja i time
zadati novo stanje PORT-a, tj. napona na svim nožicama jednim digit.brojem. Pamtimo da desni pin nosi oznaku 0, (oznake rastu s desna na lijevo)
operators
| bitwise OR Pravilo za primjenu operatora & (bitwise and) je:
Ako su oba ulazna bita na istom mjestu u ulaznim operandima 1 onda je bit rezultata na tom mjestu 1, a u protivnom je 0
& bitwise and U Arduinu, cjelobrojne vrijednosti izražavaju se u 16 bitnom digitalnom obliku, pa se gornje pravilo primjenjuje na svaki od 16 bitova, npr:
^ bitwise XOR

bitwise operators &, |, ^


(bitwise EXCLUSIVE OR)
int a = 92; // binarno: 0 0 0 0 0 0 0 0 0 1 0 1 1 1 0 0 prvi operand

STRUCTURE
| bitwise or int b = 101; // binarno: 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 1 drugi operand
. Usporedbu po gornjem pravilu vršiti na svakom od 16 bin.mjesta
int c = a & b; // rezultat: 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 1 Ovaj rezultat (1000101) u decimalnom sustavu ima vrijednost 68
^ bitwise xor
Jednako tako za | pravilo je: Ako je bar jedan (ili su oba) ulazna bita na istom mjestu 1, rezultat na tom bin.mjestu je 1, a u protivnom je 0
Pravilo za primjenu XOR je: Ako su ulazni bitovi na istom binarnom mjestu isti, rezultiraju i bit
na tom mjestu je 0, a ako su razli iti, rezultat je na tom mjestu 1. Primjer: int x = 12; //binarno 1100
Operator ^ se esto koristi za invertiranje ciljanog bita iz 1 u 0 ili obratno, u cjelobrojnom izrazu. int y = 10; //binarno 1010
Primjerice ako je nalogom DDRD=DDRD | B00100000; digital pin 5 (šesti od desna) postavljen int z = x^y; = 6 tj: 0110
kao izlaz (OUTPUT), nalog PORTD = PORTD^B00100000; promijenit e stanje samo pin-a 5
BOOEAN OPERATORS (koriste se u if naredbi) Primjeri: (nesmije se zamijeniti && sa &, || sa | ili ! sa ~)
STRUCTURE
&& (logical AND) Vra a TRUE (istnito) ako su oba uvjeta ispunjena if(digitalRead(2)==HIGH && digitalRead(3)==HIGH) { // read switches}
Boolean
|| (logical OR) vra a TRUE ako je jedan od uvjeta istinit if (x>0) || y>0) { . . . } // vra a TRUE ako je x ili y ve i od nule
Operators
! (NOT) vra a TRUE ako izraz u zagradi nije istinit if (!x) { . . .} // vra a TRUE ako izraz sa x neistinit (npr ako je x=0)

Compound Primjeri: compound ekvivalentna


Ove (compound) operacije nad nekom
operators variablom x vrše uobi ajene matemaske operacije
nova vrijednost operacija: je izrazu:
. varijable: x+=y; x= x+y;
+= pribroji s drugom varijablom ili konstantom, kako je STRUCTURE
x = 2; 2 (2 je dodijeljena vrij)
x- =y; x= x -y;
-= oduzmi prikazano na sintaksi (vidi i primjere).
x *= 3; 6 jer je 2*3=6
Compound
*= množi sa To je samo kra i na in pisanja za desne izraze u
x -= 3; 3 jer je 6-3=3 x* =y; x= x*y; operators
predzadnjoj koloni. Varijabla x može biti bilo kog x/ =y; x= x /y;
/= dijeli sa x /= 3; 1 jer je 3/3=1
tipa, a rezultat varijabla bilo kog tipa ili konstanta. x %=2; 1 jer 1/2=0 a ostatak =1 x%=y; x= x%y;
%= ostatak
x++ // pove ava x za 1 i vra a staru vrijedn. x x = 2;
++ increment pove ava ili smanjuje varijablu za 1 ++x // pove ava x za 1 i vra a novu vrijedn. x
STRUCTURE
y = ++x; // x i y su sada 3 Compound
-- decrement (vidi sintaksu desno i primjere u predzadnjoj koloni) x-- // smanjuje x za 1 i vra a staru vrijedn. x
y = x--; // x je sada 2,a y 3 operators
--x // smanjuje x za 1 i vra a novu vrijedn. x
daje ime konstanti prilikom kompajliranja, pa se ušte uje #define imeKonstante vrijednost
memorijski prostor za to u Arduino ipu. U nekim slu aje- Iza #define linije ne stavlja se ; STRUCTURE
#define vima zamjena konstante imenom može uzrokovati greške,
U protivnom program e prijaviti Primjer:
Further Sintax
pa se preferira koristiti klju nu rije const mjesto #define
grešku ( // this is an error). #define ledPin 3
3
Iza #include linije ne stavlja se ;
ume e vanjske librarie (me u njima i one pisane Primjer za sintaksu: STRUCTURE
#include za Arduino) u našu skicu programa (scetch).
U protivnom program e prijaviti #include <avr/pgmspace.h> Further Sintax
kriti nu grešku, kao kod #define.
primjeri:
Ostatak pri dijeljenju cjelobrojnih vrijednosti. x=9%6; rezultat je x=3 jer je STRUCTURE
% Operator je koristan pri održavanju neke varijable 9:6=1 s ostatkom 3 ostatak=djeljenik % djelitelj Arithmetic
u zadanim granicama (npr. veli ine matrice). x=10%5 nova vrjednost je x=0 Operators
jer je 10:5=2 a ostatak je 0
Pointer operatori spadaju u složeniji alat C jezika možda teži za po etnike. Veliku ve inu Arduino skica mogu e je STRUCTURE
& (reference)
napisati bez njih, pa nisu objašnjeni ni u izvorniku po kome je pisan ovaj sažetak. Ipak, za manipuliranje nekim Pointer access
* (dereference) strukturama podataka mogu pojednostaviti kod, pa ih je u naprednijoj fazi dobro znati koristiti. operators
Blok komentara (višelinijski komentar). Komentari Ne zaboravite zaklju iti, tj. ozna iti /* ovo je višelinijski
STRUCTURE
/**/ su upute ili primjedbe programera koje program kraj višelinijskog komentara komentar Further Sintax
ignorira pri izvo enju. Ne troše prostor u ipu. oznakom */ */
Jednolinijski komentar sadrži uputu ili primjedbu i
Komentar je sve iza // do kraja STRUCTURE
// sl. programera pisanu u jednom retku. Program
retka (nema završne oznake)
// ovo je jednolinijski komentar Further Sintax
ignorira kometar pri izvo enju. Ne troši memoriju.
To ka-zarezom se zaklju uje naredba. Ako U slu aju prijave nerazjašnjene
STRUCTURE
; naredba nije zaklju ena sa ; kompajler e prijaviti greške, prvo treba provjeriti nedos- Further Sintax
grešku u programu. taje li koji ; ispred mjesta greške.
Viti aste zagrade su važan simbol u C progr.
Zaboravljena zaklju na zagrada }
jeziku funkcija {
može proizvesti programsku grešku
Iza {i sadržaja programske iteracije mora slijediti} Naredba ili grupa
koja se teško otkriva. STRUCTURE
{} Nije važno da li su zagrade pisane na po etku,
Postoje i druge primjene viti aste
naredbi (svaka Further Sintax
kraju ili u novom retku. Sadržaj je pri tome u zaklju ena sa ;)
zagrade (mogu zamijeniti return u
pravilu naredba ili grupa naredbi koje slijede iza }
funkcijama, endif i next u petljama)
fukcije kojom su inicirane.
Izraz u zagradi ne smije sadržavati Primjer: umjesto abs(a++);
Izra unava apsolutnu (tj. pozitivnu) vrijednost FUNCTIONS
abs() broja ili iraza u zagradi
druge funkcije, jer takav izraz može dati koristi: abs(a);
Math
pogrešan rezultat . a++;
itava vrijednost na specificiranoj analognoj int analogPin = 3; //potenciometar je spojen na
nožici. Ako je analogni ulaz "u zraku", tj. nije . // pin 3, a vanjska LED dioda na masu i +5V
Arduino razvojne plo e imaju 6-16 kanala sa 8 ili 16 nikamo spojen, vrijednost funkcije int val = 0; // 0 je spremljena kao value read
nožica (pin) -zavisno o tipu plo e- i 10 bitni analogno- analogReference() e skakutati zavisno void setup() b {
analogRead() digitalni konverter. Mogu ulazne napone od 0 do 5 V o mnogim faktorima (npr. o drugim ana- serial.begin(9600); // postavlja po et.serial
pretvoriti u digitalne cjelobrojne vrijednosti od 0 do 1023. lognim ulazima, blizini ruke do plo e i dr) }
FUNCTIONS Slijedi da preciznost digitalnog iskazivanja vrijednosti Sintaksa: analogRead(pin) void loop() {
Digital I/O iznosi 4.9 mV a rezultat se prikazuje u obliku: val = analogRead(analogPin); // o itava pin
Ulazni raspon i preciznost mogu se mijenjati korištenjem int(vrijednost zme u 0 i 1023) Serial.printin(val); // prepravlja po .vrijednost
analogReference() naloga {
4
Napomena:
Naredba postavlja vrjednost (u bit-ima) rezultata Ako vrijednost analogReadResolution() postavimo na ve u rezoluciju
naloga analogRead(). Zadana (default) rezolucija je 10 od dostupne, Arduino e koristiti najvišu razlu ivost a višak bitova
bitna (vra a vrijednosti izme u 0-1023) zbog zamijenit e s nulama.
kompatibilnosti unatrag sa AVR plo ama. Primjerice, korištenje Due ili Zero s analogReadResolution (16) dati e
analogReadResolution() je naime proširenje Arduino 2 i približni 16-bitni broj s prvih 12 bita koji sadrže pravo ADC o itanje, a
FUNCTIONS
analogReadResol 10 naloga Analog API.Ove plo e imaju 12-bitne ADC zadnja 4 bita ispunit e nulama.
Zero,Due &
ution() sposobnosti, kojima se može pristupiti promjenom Ako vrijednost analogReadResolution () postavimo na vrijednost nižu
MKR Family
rezolucije rezultata s 10 na 12, pa e se onda oni prikazati od mogu nosti razvojne plo e, dodatni najmanje bitni bitovi koji se
izme u 0 i 4095. itaju iz ADC-a e se odbaciti.
Sintaksa: Korištenjem 16 bitne, ili bilo koje razlu ivosti koja je ve a od stvarnih
analogReadResolution(rezolucija u bitovima izme u 1 i 32) hardverskih mogu nosti, omogu uje se pisanje skica za automatsku
(Vidi napomenu desno) Primjer (engl.) vidi u izvorniku. obradu na budu im ure ajima s ADC-om visoke razlu ivosti kada oni
postanu dostupni, bez ispravljanja koda.
Sintaksa:
analogReference(opcija) (nalog ne vra a nikakav rezultat)

Postavlja zadani (default) referentni napon POZOR !


analognog ulaza (to je najviši dopušteni napon Prije korištenja AREF pin-a za vanjsku referencu (dakle i prije naloga
ulaznog raspona) za neku od slijede ih opcija: analogRead() ) analogReference() treba postaviti na EXTERNAL, u
DEFAULT: 5 ili 3.3 V zavisno o Arduino plo i protivnom je mogu e uništenje mikrokontrolera razvojne plo e. Ne
FUNCTIONS
analogReference() INTERNAL: 1.1 ILI 2.56 V zavisno o Arduino plo i
koristi ništa ispod 0 ni preko 5V za vanjski ref.napon na AREF
Analog I/O
pinu
INTERNAL1V1: 1.1 V samo za Arduino Mega
INTERNAL2V56: 2.56 V samo za Arduno Mega Alternativno, vanjski referentni napon se može na AREF pin vezati
EXTERNAL: za napon na AREF nožici (0-5V) preko 5k otpornika, što dopušta prekap anje izme u vanjskog i
internog ref. napona. No,taj otpornik e smanjiti napon koji e se uzeti
kao referenca 32/(32+5) puta , jer se veže u red sa internim 32K
otpornikom na AREF nožici.
Sintaksa:
Upisuje analognu vrijednost (PWM val) na ciljanu analogWrite(pin,vrijednost);
Frekvencija kvadratnog vala PWM
nožicu. Može se koristiti za razli ito osvjetljenje LED Vrjednost podrazumijeva
diodom ili za pogon motora razli itim brzinama. Nakon Razvojna Frekvencija Nožice radni ciklus izme u 0 i 255.
naloga analogWrite(), odabrani pin generira neprekinuti
plo a Hz Pri tome je:
kvadratni signal (val) specificiranog radnog ciklusa do 0 isklju eno
sljede eg naloga analogWrite() ili digitalRead() ili UNO1 i sli ne 980 5i6 255 stalno uklju eno
digitalWrite() na istom pinu. Frekvencija PWM signala na Leonardo 980 9,10,11
analogWrite() ve ini pin-ova je približno 490 Hz, a za naj eš e Arduino ATmega168 i 328 3, 5, 6, 9, 10, 11 Napomena: PWM izlaz na
plo e vidi tabelu desno.. Mega 2-13 i 44-46 pin-u 5 i 6 ima duži ciklus
od o ekivanog [jer koristi
Ne ne treba naložiti pinMode() prije postave nožica za starije ATmega8 9, 10, 11
isti tajmer sa milis() i FUNCTIONS
izlaz uz pomo naloga analogWrite(). Arduino Due2-13 + DAC0 i DAC1
delay() ], pa vrijednost 0 Analog I / O
možda ne e u potpunosti
Funkcija analogWrite() nema nikakve veze s (DAC su digitalno-analogni pretvornici isklju iti izlaz na tim
analognim pinovima ili funkcijom analogRead(). koji djeluju kao pravi analogni izlazi). nožicama
5
Primjer: Postavlja izlaz na LED-diodu proporcionalno vrijednosti o itanoj sa potenciometra
int ledPin = 9; // priklju uje LED na digitalni pin 9
int analogPin = 3; // potenciometar veže na analogni pin 3
analogWrite() void setup()
nastavak {
pinMode(ledPin, OUTPUT); // postavlja nožicu LED-dode kao izlaz
PRIMJER }
void loop()
val = analogRead(analogPin); // o itava pin sa analognog ulaza
analogWrite(ledPin, val / 4); // o itanje ide od 0-1023, a analogWrite() od 0-255
}
Proširenje Analog API za Arduino Due i Zero Sinaksa:
Postavlja rezoluciju analogWrite() funkcije, uz Hardverske sposobnosti plo e Due:
analogWriteResolution(bitovi)
zadanu (default) 8 bitnu vrijednost (tj. izme u 0 i 12 nožica, zadano 8-bitni PWM (kao Bitnost u zagradi (od 1-32)
plo e temeljene na AVR), mogu se
255) za omogu enje kompatibilnosti unatrag sa se odnosi na rezoluciju
postaviti na 12-bitnu rezoluciju i:
plo ama temeljenim na AVR. Hardverske korištenu u funkciji FUNCTIONS
analogWriteRe 2 nožice sa 12-bitnim DAC (digital-
sposbnosti za za Due i Zero plo e vidi desno. analogWrite(). U slu aju Zero,Due &
solution() analognim konverterom)
Postavom write rezolucije na 12 (Due) odnosno 10 Zero: 10 nožca, zadano 8-bitni PWM postave previsoke ili MKR Family
(kod Zero) omogu uje se puno iskorištenje (kao plo e temeljene na AVR), mogu se
preniske rezolucije, Arduino
ugra enog digitalno-analognog konvertera (DAC) postaviti na 12-bitnu rezoluciju, i:
e koristiti raspoloživu, uz
tih razvojnih plo a. I za analogWriteResolution() 1 nožica s 10-bitnim DAC konverterom.
korekciju bitnosti kao kod
važe napomene date uz analogReadResolution(). analogReadResolution()
int myPins nalaže kreiranje skupova bez zadavanja veli ine, pa
Array je skup ili niz varijabli, koje se dohva aju uz kompajler sam kreira odgovaraju i niz na temelju brojanja elemenata.
pomo broja koga zovemo indeks (broj u uglatoj Inicijaliziranje s dimenzioniranjem niza omogu uje int mySensVals[]
zagradi). U C-jeziku oni mogu biti komplicirani, ali Pri tome za skupove tipa char treba dodati po etni element za tzv. null-
korištenje jednostavnih nizova relativno je character, kao što je u injeno kod zadnje naredbe lijevo. "hello" sadrži
jednostavno. 5 znakova, a naredba nosi indeks 6 u uglatim zagradama.
Skup može deklarirati, tj. kreirati bilo koja od Pristup array-u: Prvi element niza treba biti nulto indeksiran, npr: VARIABLE
array slijede ih naredbi: mySensVals[0] == 2, mySensVals[1] == 4, itd. Tako primjerice u skupu Data Types
int myInst[6]; // neobavezno s deset elemenata posljednji element ima indeks 9. Primjerice nalog
int myPins[] = {2,4,8,3,6}; int myArray[10]={9,3,2,4,3,2,7,8,9,11}; nije valjan i sadržat e slu ajne
int mySensVals[6] = {2,4,-8,3,2}; vrijednosti, itane ili pisane na pogrešna memorijska mjesta, što može
char message[6] = "hello"; srušiti sistem ili uzrokovati programske greške koje se teško otkrivaju.
Array se može kreirati i bez inicijaliziranja myInst C-kompajler naime za razliku od BASIC-a ili JAVE ne provjerava jeli
pristup skupu unutar deklariranih granica, pa treba oprezno deklarirati..
Pojedine nožice (pin) mikrokontrolera, mogu se namijeniti za Razvojna plo a digit.pinovi
generiranje prekida, koji su korisni za automatizaciju radnji za Uno, Nano, Mini i druge 328 plo e 2,3
attachInterrupt() rješenje tajminga u programima za mikrokontrolere (npr.kod itanja Mega (uklj.2560 i ADK) 2,3,18,19,20,21 FUNCTIONS
Digitalne nožice sa okretnih kodera ili pra enja unosa korisnika). Desno su navedeni takvi Micro,Leonardo i druge 0,1,2,3,7 32u4- External
sposobnos u prekida pin-ovi za razne plo e. Sve varijable koje se mijenjaju unutar attach- bazirane plo e Interrupts
funkcija treba deklarirati kao volatile, jer delay() ne radi, a rezultati Zero svi digitalni pinovi osim 4
milis() funkcije ne e rasti unutar attach-funkcija (vidi niže sekciju o ISR) Due svi digitalni pinovi
6
Primjeri korištenja prekida (interrupt): Bilo bi jako zahtjevno napisati kod Sintaksa:
za bilo kakvu akciju u slu aju prihvata impulsa sa rotiraju eg dava a, ili senzora attachInterrupt(digitalPinToInterrupt(pin), ISR, mode);
zvuka koji pokušava uhvatiti klik ili foto-prekida a koji primjerice nastoji uhvatiti . ne preporu a se
pad nov a, jer program stalno treba provjeravati senzor, da ne bi propustio attachInterrupt(interrupt,ISR,mode); ne preporu a se
neki ulazni impuls. Prekid Interrupt-nalogom u takvim situacijama osloba a attachInterrupt(pin, ISR, mode); (samo Due i Zero).
procesor za druge akcije, bez propuštanja ulaznih impulsa. Parametri:
O rutinama servisa za prekid (Interrupt Service Routines) - ISR interrupt broj prekida
ISR su posebne vrste funkcija, koje imaju odre ena jedinstvena ograni enja, ISR nema parametara
attachInterrupt()
koja druge funkcije nemaju. Nemogu imati parametre i ne vra aju nikakav mode definira kad se prekid okida: FUNCTIONS
rezultat. Op enito, ISR treba biti što kra i. Ako program (sketch) koristi više ISR- - LOW – kad je pin bez napona External
nastavak ova, samo se jedan može izvršavati istovremeno, a drugi se aktiviraju kad prvi - CHANGE – kad pin mijenja vrijednost Interrupts
završi, sukladno sadržanim prioritetima. Nalozi koji zahtijevaju prekid rada kao - RISING – kad pin dobije napon
milis(), delay(), micros(), ne e raditi unutar ISR-a. (delayMicroseconds() e - FALLING - kad pin izgubi napon
me utim raditi normalno, jer ne koristi broja ). Za prijenos podataka izme u ISR- - HIGH - kad je pin pod naponom (Due i Zero)
a i glavnog programa obi no se koriste globalne varijable. Da bismo bili sigurni
da su te varijable uredno ažurirane, treba ih prijaviti kao volatile. Primjer
vidi na slijede oj stranici.

Brojevi prekida
attachInterrupt() – nastavak Nožice sposobne za interrupt i njihove oznake
Primjer: razlikuju se kod raznih Arduino plo a. Zbog toga
int pin = 13; u pravilu treba koristiti digitlPinToInterrupt(pin)
volatile int state = LOW; umjesto direktnog unosa interrupt-broja u
void setup() { attachInterrupt(), zbog kompatibilnost u slu aju
attachInterrupt() pinMode(pin, OUTPUT); izvo enja koda na drugoj plo i. FUNCTIONS
Digitalni pin-ovi sa
attachInterrupt(digitalPinToInterrupt(pin), blink, CHANGE); Ipak, stariji kodovi esto koriste direktne External
sposobnos u prekida
} interrupt-brojeve a ti su kod estih plo a na pinu: Interrupts
. (nastavak)
void loop() { Plo a: int.0 int.1 int.2 int.3 int.4 int.5
digitalWrite(pin, state); Uno,Ethernet 2 3
} Mega2560 2 3 21 20 19 18
void blink() { 32u4-bazirani 3 2 0 1 7
state = !state; Due možeš navesti pin-number na svim nožicama
Zero tako er sve osim 4 možeš navesti u attachInterrupt
Funkcija izra unava vrijednost specificiranog bit-a Parametar: Sintaksa: FUNCTIONS
bit() (bit 0 is 1, bit 1 is 2, bit 2 is 4, itd.). n: je bit ija se vrjednost izra unava bit(n) Bits an Bytes
x: numeri ka varijabla koja se "anulira"
FUNCTIONS
bitClear() Funcija postavlja bit numeri ke vrijednosti na 0 n: definira koji se bit "anulira" po evši od bitClear(x,n) Bits an Bytes
0 za najniže ozna en (s desna)
x: broj iji se bit o itava
FUNCTIONS
bitRead() Funkcija ita bit od broja n: definira koji se bit o itava po evši od bitRead(x,n) Bits an Bytes
0 za najniže ozna en (s desna)
7
x: broj iji se bit setira FUNCTIONS
bitSet() Funkcija postavlja (upisuje 1 na . .) bit numeri ke varijable n: definira koji se bit postavlja po evši bitSet(x,n) Bits an Bytes
od 0 za najniži (s desna)
x: broj iji se bit upisuje (pamti)
FUNCTIONS
bitWrite() Funkcija upisuje bit numeri ke varijable n: definira koji se bit upisuje po evši od bitWrite(x,n,b) Bits an Bytes
0 za najniži (s desna)
Ekstraktira najviši (krajnji lijevi) bajt rije i (ili FUNCTIONS
highByte() drugi niži bajt od opsežnijeg tipa podataka)
x: vrjednost bilo koje vrste highByte(x) Bits an Bytes
Ekstraktira najniži (krajnji desni) bajt varijable FUNCTIONS
lowByte() (npr. rije i).
x: vrjednost bilo koje vrste lowByte(x) Bits an Bytes
x: vrjednost bilo koje vrste
Pretvara vrjednost u word vrstu podataka ili kreira word(x) FUNCTIONS
word() word iz dva bajta
h: najviši (lijevi) bajt od word
word(h,l) Bits an Bytes
l: najniži (desni) bajt od word
Primjer:
int LEDpin = 5; // LED-svjetle a dioda je spojena na pin 5
int switchPin = 13; // trenutni prekida je na13,a druga strana na masi
bool running = false; // ili nestandardna verzija: boolean running = false;

void setup() {
varijabla sadrži TRUE (istina) ili FALSE (neistina).
pinMode(LEDpin, OUTPUT);
Boolean varijabla zauzima jedan bajt u memoriji.
pinMode(switchPin, INPUT);
bool digitalWrite(switchPin, HIGH); // uklju uje otpornik za pokretanje
} VARIABLE
void loop() { Data Types
if (digitalRead(switchPin) == LOW)
{ // prekida je pritisnut - pullup drži pin pod naponom (high) normalno
delay(100); // kašnjenje isklju enja prekida a
running = !running; // prekap a running varijablu
digitalWrite(LEDpin, running) // signalizira putem LED-diode
Nestandardna varijanta bool tipa varijable.
boolean Preporu a se korištenje standardne varijable bool. }
}

....
Break služi za izlaz iz petlji iniciranih nalozima
Uobi ajeno je unutar petlje if (uvjet){nalog ako je STRUCTURE
for, while ili do…while, ignoriraju i uvjete
break definirane u petlji. Tako er izlazi iz switch…case
definiran neki uvjet (fukcijom if) uvjet ispunjen; Control
iza koje može slijediti nalog break; break;} Structure
naloga.
. . . ostatak petlje
Primjer: VARIABLE
byte Sprema 8-bitnu vrijednost, u rasponu 0-255
byte b = B10010; // "B" je binarni formatizer (B10010 je decimalno 18) Data Types

Parametri: x: vrijednost bilo kog tipa Sintaksa: VARIABLE


byte() konvertira vrijednost u bajtni tip podataka
. bajtovima byte(x) Conversion
8

Vrsta podatka koja zauzima 1 bajt memorije za Primjer: Oba izraza ispod su Detaljno o ASCII
spremanje vrijednosti znakova. Slovne vrijednosti ekvivalentna, jer je decimalna standardnim i prošire-
se upisuju unutar apostrofa (npr: ´A´), a oznaka slova A po ASCII tabeli 65 nim kodovma za razna
višeslovni stringovi izme u navodnika ("ABC"). char myChar = 'A'; podru ja Europe, te VARIABLE
char No, i slovne vrijednosti se pamte u broj anom
char myChar = '65'; pretvorbi izme u Dana Types
obliku, koriste i tzv. ASCII tabelu broj anih oznaka
Tako er, dopustiv je i izraz: 'A'+1, pojednih oblika vidi:
za pojedina slova, pri emu je nad tim oznakama
a rezultat e biti 66, što u ASCII http://www.orbus.be
dopušteno vršiti i arimeti ke operacije. Detaljnije
tabeli odgovara slovu B /pdt/pdt0026.htm
vdi: www.arduino.cc/en/Serial/Println.html

Sintaksa: VARIABLE
char() Pretvara vrijednost u char tip podataka Parametar x je vrijednost bilo kog tipa
char(x) Conversion
const float pi = 3.14;
Konstante definirane sa const
Klju na rije , koja ozna ava konstantu, odnosno float x;
poštuju pravila koja važe za
varijabli bilo koje vrste daje "Read only" svojstvo // ....
varijable scoping, koje upravljaju
(samo za itanje), dakle iako se varijabla iza x = pi * 2; // prikladno
drugim varijablama, pa se zbog VARIABLES
const može koristiti kao svaka druga varijabla za korištenje const u
zamki koje prate nalog #define, Variable
const (npr. u aritmeti kim operacijama), ne može joj
preferira korištenje const umjesto
ra unanju Scope &
se mijenjati vrijednost. Shodno tome, npr.
#define, koja je neprikladna i za Qualifiers
pokušaj dodjele vrijednosti operatorom = (assign) pi = 7; // ilegalan
defniranje nizova (arrays).
proizvest e grešku prevodtelja (compiller error) – pokušaj dodjele (tj
Op enito, preferira se korištenje
vidi primjer u predzadnjoj koloni. mijenjanja) vrijednosti
const umjesto #define.
konstante

Uklapa broj u granice zadanog opsega. Ako je broj


manji ili ve i od granica raspona, postavlja mu Parametri: x: broj bilo kog tipa
Sintaksa: FUNKTIONS
constrain() vrijednost na donju ili gornju grani nu vrijednost . a: donja granica opsega
constrain(x, a, b) math
Primjer: sansVal = constrain(sensVal, 10, 150); . b: gornja granica opsega
// svodi o itanje senzora u zadani raspon 10 -150

....
nalog preska e ostatak trenutne iteracije ako uvjet
Uobi ajeno unutar petlje stoji neki if (uvjet){nalog ako je STRUCTURE
nje ispunjen, u petljama (for, while, do…while) i
continue nastavlja (ispituju i uvjete petlje) sa slijede im
uvjet (definiran fukcijom if) iza uvjet ispunjen; Control
koga slijedi nalog continue; continue;} Structure
iteracijama.
. . . ostatak petlje
izra unava trigonometrijske funkcije. Rezultat za
sin() sin() i cos() e biti vrijednost izme u –1 i 1, a
Kut u zagradi treba zadati u radijanima (u float tipu vrijednosti) FUNKTIONS
cos() za tan() izme u – beskona no i + beskona no. Rezultat se prikazuje kao broj s dvostukom preciznoš u (double) Trigonomethry
tan()
ctg() = 1/tan() (kotangens je 1/tangens kuta)
9

Pauzira program za vrijeme upisano u zagrade u Sintaksa: delay(ms)


milisekundama (tip podatka: unsigned long) Primjer:
Lako je programirati trep u LED diodu sa delay() int ledPin = 13; //LED vezana na digital-pin 13
funkcijom, a ona se koristi i za kratke zadatke, kao npr. za void setup()
otklanjanje smetnji. Funkcija me utim ima i nedostatke: {
Ni jedno itanje senzora, matematski izra uni ili
pinMode(ledPin, OUTPUT); // postavlja nožicu kao izlaznu
manipulacija pin-ovima, ne može se vršiti za trajanja
} FUNKTIONS
delay() delay() odgode, tj ve ina aktivnosti se zaustavlja. Stoga
void loop() Time
iskusniji programeri izbjegavaju koristiti delay() za
doga aje duže od 10 ms. Alternativu za kontrolu vremena {
omogu uje funkcija milis() – vidi i primjer ispod nje. digitalWrite(ledPin, HIGH); // pali LED-diodu
Ipak, delay() ne sprje ava prekide (interrupts) na Atmegi, delay(1000); // ekanje 1 sekundu
jer se komunikacija na RX pinu bilježi, PWM (analogWrte) digitalWrite(ledPin, LOW); // gasi LED-diodu
vrijednosti i stanja pin-a se održavaju, pa interrupts() delay(1000); // ekanje 1 sekundu
uredno radi po o ekivanju. }

Primjer: generiranje niza ipulsa s periodom od cca 100 mikrosekundi.


Pauzira program za vrijeme upisano u zagrade u
mikrosekundama (milionti dio sekunde) int outPin = 8; // postavlja pin 8 kao digital pin
Sintaksa; delayMicroseconds( s) void setup()
Ttip podatka u zagradi treba biti: unsigned int {
(pozitivan cjelobrojni oblik – detaljnije vidi na linku). pinMode(outPin, OUTPUT); // postavlja pin 8 kao ilazni pin }
void loop() FUNTIONS
delayMicroseconds() Trenutno je najduže trajanje pauze po ovoj Tme
funkciji 16383. što se može promijeniti u budu im {
digitalWrite(outPin, HIGH); // aktivira nožicu
verzijama Arduina. Za duže pauze može se
delayMicroseconds(50); // pauziranje 50 mikrosekundi
koristiti delay()
digitalWrite(outPin, LOW); // deaktivira nožicu
Nije garantirano precizno kašnjenje za vrijeme ispod 3 s delayMicroseconds(50); // pauziranje 50 mikrosekundi
Kod Arduna iznad modela 0018 ne sprje ava interrupts()
}

Isklju uje aktivni prekid (interrupt).


Sintaksa:
detachInterrupt() Parametri :
detachinterrupt(prekid) FUNKTIONS
za detalje vidi i prekid: broj (oznaka) prekida koji se želi isklju iti.
detachInterrupt(digitalPinToInterrupt(pin)); External Interrupts
attachinterrupt() Detaljnije vidi: attachinterrupt()
detachinterrupt(pin) (samo Arduino Due i Zero)
pin: broj (oznaka) pina koji se isklju uje (Arduino Due)

Izlazni (OUTPUT) digitalni pin postavlja u stanje HIGH (5 ili 3,3 V zavisno o tipu plo e)
Sintaksa:
ili LOW (0 V, tj. potencijal mase). Nožicu konfigurirati kao izlaznu nalogom pinMode(). FUNCTIONS
digitalWrite() Na Ulaznom digital pinu nalog uklju uje (HIGH) ili isklju uje (LOW) interni pullup-otpor
digitalWrite(pin, HIGH ili LOW)
Dgital I/O
pin je broj (oznaka) pin-a
na nožici. Za uklju enje pullup-otpornika preporu a se postava pinMode(INPUT-PULLUP)
10
Sintaksa: digitalRead(pin) // pin je broj (oznaka) pin-a u int
itava stanje (HIGH ili LOW) sa specificirane . (cjelobrojnom) obliku.
digitalne nožice. Primjer desno postavlja pin 13 na Primjer:
vrijednost pin-a 7, koji je deklariran kao ulazni. int ledPin = 13; // LED prikju en na digital pin 13
(Sekvenca upravlja LED-diodom zavisno o stanju tipkala) int inPin = 7; // tipkalo priklju emo na digital pin 7
Sintaksa: int val = 0; // varijabla koja se pamti kao o itanje
Napomene: void setup(){ FUNCTIONS
digitalRead()
Ako je ugra ena, LED dioda je esto priklju ena na nožicu 13 pinMode(ledPin, OUTPUT); // digital pin 13 postavlja za izlaz Dgital I/O
i uobi ajeno nosi naziv ledPin pinMode(inPin, INPUT); // digital pin 7 postavlja kao ulazni
Ako nožica nije spojena ni na što, digitalRead() može }
pokazivati HIGH ili LOW po slu ajnom redosljedu. void loop(){
Analogne ulazne nožice ne mogu se konfigurirati kao digialne val = digitalRead(inPin); // itava ulaznu nožicu
(to su A0, A1, . . . itd) digitalWrite(ledPin, val); // potavlja LED na vrijednost tipkala
}
služi za ponavljanje rutine u petlji poput naredbe do{ Primjer
do STRUCTURE
while, ali je uvjet za ponavljanje na kraju petlje, delay(50); // eka stabilizaciju senzora
do…while pa e se ona uvijek izvesti, najmanje jedan puta. x = readSensors(); // ita senzor
{ //blok naredbi Control
}while (ispitivanje uvjeta); Structure
Primjer ponavlja radnje iza do dok je x ispod 100 }while (x < 100):

su brojevi s pomi nim zarezom (floating point) ali Napomena:


dvostruke preciznosti. Na Uno i drugim na Atmegi Korisnici koji prenose kod s varijablama dvostrue preciznosti
double temeljenim razvojnim plo ama zauzimaju 4 bajta. (double) iz drugih izvora, trebali bi provjeriti da li se izvorna
VARIABLES
(vidi i float) Na Arduinu Due, double brojevi su 8-bajtni, tj. preciznost može aplicirati na Arduino razvojnim plo ama
Constants
koriste 64 bitnu preciznost. temeljenim na Atmega miroprocesoru.
if (uvjet1)
U strukturi if…else odluke, else omgu uje Svaka provjera uvjeta vodi do
{nalozi ispunjen uvjet1;}
else provedbu naloga koji se trebaju izvršiti ako uvjet u slijede e, ako je uvjet ispunjen, u STRUCTURE
else if(uvjet2)
(vidi tako er i zagradi if () nije ispunjen. Me u njih se može protivnom, izvršit e se nalozi u Control
{nalozi ispunjen uvj.1 i 2;}
if…else) uklju iti i nova if…else naredba, i tako program njenoj else sekvenci. Else Structure
else
strukturirati u više nivoa odlu ivanja. sekvence su uvijek neobavezne
{nalozi neispunjen uvj.1;}
je tip varijable-decimalnog broja s tzv. "pomi nim Imaju samo 6–7 decimalnih znakova (zbirno ispred i iza zareza). Za
zarezom" (floating-point), mogu u granicama razliku od drugih platformi, gdje double – tip brojeva može i i do 15
od -3.4028235E+38 do 3.4028235E+38. Pamte znamenkaste preciznosti, kod Arduina double i float imaju jednaku
se sa 32 bita, tj. u 4 osam-bitna bajta. preciznost.
float esto se koriste za aproksimaciju analognih Floating-point brojevi nisu egzaktni i mogu pokazati udne rezultate pri
vrijednosti, jer omogu uju ve u rezoluciju od usporedbi. Takoprmjerice 6.0/3.0 može biti razli it od 2.0. VARIABLES
Sintaksa: cjelobrojnih vrjednosti (int). Obra uju se znatno sporije od cjelobrojnih, pa ih treba izbjegavati npr. Data Types
float imeVarij = vrjed; Ako se pišu bez decimalne to ke, Arduino e ako se u kakvoj petlji izra unava kakva vrijednost, kriti na za tajming.
ih shvatiti kao int, odnosno prevest e ih u Primjeri:
Zadanu "vijed"nost cjelobrojne (integer) – vidi primjer desno. x=1; // vrijednosti x i y su pretpostvljeno cjelobrojne (integer)
treba dati u float obliku Valja voditi ra una o navedenome, da se izbjegnu y=x/2; // Rezultat je 0 jer cjelobrojni iznosi nemogu imati decimala
pogrešne ra unice u Arduino-programiranju. z = (float)x/2.0; // dat e rezultat 0.5 samo ako se pisalo 2.0 a ne 2
11

Varijablu bilo kog tipa pretvara u float tip podatka Parametar: Sintaksa: VARIABLES
float() (varjablu - decimalni broj s pomi nim zarezom) x: je varijabla bilo kog tipa float(x) Conversion

Konstante s pomi nim zarezom se za vrijeme


prevo enja (kompajliranja) koda prevode u Primjeri:
floating-point konstanta predstavlja izraz: ija je vrijednost:
vrijednosti na koje upu uje izraz kojim su zadane.
10.0 10 10
Mogu biti zadane u decimalnom ili
Floating Point 2.34E5 2.35*10^5 234000 VARIABLES
eksponencijalnom obliku. E i e su jednako valjani
Constants simboli za eksponencijalni oblik.
67e-12 67.0*1/10^12 .000000000067 Constants
Poput cjelobrojnih konstanti (integer constants), i Sintaksa:
ove s pomi nim zarezom doprinose boljoj itljivosti n = .005;
koda.

naredba opetuje naloge unutar viti astih zagrada inicijalizacija uvjet broja
iza naredbe. Za odbrojavanje i zaustavljanje petlje
uobi ajeno se koristi (uzlazni, rje e silazni) broja . for(int x=0; x<100; x++)
Naredba je korisna za sva ponavljaju a izvo enja, {
a esta je uporaba u kombinaciji sa nizovima za println(x); // printa 0 – 99
operacije nad grupom podataka ili pin-ova. } nalog komentar Sintaksa:
for petlje se u C jeziku koriste puno fleksibilnije STRUCTURE
for petlja nego u nekim drugim programskim jezicima. Bilo for (inicijalizacija; uvjet; broja ) Control
koji ili svi elementi zaglavlja (inicijalizacja, uvjet, { nalozi; Structure
broja ) mogu nedostajati (osim to ka-zareza). Uz }
(vidi i while)
to, za te elemente može biti korištena svaka
valjana C-naredba sa u C-u valjanim tipom
podataka, uklju ivo float. Ovakvi nesvakidašnji
tipovi for naloga mogu riješiti neke rijetke
programske probleme

(idi na:) – premješta izvo enje na ozna enu Neki programeri zaziru od uporabe
{goto label;} STRUCTURE
(label) to ku programa (navedenu iza goto). goto naredbe, jer nepažljiva upo-
goto Razumnom uporabom goto naloga može se raba može stvoriti neodre en tijek
label: je proizvoljno ime Control
-oznaka progr.sekvence Structure
pojednostaviti kod programa. programa, koji se teško ispravlja.
12

Op enito jedini ni bit (1) ozna ava prisustvo, a nulti bit (0) odsustvo indikativnog elementa u digitalnom sustavu,
pa se izme u ostaloga to primijenjuje i na stanje napona na nožicama elektroni kih elemenata. Tako se prisustvo
napona bilježi kao (1) ili HIGH (visoko), a stanje bez napona sa (0) ili LOW (nisko). Ta stanja mogu biti o itana
nalogom digitalRead() ako je nožica (pin) nalogom pinMode() definirana kao izlazna (OUTPUT), ili se ta stanja
mogu zadati, odnosno postavljati nalogom digitalWrite(), ako je nožica nalogom pinMODE() definirana kao
ulazna (INPUT). Razmotrimo najprije mogu nosti stanja HIGH:
Pojam HIGH primijenjen na nožice (pin) nešto se razlikuje, zavisno o tome da li je nožica ulazno (INPUT) ili izlazno
(OUTPUT) konfigurirana.
Arduino (npr. model Atmega) e na ulazno (INPUT) konfiguriranoj nožici po nalogu digitallRead() o tati, tj. VARIABLES
HIGH | LOW izvijestiti stanje HIGH, ako je napon na nožici ve i od 3V na 5-voltnoj plo i, ili ve i od 2V na 3.3-voltnoj razvojnoj Constants
plo i. U protivnom, o itanje e biti LOW.
Me utim, ulaznoj nožici se nalogom digitalWrite() može nametnuti stanje HIGH, neovisno o stanju koje name e
vanjski strujni krug. Nalog naime uklju uje interni "potezni" otpornik 20k koji e podi i stanje nožice i ako je
izvorno bilo nisko (LOW).
Ako izlazno (OUTPUT) konfiguriranu nožicu nalogom digitalWrite() postavimo na HIGH, napon na nožici e biti
nazivni, tj. 5V na 5-voltnoj, odnosno 3.3V na 3,3V plo i. Ovo stanje može pokrenuti strujni tok, npr. "upaliti" LED-
diodu, priklju enu s nožice preko serijskog otpornika na masu. Suprotno tome, nametnuto LOW stanje, uzrokovat
e 0V na nožici (za obje verzije razvojne plo e), te npr. upaliti e LED-diodu priklju enu preko serijskg otpornika na
+5V, odnosno +3.3V zavisno o verziji razvojne plo e.

if (conditional) if (uvjet) ispituje je li uvjet u zagradi ispunjen. Ako nisu pisane viti aste zagrade, if (uvjet) {//nalozi;} coditional
(vidi i if...else) Ako nije ispunjen, nalozi koji slijede se preska u. uvjetovan je samo prvi nalog iza if if (uvjet) //nalog; (Contr.Structure)
== x == y varijable su jednake == se ne smije se zamijeniti sa =
!= x != y varijable su nejednake STRUCTURE
<, > x<y i x>y x je manje od i x je ve e od y ovo su poredbeni operatori Comparison
x <= y i x >= y manje ili jednako i ve e ili jednako (Comparison Operators) Operators
<=, >=
if () provjerava uvjet u zagradi, pa ako je Pažnja! Ne smije se umjesto == if (uvjet)
if … else ispunjen, izvršava se slijed naredbi iza if naloga. poredbeog operatora za provjeru {nanizati linije naredbi;
STRUCTURE
Uvjet u zagradi mora sadržati neki od, ili više da li je neki x jednak zadanoj }
(vidi tako er i Control
poredbenih operatora (manje, ve e, jednako, else (neobavezno)
detalje za else) vrijednosti, koristiti =, koji x-u Structure
nejednako, ve e ili jednako, manje ili jednako) {naredbe ako uvjet nije
Jednostavan if nalog ne mora sadržavati dio else. dodijeljuje zadanu vrijednost ispunjen;}

Arduinov Atmega mikrokontroler ima ugra eni pull-up otpornik (interno spojen na napajanje). Ako preferirate
njegovo korištenje umjesto vanjskog pull-up otpornika, možete koristiti argument INPUT_PULLUP u pinMode()
VARIABLES
INPUT_PULLUP nalogu. Primjer takve primjene može se vidjti u: http://www.arduino.cc/en/Tutorial/InputPullupSerial Constants
ULAZNE NOŽICE KONFIGURIRANE SA INPUT ILI INPUT_PULLUP MOŽE UNIŠTITI PRIKLJU ENJE NA
NEGATIVNI NAPON (NAPON MANJI OD NAPONA MASE), ILI VE I NAPON OD NAZIVNOG NAPONA PLO E (5 ili 3 V)!
13

Digitalne nožice (digital pin) se mogu koristiti kao ulazne (INPUT), INPUT_PULLUP i kao izlazne (OUTPUT).
Konfiguriranjem nožice nalogom pinMode(), mijenjaju se njena elektri na svojstva kako slijedi:
Ulazne (INPUT) nožice
Za Arduino (Atmega) pinove konfiguirane nalogom pinMode() kao ulazne (INPUT), kaže se da su u stanju "visoke
impendance". One imaju vrlo male zahtjeve na strujni krug koji vrši o itavanje, jer su im otpori ekvivalentni
serijski vezanom otporniku od 100 megaoma ispred nožice. To ih ini prikladnima za itanje raznih senzora.
PULL-UP i PULL-DOWN VARIABLES
INPUT | OUTPUT Ako bi se me utim, na ulaznoj nožici o itavao otvoreni prekida , nožica e "plutati" i može davati nepredvidljiva Constants
itanja. Zbog oiguranja ispravnog o itanja, koristi se tzv. pull-up ili pull-down otpornik, koji povla i otvoreni
prekida u poznato stanje. Otpornik od 10 k dovoljno je mali za pouzdano izbjegavanje "plutanja", a istodobno
dovoljno je velik da ograni i struju kad je sklopka zatvorena. Više o tome nudi uputstvo DigitalReadSerial (engl.)
Korištenje pull-down otpornika rezultira stanjem LOW na ulaznoj nožici pri otvorenom, a HIGH pri zatvorenom
prekida u.
Obrnuto, pull-up otpornik osigurava stanje ulazne nožice HIGH pri otvorenom, a LOW pri zatvorenom prekida u.

Nalogom pinMode() izlazno konfigurirane nožice (OUTPUT) u stanju su niske impendance, što zna i da mogu osigurati ja e
struje za vanjske strujne krugove. Atmegine nožice mogu isporu iti ili apsorbirati struju do 40 mA, što je dovoljno npr. za pogon
LED-dioda. Zahtjevnija trošila (npr. motori, releji, zavojnice i sl.) moraju se napajati preko transistora ili drugih su elja –
OUTPUT elektroni kih krugova. IZLAZNE NOŽICE MOŽE UNIŠTITI KRATKI SPOJ NA UZEMLJENJE ILI POZITIVNI IZVOR SNAGE, odnosno
na previsok napon ! esto e to ožicu pretvoriti u "mrtvi pin", sa o uvanim ostalim funkcijama procesora. Zbog toga je dobro
izlazne nožice na druge ure aje spajati preko otpornika od 470 ili 1 k , ako nema potrebe za isporukom maksimalno dopustive struje.

Napomena: "Kapacitet" 16-bitnog zapisa je max. cjelobrojni


Cjelobrojni oblik (integer) je primarni tip podataka raspon veli ine 2^16 = 65536, tj. od –32768 do +32767 uklju ivo 0.
za pam enje brojeva. Arduino Uno (i druge na Ako varijable premaše maksimalni kapacitet, "prebacit" e se na
Atmegi temeljene razvojne plo e) int podatke suprotnu granicu (u oba smjera). Evo primjera (lijevo) za 16-bitni int:
int x;
spremaju kao 16-bitne vrijednosti, (odnosno kao
dva 8-bitna bajta), u podru ju od – 2147483648
x = -32768;
do 2147483648, tj. izme u –2^31 i (2^31)-1
x = x –1 //prekora en je negatvni maksimum Primjer: VARIABLES
int Negativni int brojevi se spremaju tehnikom koja se
. pasje vrijednost x prebacila na sup- int ledPin = 13; Data Types
zove 2's complement math. Najviši bit, ponekad
. rotnu granicu i sad je 32767 ili:
nazivan "sign bit" (bit predznaka), nazna uje broj
x = 32767: Sintaksa:
kao negativan. Ostatak bita se invertira i dodaje 1.
x = x+1; //prekora en je pozitvni maksimum int imevarijable = vrijednost;
Arduino barata s negativnim brojevima na o ekivani na in.
. pa se vrijednost prebacila na sup-
Ipak, mogu e su neo ekivane komplikacije pri radu sa
bitshift right (>>)operatorom. . rotnu granicu i sad je: -32768
Vidi tako er Data Type unsigned Int

VARIABLES
int() Pretvara bilo koju vrstu vrijednosti u cjelobrojnu Parametar x je vrijednost bilokog tipa int(x) Conversion
14

Cjelobrojne konstante su brojevi, direktno


korišteni u skici (programu), npr. 123. Baza Primjer Formatizer je komentar
10 (decimalna) 123 nema formatizera
Pretpostavljeno, tretiraju se kao cjelobrojne s
2 (binarna) B1111011 B radi samo s 8-bitnim vrijednostima (0-255)
bazom 10 na kakve smo naviknuti, ali to se može
promijeniti korištenjem tzv. formatizera (B,0 i 0x) 8 (oktalna) 0173 0 prihvatljivi su znakovi 0 – 7
(vidi desno) ili U i L modifikatora u nastavku: 16 (heksadecimalna) 0x7B 0x prihvatjivi znakovi: 0-9, A-F, a-f
Integer VARIABLES
Mjesto oblika cjelobrojnih konstanti s bazom 10
Constants (dekadski brojevi), specijalni modifikatori omogu- Napomena: unsigned format podrazumijeva format broja kome je Constants
mogu i raspon smješten samo na pozitivnoj strani, tj. kod 16-bitnog
uju oblik unošenja konstante i s drugim bazama:
broja od 0 do (2^16)-1, tj. 65535, umjeso od –32768 do +32767.
u ili U iza broja (npr: 33u) ozna ava unsigned format
"Unsigned" je po tome "bez predznaka" budu i nemože biti negatvan.
.l ili L iza broja (100000L) unosi broj u long formatu long je tip broja s proširenim opsegom, spremanog s 32 a ne 16 bita.
.uL ili UL (npr: 32767ul) unosi konstantu kao unsigned long Za detalje vidi opise tipova podataka unsigned Int i long
(za pojašnjenje vidi Napomenu desno)
Primjer:
Ponavlja nalog za pauziranje iza prekida pauza sa
vod setup() {}
nointerrupts(). Interrupts() dopušta neke
void loop()
važne radnje u pozadini, koje su pretpostavljeno
{
uklju ene za vrijeme pauziranja. Neke funkcije ne FUNCTIONS
interrupts() rade dok je pauziranje prekinuto, pa npr. ulazne
nointerrupts(); Interrupts
// kriti ni vremensko-osjetljivi dio koda ovdje
komunikacje mogu biti ignorirane. Pauze mogu
interrupts();
poremetiti vremenske tijekove koda, pa ih valja
// preostali dio koda smjestiti ovdje
prekinuti za izvo enja kriti nih dijelova koda.
}
Sintaksa:
isAlpha() Provjerava je li znak u zagradi slovni (alpha) Rezultat provjere je True ili False
isApha(znak)

isAlphaNumeric() Provjerava je li znak u zagradi alfanumeri ki Rezultat provjere je True ili False isAphaNumeric(znak)

isAscii() Provjerava je li znak u zagradi ASCII tipa Rezultat provjere je True ili False isAscii(znak)
FUNCTIONS
Characters
isControl() Provjerava je li znak u zagradi kontrolni znak Rezultat provjere je True ili False isControl(znak)

isDigit() Provjerava je li znak u zagradi broj (digit) Rezultat provjere je True ili False isDigit(znak)

isGraph() Provjerava može li se znak u zagradi printati Rezultat provjere je True ili False isGraph(znak)

isHexadecimal Provjerava je li u zagradi valjan heksadecimalni


Rezultat provjere je True ili False isHexadecimalDigit(znak)
Digit() broj
15

isLowerCase() Provjerava je li znak u zagradi malo slovo Rezultat provjere je True ili False isLowerCase(znak)

isPrintable() Provjerava može li se znak u zagradi printati Rezultat provjere je True ili False isPrintable(znak)

isPunct() Provjerava je li znak u zagradi interpunkcija Rezultat provjere je True ili False isPunkt(znak)

isSpace() Provjerava je li znak u zagradi praznina (blenk) Rezultat provjere je True ili False isSpace(znak)

isUpperCase() Provjerava je li znak u zagradi veliko slovo Rezultat provjere je True ili False isUpperCase(znak)

isWhiteSpace() Provjerava je li u zagradi bijeli prostor Rezultat provjere je True ili False isWhiteSpace (znak)

Ove osnovne biblioteke omogu uju razvojnim plo ama Zero i Due, te na 32u4 temeljenim, da se prikazuju kao
USB (32u4
izvorni miš ili tipkovnica s plo om povezanog ra unala. Treba ih oprezno koristiti. Funkcije poput Mouse.Move() i
Keyboard and based boards
Keyboard.print() premjestit e kursor, ili poslati pritiske na tipke priklju enom ra unalu. Preporu a se korištenje
Mouse libraries kontrolnog sustava za uklju ivanje tih funkcija (fizi ki prekida ili osigurati regiranje samo na ulaz pod kontrolom).
and Due/Zero
only)
Najbolje je prvo testirati izlaz nalogom Serial.print(), da bi znali koje su vrijednosti prijavljene Vidi primjere ovdje.

Funkcija omogu uje plo ama Leonardo, Micro i Due


slanje pritiska na tipku priklju enom ra unalu. Neke
ASCII znakove (posebno koji nisu predvi eni za ispis) Primjeri:
nije mogu e slati ra unalu. Podržano je korištenje
modifikatorskih tipki (koje mijenjaju ponašanje druge KeyboardAndMouseControl: Pokazuje naloge miša i tipkovnice u programu.
istovremeno pritisnute tipke poput Ctrl, Alt i dr.). KeyboardMessage: Šalje tekstualni niz kada se pritisne gumb. FUNCTIONS
Podržane su slijede e tipkovni ke radnje: KeyboardLogout: odjavljuje trenutnog korisnika "vru om tipkom" USB (32u4
Keyboard KeyboardSerial: ita bajt iz serijskog porta i šalje pritisak na tipku. based boards
(vidi tako er Keyboard.begin () tipkovnica po inje
Keyboard.end () tipkovnica završava KeyboardReprogram: otvara novi prozor u Arduino IDE i reprogra- and Due/Zero
Mouse) . mira plo u jednostavnim trep im programom only)
Keyboard.press () pritisnuto
Keyboard.print () tiskanje ButtonMouseControl: upravlja kretanjem kursora s 5 tipki.
Keyboard.println () utisnuto JoystickMouseControl: upravlja kretajem kursora ra unala s
Keyboard.release () otpušteno . palicom kad se pritisne gumb.
Keyboard.releaseAll () sve otpušteno
Keyboard.write () upis tipke

Ve ina Arduino razvojnih plo a ima nožicu spojenu na ugra enu LED-diodu (on-board LED) u seriji s otpornikom. VARIABLES
LED_BUILTN Konstanta LED_BUILTIN je broj te nožice. Na ve ini razvojnih plo a, ta je dioda priklju ena na digital pin 13. Constants
16

je varijabla za spremanje na proširenom prostru za pam enje. Sprema se na 4 osam-


bitna bajta, dakle zauzim 32 bita u memoriji. Opseg mogu ih vrijednosti je izme u
Sintaksa: VARIABLES
long – 2 147 483 648 i 2 147 483 647. long imeVarijable = vrijedn; Data Types
Primjer:
long speedOffLight = 186000L; // Objašnjenje sufiksa "L" vidi u opisu int().

VARIABLES
long() Pretvara varijablu bilo kog tipa u long Vra a varijablu u long obliku. long(varijabla) Conversion
void loop()
{ if (uvjet)
Petlja –omogu uje ponavljanje ciljanog slijeda naredbe ako je uvjet
Loop se primijenjuje nakon
naredbi, nanizanih iza definiranje uvjeta ispunjen STRUCTURE
loop() komandom if (uvjet) ako je uvjet ispunjen, a u
definiranja po etnih vrijednosti
else sketch
funkcijom setup
protivnom izvodi se nalog iza retka else naredbe ako uvjet nije
ispunjen
}
Funkcija može i obrnuti raspon, npr: void setup() {}
Mijenja raspon vrijednosti iz izvornog u druga iji void loop()
y = map(x, 1, 50, 50, 1);
raspon (npr iz fromLow u toLow, iz fromHigh u a tako er radi i s negativnim brojevima {
toHigh ili iz in-between u in-between). FUNCTIONS
map() Ne ograni ava vrijenosti unutar raspona, jer vrijednosti
npr: y = map(x, 1, 50, 50, -100); int val = analogRead(0);
Math
Funkcija ra una cjelobrojno, tj. ostaci val = map(val,0,1023, 0,255);
van raspona mogu biti korisne. Po želji, za ograni enje djeljenja se ispuštaju,nema zaokruženja. analogWrite(9, val);
raspona koristi se funkcija constrain() prije ili iza map().
Pimjer desno mapira analognu vrjednost u 8-bitnu }

Vra a ve u od dviju vrijednosti bilo kog tipa. Primjer: dodijeljuje o itanje senzora
Sintaksa:
Iako zvu i nelogi no, max() se esto koristi za ve em broju od tog o itanja i broja 20
max(x, y)
ograni enje donjeg kraja raspona, a min() gornjeg kraja. sensVal = max(sensVal, 20);
FUNCTIONS
max() max(a--, 0); // ovo vodi k pogrešnom rezultatu Math
Pozor: Korištenje drugih funkcija unutar zagrada
max(a,0);
može proizvesti pogrešan rezultat (vidi desno =>)
a--; // umjesto gornjega izdvoji funkciju -- van zagrada
Primjer:
unsigned long time;
void setup(){
Vra a broj mikrosekunda od pokretanja Arduino Serial.begin(9600);
programa. Vrijednost se vra a na nulu (ponovo kre e)
}
nakon približno 70 minuta. Na 16 MHz-noj Arduino plo i FUNCTIONS
micros() (npr. Duemilanove i Nano) ta funkcja ima rezoluciju od 4
void loop(){ Time
mikrosekunde (tj. vrijednost je uvijek višekratnik od 4). Na Serial.print("Time: ");
8 MHz-nim plo ama (npr. LilyPad) rezolucija je 8 mikrosek time = micros(); // ispisuje vrijeme od po etka programa
Serial.println(time);
delay(1000) // ekanje sekundu da se ne ispisuje ogromna koli ina ispisa
}
17
Primjer:
Vra a vrijeme u milisekundama (unsigned long) od unsigned long time;
pokretanja programa na Arduino razvojnoj plo i. void setup(){
Serial.begin(9600);
S obzirom da se rezultat iskazuje u obliku unsigned long, }
nastat e logi ka greška (logic errors) ako programer FUNCTIONS
milis() pokuša raditi izra une sa kra im tipom podataka (npr. int)
void loop(){
Time
Serial.print("Time: ");
ak i long tip podatka može proizvesti takvu grešku, jer je
time = millis(); //ispisuje vrijeme od startanja programa
njegova najve a mogu a vrijednost upola manja od
unsigned long koji je sav u pozitivnom podru ju. Serial.println(time); // eka sekundu (da smanji koli inu podataka)
(vidi opise tipova podataka long i unsigned long) delay(1000);
}
Primjer: dodijeljuje o itanje senzora manjem
Vra a ve u od dviju vrijednosti bilo kog tipa.
broju od tog o itanja i broja 100 Sintaksa:
Iako zvu i nelogi no, min() se esto koristi za ograni enje
gornjeg kraja raspona, a max() donjeg kraja. sensVal = max(sensVal, 100); min(x, y);
// ujedno grani i da rezultat nikad ne premaši 100 FUNCTIONS
min() Math
min(a++, 100); // ovo vodi k pogrešnom rezultatu
Pozor: Korištenje drugih funkcija unutar zagrada
max(a,100);
može proizvesti pogrešan rezultat (vidi desno =>)
a++; // umjesto gornjega izdvoji funkciju ++ van zagrada
Funkcija omogu uje plo ama Leonardo, Micro i Due kontrolu kretanja kursora
na priklju enom ra unalu. Promjena položaja ursora, uvijek je relativna u odnosu na
prethodni položaj. Podržane su slijede e radnje:
Mouse.begin () miš po inje
Mouse.Move() i Keyboard.print() treba oprezno koristiti. Te funkcije e FUNCTIONS
Mouse.click () klik
premjestiti kursor, ili poslati pritiske na tipke priklju enom ra unalu. Preporu a se USB (32u4
Mouse korištenje kontrolnog sustava za uklju ivanje tih funkcija (fizi ki prekida ili osigurati
Mouse.end () miš završava
based boards
(Vidi tako er Mouse.move () pomak miša
regiranje samo na ulaz koji je pod kontrolom). Najbolje je prvo testirati izlaz nalogom and Due/Zero
Keyboard) Mouse.press () pritisak mišje ipke
Serial.print(), da bi znali koje su vrijednosti prijavljene. Neke na ine rukovanja time only)
Mouse.release () otpuštanje mišje tipke
vidi na Arduino uputama (engleski):
Mouse.isPressed () mišja tipka stisnuta
http://www.arduino.cc/en/Tutorial/KeyboardAndMouseControl ,
ButtonMouseControl , i JoystickMouseControl .
void setup() {}
Obustavlja pauziranje, koje se može nastaviti void loop()
nalogom interrupts(). Pauze mogu poremetiti {
vremenske tijekove koda, pa ih valja prekinuti za noInterrupts(); FUNCTIONS
nointerrupts() izvo enja kriti nih dijelova koda. Neke funkcije ne // kriti ne, vremenski osjetljive kodove smjestiti ovdje Interrupts
rade dok je pauziranje prekinuto, pa npr. ulazne interrupts();
komunikacje mogu biti ignorirane. // ostale kodove nizati ovdje
{
Napomena: Za reproduciranje razne
prekida generiranje pravokutnih valova aktiviranih
noTone() nalogom tone(). Nema u inka ako ton nije
visine tonova na više pin-ova, mora se Sintaksa: FUNCTIONS
(vidi i tone() ) pozvati noTone() na jednom pinu, prije noTone(pin) Advanced I/O
generiran. iniciranja tone() na drugom.
18
Primjer:
int ledPin = 13; // LED je na digital pinu 13
pinmode(pin, mode);
void setup() {
konfigurira nožicu u zagradi kao ulaznu ili izlaznu
pinMode(ledPin, OUTPUT);
(funkcionalnosti nožica vidi u opisu digital pins) pin je broj (oznaka) nožice
Od Arduino 1.0.1 mogu e je uklju iti ugra ene pullup . // postavlja digital pin kao izlazni mode je:
otpornike nalogom pinMode(INPUT_PULLUP), dok } INPUT (za ulazni pin), FUNCTIONS
pinMode() konfiguracija INPUT izri ito isklju uje interni pullup. void loop() { OUTPUT (izlazna nožica) Digita I/O
digitalWrite(ledPin, HIGH); INPUT_PULLUP
. // uklju uje LED-diodu
Analogne nožice (A0, A1 . . . itd.) se ne mogu (uklju uje ugra eni otpornik
delay(1000); // eka sekundu
konfigurirati kao digitalne. za interno napajanje slabijih
digitalWrite(ledPin, LOW); // gasi LED trošila, poput LED-dode)
delay(1000); // ekanje 1 sekundu
}
izra unava vrijednost potencije, može i s razlom- Sintaksa:
Baza i eksponent se zadaju kao float FUNCTIONS
pow() ljenim eksponentom. Prikladna je za generiranje
Rezultat se vra a u obliku double
pow(baza, eksponent)
Math
eksponencijalnog niza vrijednosti ili krivulja.
sprema podatke u fleš-(programsku) memoriju umjesto u SRAM, gdje
Sintaksa:
se ina e spremaju (za Arduino plo e dostupne su naime razne vrste memorije).
const dataType imeVarijable [] PROGMEM =
Ta klju na rije je varijabilni modifikator, koga treba koristiti samo s tipovima
{data0, data1, data3 ...};
podataka definiranim u biblioteci pgmsoace.h dostupnoj samo u AVR arhitekturi.
dataType je bilo koja vrsta varijable
Zato na vrhu skice (programa) prvo treba uklju iti: #include <avr /pgmspace.h>
ime varijable je naziv za ciljani niz podataka VARIABLES
PROGMEM Treba re i, da u razim verzijama Arduina PROGMEM negdje radi, a negdje ne.
Matrice Utilityes
Preporuka je slijede a:
const dataType imeVariable[] PROGMEM = {}; // koristi ovaj oblik esta je potreba raditi s puno teksta, npr. kod projekata
const PROGMEM dataType imeVariable[] = {}; // ili ovaj oblik sa LCD zaslonom za postavljanje nizova teksta, što je
ustvari dvodimenzionalna matrica. Te velike strukture
const dataType PROGMEM imeVariable[] = {}; // a ne ovaj
prikladno je spremati u programsku memoriju.
Detaljnije i primjere vidi u engleskom izvorniku opisa PROGMEM
mjeri trajanje impulsa (HIGH ili LOW) na nožici. Na Primjer:
primjer, ako je vrijednost HIGH, pulsein() eka da pin Sintksa:
int pin = 7; pulsein(pin, value) ili:
dosegne stanje HIGH, starta mjerenje vremena, eka unsigned long duration;
stanje pina LOW i zaustavlja mjerenje vremena. Potom pulsein(pin, value, timeout)
void setup() {
vra a duljinu impulsa u mikrosekundama - ili 0 ako nije pin: oznaka nožice (int)
pinMode(pin, INPUT); FUNCTIONS
pulseIn() primljen puni impuls unutar zadanog vremena (timeout).
} value: tip impulsa (HIGH ili LOW) Advanced I/O
Ovo mjerenje je odre eno empirijski i može griješit u timeout (opcionalno): vrijeme
kra im impulsima. Radi u podru ju od 10 mikrosekndi do void loop()
{ ekanja da se impuls
3 minute. Funkcija radi samo ako je aktivian interrupts(). kompletira (mikrosekunda).
Ako je funkcija pozvana kad je pin ve visok (HIGH), duration = pulseIn(pin, HIGH);
} Rezultat je unsigned long tipa
ekat e i izmjeriti trajanje sljede eg impulsa.
Sintaksa:
generira pseudo-slu ajne brojeve. random(max) ili: FUNCTIONS
random() Vra a slu ajni broj u granicama opsega min i max-1 u random(min, max) Random
long obliku (broja pove ane preciznosti). max: gornja granica opsega Numbers
min: donja granica (opcija)
19
Ako je važno da se niz vrijednosti
generiranih sa random() razlikuju na Primjer:
kasnijim izvršenjima skice, koristite long randNumber;
randomSeed() za inicijaliziranje void setup(){
generatora slu ajnih brojeva s prili no Serial.begin(9600);
inicjalizira generator pseudo-slu ajnih brojeva na
slu ajnim unosom, kao što je randomSeed(analogRead(0)); FUNCTIONS
analogRead() na nepovezanom pinu. }
randomSeed() proizvoljnoj to ki u slu ajnom nizu, koji je uvijek Random
isti, iako je vrlo dug i slu ajan. void loop(){ Numbers
Nasuprot tome, ponekad može biti
randNumber = random(300);
korisno imati pseudo-slu ajne sekvence
koje se to no ponavljaju. To se može Serial.println(randNumber);
posti i pozivanjem randomSeed() sa delay(50);
fiksnim brojem prije pokretanja slu ajnog }
niza.

Obje sintakse desno su valjane. STRUCTURE


Klju na rije return obustavlja prethode u {return;} ili
return funkciju i (po potrebi) vra a zadanu vrijednost
Pod "vrijednost" se podrazumijeva
{return vrijednost;}
Control
bilo koja varijaba ili tip konstante. Structure

Koristi se za komunikaciju izme u Arduino plo e i ra unala ili drugih ure aja. Sve Arduino Funkcije: peek()
plo e imaju barem jedan serijski priklju ak: Serial (poznat i kao UART ili USART). Taj print()
if (Serial)
komunicira na digitalnim pinovima 0 (RX) i 1 (TX), kao i sa ra unalom putem USB-a. println()
available()
Stoga, ako koristite ove funkcije, ne možete koristiti pinove 0 i 1 za digitalni ulaz ili izlaz. read()
availableForWrite()
Za komunikaciju s Arduino plo om može se koristiti ugra eni serijski monitor Arduino readBytes()
begin()
okruženja. Kliknite gumb serijskog monitora na alatnoj traci i odaberite istu brzinu readBytesUntil()
prijenosa (baud rate) koja se koristi u pozivu za begin(). end()
readString()
Arduino Mega ima tri dodatna serijska porta: Serial1 na pinovima 19 (RX) i 18 (TX), find()
readStringUntil()
Serial2 na pinovima 17 (RX) i 16 (TX) i Serial3 na pinovima 15 (RX) i 14 (TX). Da bi se findUntil()
setTimeout()
ove nožice koristile za komunikaciju s osobnim ra unalom, trebat e dodatni USB-to-serial flush()
write()
adapter, jer one nisu spojene na Mega USB-to-serial adapter. Da bi ih koristili za parseFloat()
serialEvent() FUCTIONS
serial komunikaciju s vanjskim TTL serijskim ure ajem, trebamo spojiti TX pin na RX pin našeg parseInt()
Comunication
ure aja, RX na TX pin našeg ure aja, a masu Mega na masu ure aja. (Ne spajajte ove
pinove izravno na RS232 serijski port; jer oni rade na +/- 12V i mogu oštetiti Arduino
plo u.) Primjeri
Arduino Due ima tri dodatna 3.3V TTL serijska porta: Serial1 na pinovima 19 (RX) i 18 ReadASCIIString
(TX); Serial2 na pinovima 17 (RX) i 16 (TX) i Serial3 na pinovima 15 (RX) i 14 (TX). ASCII Table
Pinovi 0 i 1 su tako er povezani s odgovaraju im pinovima ATmega16U2 USB-to-TTL Dimmer
Serial ipa, koji je spojen na USB debug port. Osim toga, na ipu SAM3X, SerialUSB, Graph
nalazi se izvorni USB-serijski port. Physical Pixel
Plo a Arduino Leonardo koristi Serial1 za komunikaciju preko TTL (5V) serial-a na Virtual Color Mixer
pinovima 0 (RX) i 1 (TX). Serial je rezerviran za USB CDC komunikaciju. Više informacija Serial Call Response
Serial Call Response ASCII
vidi na stranici Leonardo getting_started i na stranici hardware_page .
20
Funkcija Setup () se aktivira samo jednom, i to Nakon aktiviranja funkcije Setup, void setup ()
STRUCTURE
setup() prilikom startanja skice za definiranje po enih budi se ili resetira Arduino razvojna {zadati po etne vrijedn;
sketch
varijabli (npr: pinMode, Serial i dr.) plo a } slijedi ostatak programa
Pomi e bajt podataka bit po bit. Po inje od najvrjednijeg (tj. krajnje lijevog) ili od
najmanje-vrjednog (desnog) bita. Za svaki bit, clock-pin (nožica sata) po inje Sintaksa:
visoko (HIGH), sljede i bit se ita iz podatkovnog retka, a zatim clock-pin bajt incoming = shiftIn (dataPin, clockPin, bitOrder)
pada nisko (LOW).
Ako smo su eljeni s ure ajem koji sinkroniziran po rastu im rubovima, moramo dataPin: pin s koga se prenosi podatak bit po bit (int). FUNCTIONS
shiftIn() osigurati da pin sata (clock-pin) bude LOW prije prvog poziva shiftIn(), npr. uz clockPin: pin na koji se prenosi o itanje sa dataPin. Advanced I/O
pomo naloga digitalWrite (clockPin, LOW).
bitOrder: redosljed pomaka bitova MSBFIRST ili
Napomena: ovo je softverska implementacija; Arduino tako er nudi SPI LSBFIRST, tj. od najvrijednijeg (lijevog) ili od najmanje
biblioteku koja koristi hardversku implementaciju koja je brža, ali radi samo na vrijednog (desnog) bita.
odre enim nožicama.

Pomi e bajt podataka bit po bit. Po inje od bita najviše (tj. krajnje lijeve) ili
najmanje bitne vrijednosti (tj. desne). Svaki bit se upisuje naizmjence na pin shiftOut(dataPin, clockPin, bitOrder, value)
podataka, nakon ega pinom sata (clock-pin) prolazi impuls (bude HIGH, pa dataPin: pin na koji se upisuje svaki bit (int)
LOW) ime poazuje da je bit dostupan.
clockPin: pin s koga se prebacuje bit po pit (int) kad
Ako smo u interakciji s ure ajem koji je sinkroniziran po rubnom porastu,
moramo osigurati da pin sata (clock-pin) bude LOW prije prvog poziva je dataPin postavljen na ispravnu vrijednost.
shiftOut(), npr. uz pomo naloga digitalWrite (clockPin, LOW). bitOrder: redosljed pomaka bitova MSBFIRST ili
LSBFIRST, tj. od najvrijednijeg (lijevog) ili od
Ovo je softverska implementacija; Arduino tako er nudi SPI biblioteku koja najmanje vrijednog (desnog) bita.
koristi hardversku implementaciju koja je brža, ali radi samo na odre enim value: podaci za izmještanje u bajtovima (byte).
nožicama
Napomena: dataPin i clockPin moraju nalogom pinMode() ve biti konfgurirani
za OUTPUT. FUNCTIONS
shiftOut() Advanced I/O

shiftOut se trenutno zapisuje za izlaz 1 bajta (8 bita) što zahtijeva operaciju u


dva koraka za izlazne vrijednosti ve e od 255.
// izvedite slijede e za MSBFIRST serial: Ispušteni su opsežnji primjeri iz izvornog teksta:
int data = 500;
shiftOut(dataPin, clock, MSBFIRST, (data >> 8)); // prebacuje highbyte https://www.arduino.cc/reference/en/languag
shiftOut (dataPin, clock, MSBFIRST, data); // prebacuje lowbyte e/functions/advanced-io/shiftout/
// ili iizvedite slijede e za LSBFIRST seral:
(link kopiraj u adresnu traku web-preglednika)
data = 500;
shiftOut (dataPin, clock, LSBFIRST, data); // prebacuje lowbyte
shiftOut (dataPin, clock, LSBFIRST, data >> 8); // prebacuje highbyte
21

je 16-bitni tip podataka


Sintaksa:
Na svim Arduino plo ama (temeljenim na ATMega i ARM Primjer: short imeVarijable = val
VARIABLES
short mikroprocesorima) short tip podataka sadrži dvije 8-bitne
Data Types
vrijednosti, tj. zauzima 16 bita memorije. To daje raspon short ledPin = 13; imeVarijable: naziv varijable
od -32768 do 32767 (minimalna mogu a vrijednost je
val: dodijeljena vrijednost
2 ^ 15, a maksimalna (2 ^ 15) – 1, uklju ivo 0).

VARIABLES
sin() vidi cos() gdje su sve trigonometrijske funkcije Data Types
operator vra a broj bajtova (bytes) u tipu varijable
char myStr[] = "this is a test";
ili broj bajtova nekog niza vrijednosti ili matrice
int i;
Operator sizeof() je koristan za rad s nizovima (npr. void setup(){
stringova i dr.) gdje je prikladno mijenjati veli inu niza bez Serial.begin(9600);
izmjene drugih dijelova programa. }
Program iz primjera desno ispisuje tekstualni niz znak po void loop() { Sintaksa:
znak. Pokušaj promijeiti tekstualnu frazu. for (i = 0; i < sizeof(myStr) - 1; i ++){ sizeof(varijabla)
VARIABLES
sizeof() Uvažite da sizeof() vra a ukupan broj bajtova, pa bi za
Serial.print(i, DEC); varijabla: varijabla ili niz Utilities
Serial.print(" = "); vrijednosti bilokog tipa
ve e tipove varijabli poput int, for petja izgledala ovako: Serial.write(myStr[i]);
for (i = 0; i < (sizeof(myInts)/sizeof(int)) - 1; i++) { Serial.println();
// u ini nešto sa myInts[i] }
} delay(5000); // to usporava program
}
Napominje se da ispravno oblikovan niz završava sa
simbolom NULL, koji ima vrjednost ASCII 0 .
FUNCTIONS
sq() kvadrira broj (množi ga sa samim sobom kao x2) x je broj bilokog tipa Math

vra a kvadratni korijen broja (kao x ili x1/2 ) x je broj bilokog tipa FUNCTIONS
sqrt() Math
rezultat je double tipa (broj dvostruke preciznosti)
Stream definira funkcije itanja u Arduinu Funkcije (koje uklju uju
To je osnovna klasa za znakove i binarne tokove. Ne zove Srteam): readBytesUntil()
se izravno, ve se poziva kad god se koristi funkcija koja readString()
se na nju oslanja. available() readStringUntil()
Kad koristimo bilo koju jezgrenu funkcionalnost koja koristi read() parseInt()
read() ili sli nu metodu, možemo sigurno pretpostaviti da parsefloat() FNCTONS
stream flush()
se poziva na Stream klasu. Za funkcije kao što je print(),
find() setTimeout() Comunications
Stream naslje uje od klase ispisa print().
findUntil()
Rije je o naprednijim funkcijama
Neke biblioteke koje se oslanjajuna Stream uz funkcije peek()
desno uklju uju: pa njihov opis nije uklju en u ovaj
readBytes() prijevod. Dostupne su na linkovma
Serial, Wire, Ethernet Client, Ethernet Server, SD
22
Primjer:
/ * RandomWalk
* Paul Badger 2007
* RandomWalk šeta gore-dolje slu ajno izme u dvije
* krajnje to ke. Maksimalnim pomakom u jednoj petlji upravlja
* parametar "step-up".
* Stati ka varijabla se pomi e gore i dolje za slu ajni iznos.
Ova tehnika je tako er poznata kao "pink noise" i "drunken walk".
*/
#define randomWalkLowRange -20
#define randomWalkHighRange 20
int stepsize;
int thisTime;
int total;
void setup ()
{
Stati na klju na rije koristi se za stvaranje Serial.begin (9600);
varijabli koje su vidljive samo jednoj funkciji. }
Me utim, za razliku od lokalnih varijabli koje se
stvaraju i uništavaju svaki put kad se neka void loop ()
{ // tetst randomWalk funkcije VARIABLES
funkcija pozove, stati ne varijable ostaju
"žive" uvaju i svoje podatke izme u poziva stepsize = 5; Variable
static
funkcija. thisTime = randomWalk (step up); Scope &
Serial.println(thisTime); Qualifiers
Varijable koje su deklarirane kao stati ke e biti delay(10);
kreirane i inicijalizirane samo kada se "njihova" }
funkcija pozove.
int randomWalk (int moveSize){
static int place; // varijabla za pohranu vrijednosti u slu ajnom hodu
. // - deklariran static tako se pohranjuju vrijednosti
// izme u poziva funkcija, ali niti jedna druga funk-
. // cija ne može promijeniti njezinu vrijednost
place = place + (random(-moveSize, moveSize + 1));
if(place < randomWalkLowRange){
// provjerava granicu opsega randomWalk-a
place = place + (randomWalkLowRange - place);
// reflektira broj u pozitivnom smjeru
}
elseIf(place > randomWalkHighRange) {
place = place - (mjesto - randomWalkHighRange);
// reflektira broj natrag u negativnom smjeru
}
return place; }
23
Tekstualni nizovi se mogu prikazati na dva na ina. Možemo koristiti String tip podataka
ve ih mogu nosti i ve ih memorijskih zahtjeva (slijede i opis), koji je dio jezgre od verzije Niz stringova (two-dimensional array)
0019, ili možemo napraviti string iz niza tipa char i null-terminirati ga. Ovaj se opis odnosi Pri radu s dugim tekstovima (npr. u projektu sa LCD
na potonju metodu. U njoj, niz mora završavati tzv. nul-znakom (NULL) displejom) esto je prikladno tekst razbiti u niz stringova.
Sve slijede e deklaracije su valjane za deklariranje stringa: Kako je i sam string takav niz, time zapravo stvaramo
dvodmenzionalni niz.
char Str1[15]; // Objava niza znakova bez inicijalizacije U tom slu aju, svaki naziv pojedinog niza shva a se kao
char Str2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'}; // Objava s dodatnim znakom - kompajler "pointer", a itav tekst e predstavljati niz poenter-a,
char Str3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '\0'}; // e dodati nul-znak kao u tre em retku što se na po etku deklaracije nazna ava zvijezdicom uz
char Str4[ ] = "arduino"; char*. Evo pirmjera:
string (char) // inicijaliziranje konstante niza u navod-
// nicma – kompajler e znati broj znakova char* myStrings[] ={"To je string 1", " To je string 2",
char Str5[8] = "arduino"; // eksplicitna inicijalizacija (konstanta+vel) " To je string 3", " To je string 4", " To je string 5"};
VARIABLES
char Str6[15] = "arduino"; // Inicijalizac. s dodatim prostorom za ve i niz void setup() {
Data Types
Serial.begin(9600);
Null terminacija
Op enito stringovi završavaju s tzv. nul-znakom (ASCII kod 0), koji kazuju gdje treba }
prestati sa itanjem stringa iz memorije, primjerice prilikom ispisa sa serial.print(). String void loop() {
dakle treba prostor i za znak više od broja znakova u tekstu. Ako ga ne dodamo kao /0 for (int i = 0; i < 6; i++){
prilikom deklariranja, bit e automatski dodan, jer e prevodilac (kompajler) string Serial.println(myStrings[i]);
automatski završiti nul-znakom. Ipak, deklaraciju poput Str2 u primjeru gdje je eksplicitno delay(500);
deklariran premali broj znakova treba izbjegavati, jer to može uzrokovati probleme. }
}
U deklaraciji string se piše u dvostrukim, a znak po znak u jednostrukim navodnicima
Dugi string pisan u više redova: u svakom redu se odlomak stringa stavlja u navodnike.
Primjeri: toInt()
Funkcije – nastavak
StringConstructors toFloat()
concat()
StringAdditionOperator toLowerCase()
Napmena: c_str()
StringIndexOf toUpperCase()
endsWith()
"Obi ni" znakovni nizovi nazivaju se nizovi sa malim s, a StringAppendOperator
equals() trim()
instance klase String nazivaju se i nizovi sa velikim StringLengthTrim
equalsIgnoreCase()
S. Imajte na umu da se konstantni nizovi, specificirani u StringCaseChanges Operatori:
getBytes()
String (object) "navodnicima", tretiraju kao char polja, (char arrays) a ne StringReplace [] (element access)
indexOf()
instance klase String. StringRemove
lastIndexOf() + (concatenation)
VARIABLES StringCharacters
length() += (append)
Klasa String, dio jezgre od verzije 0019, omogu uje nam
Data Types StringStartsWithEndsWith
remove() == (comparison)
da koristimo i manipuliramoe nizove teksta na složenije StringComparisonOperato
na ine nego što to ine "obi ni" znakovni nizovi. Mogu se replace() > (greater than)
rs
povezati nizovi, dodati, potražiti i zamijeniti podnizovi i još reserve() >= (greater than or equal
StringSubstring to)
puno toga. Zahtijevaju više memorije od jednostavnog setCharAt()
znakovnog niza, ali su i korisniji. Funkcije: < (less than)
startsWith()
String() , <= (less than or equal to)
substring()
charAt() != (different from)
toCharArray()
compareTo()
24

Konstruira instancu klase String. Postoji više verzija koje


konstrui-raju nizove iz razli itih tipova podataka (tj. formatiraju ih kao
nizove znakova), uklju uju i: Sintaksa:
konstantni niz znakova, u dvostrukim navodnicima (tj. char znak) String(vrjednost)
jedan konstantan znak, u pojedina nim navodnicima String(vrjednost, baza)
drugi primjer objekta String String(vrjednost, decimalnaMjesta)
konstantni int broj ili long int broj Vrjednost koju želimo formatirati kao String može biti:
konstantni int broj ili long int broj, koriste i odre enu bazu string, char, byte, int, long, unsigned int, unsigned long, float, double
int broj ili long int broj baza (opcionalno) je željeni broj decmala (samo od float ili double broja)
int broj ili long int broj, koriste i odre enu bazu
String() float ili double, koriste i zadana decimalna mjesta
Primjeri:
String stringOne = "Hello String"; // stvara String-konstantu
VARIABLES String stringOne = String('a'); // pretvara constant char u String
Data Types Konstruiranje niza iz broja rezultira nizom koji sadrži ASCII prikaz tog String stringTwo = String("This is a string"); // pretv.constant string u String object
broja. Pretpostavljena je baza deset, pa je: String stringOne = String(stringTwo + " with more"); // spajanje dva niza
String stringOne = String(13); // koristi constant integer
String thisString = String(13); // rezultira String-om "13" String stringOne = String(analogRead(0), DEC); // koristi int i bazu
Me utim, možete koristiti i druge baze. Na primjer: String stringOne = String(45, HEX); // koristi int i bazu (hexadecimal)
String stringOne = String(255, BIN); // koristi int i baze (binary)
String thisString = String (13, HEX); String stringOne = String(millis(), DEC); // koristi long i bazu (decimalnu)
daje string "D", koji je heksadecimalni prikaz decimalne vrijednosti String stringOne = String(5.698, 3); // koristi float i decimalna mjesta
13. Ili ako vam je draže binarno,
Vidi i: http://www.arduino.cc/en/Tutorial/StringConstructors
String thisString = String(13, BIN);
daje String "1101" koji je binarni oblik niza 13

Naredba switch uspore uje vrijednost varijable u swich (var){


zagradi sa vrijednostima (label) navedenim u case Klju na rije break (u pravilu case label1;
nalogu. Ako je vriednost varijable jednaka sadržana na kraju svakog case . nalozi1
vrijednosti u nekom od case naloga, izvršit e se naloga) osigurava izlaz iz switch break;
STRUCTURE
kod sadržan u tom case nalogu. Na taj na in naloga. Bez break, swich bi case label2;
switch … case mogu se izvršavati razli iti kodovi, zavisno od nepotrebno nastavljao izvo enje . nalozi2
Control
Structure
razli itih uvjeta, sli no if nalogu. slijede ih sekvenci do kraja swich break;
"Var" je varijabla ija se vrijednost uspore uje sa naredbe, ili do nekog break default:
konstantama (label1, label2 i label3). Dopušteni naloga. . nalozi3
tipovi podataka za "var" i "label" su int i char. break; }

VARIABLES
tan() vidi cos() gdje su sve trigonometrijske funkcije Data Types
25

Generira kvadratni val odre ene frekvencije (uz Korištenje funkcije tone() prenosi se na
50% radnog ciklusa) na pinu. Može se odrediti trajanje, izlaz PWM na pinovima 3 i 11 (na
ina e se val nastavlja sve dok se ne pozove noTone(). plo ama osim verzije Mega). Sintaksa:
Pin može biti spojen na piezo zujalicu ili drugi zvu nik za
reprodukciju tonova. Nije mogu e generirati tonove niže od tone(pin, frekvencija) ili:
31 Hz. Za tehni ke detalje, pogledajte tone(pin, frekvencija, trajanje) FUNCTIONS
tone() Istodobno se može generirati samo jedan ton. Ako se ton bilješke Bretta Hagmana. Advanced I/O
Parametri:
ve reproducira na drugom pin-u, poziv tone() ne e imati
inka. Ako se zvuk reproducira na istom pinu, poziv e NAPOMENA: ako želite reproducirati pin: nožica na kojoj želimo ton
automatski postaviti frekvenciju. razli ite visine na više pinova, morate frekvencija: Hz, unsigned long
naložiti noTone() na jednom pinu prije
nego pozovete tone() na sljede em pinu

Konstante koje iskazuju istinitost izraza ili tvrdnje


true (istina) se esto definira kao 1, a false kao 0, no true ima širu definiciju. Svaki cjelobrjni broj (int) osim 0 može zna iti VARIABLES
true | false istinu u ogi km smislu. Dakle primjerice –1, 2 i –200 se tako er prihva aju kao true, tako er u Booleovm smislu. Constants
Pamtimo da se true i false pišu malim slovma, za razliku od HIGH, LOW, INPUT, OUTPUT i dr.

Tip podataka koji zauzima 1 bajt (byte) memorije, kao i byte tip. Mogu e vjednosti su od 0 do 255.
unsigned char Zbog konsistencije Arduino stila programiranja preferira se korištenje byte tipa podataka.
Razlika je izme u unsigned int i int u tome,što je ukupno raspooživi
Na Uno i drugim ATMEGA baziranim plo ama, unsigned raspon vrijednosti od 65 535 decimalnih jednica (koliko omogu uje 16-
int (pozitivni cijeli brojevi) su isti kao i int po tome što bitni zapis) kod int oblika raspore en od –32 768 do +32 767, dok je
spremaju vrijednost na 2 bajta, ali umjesto spremanja kod unsigned int taj raspon u cjelosti na pozitivnoj strani, tj. od 0
negativnih brojeva, unsigned int sprema samo pozitivne do 65 535.
vrijednosti, daju i mogu i raspon od 0 do 65 535, Razlika nadalje leži u na inu interpretiranja najvišeg bita ("sign bitt", tj.
odnosno do (2 ^ 16) - 1). bit predznaka). U Arduino int tipu, ako je najviši (tj. lijevi) bit "1", broj
Naziv "unsigned" odnosi se na nedostatak predznaka (tzv. se interpretira kao negativan, a ostalih 15 bitova se interpretira sa tzv.
unsigned int "sign bit") kod ovog tipa vrjednosti, koji može biti samo 2' komplementarnim ra unom (2'complement math). Više o tome na: VARIABLES
pozitivan. http://en.wikipedia.org/wiki/2%27s_complement . Data Types
Due pohranjuje vrijednost na 4 8-bitna bajta (32-bita), u POZOR ! Ako varijabla (kod oba tipa) premaši granicu mogu eg
rasponu od 0 do 4 294 967 295, odnosno (2 ^ 32 - 1). opsega vrijednosti, prebacit e se na suprotnu granicu. Na primjer:
Sintaksa: unsigned int imeVarijable = vrijednost; unsigned int x
Primjer: unsigned int ledPin = 13; x = 0;
x = x+1 // x sada ima vrijednost 65 535, jer je prešao donju granicu

long varijable imaju pove an prostor za spremanje podataka od 4 8-bitna bajta tj. Sintaksa:
unsigned long ukupno 32 bita, pa je mogu i raspon vrijednosti 2^32-1 dekadskih jedinica, što iznosi unsigned long var = val;
4 294 967 295, kod unsigned tipa u cijelosti u pozitivnom podru ju uklju ivo 0. val: vrijednost data varijabli var .
26
Primjer:
Za razliku od prijašnjih jezika poput Basic-a, gdje su sve varijable bile globalne, u int gPWMval; // ovu varijablu e vidjeti sve fnkcije
programskom jeziku C, iju verziju Arduino koristi, varijable imaju svojstvo zvano void setup()
scope. {
Dok su globalne varijable vidljive svim funkcijama u programu, lokalne varijable // ...
vide samo one funkcije u kojima su deklarirane. U Arduinovom okruženju, svaka void loop()
varijabla deklarirana izvan funkcije (npr. setup(), loop(), itd.) je globalna. { Variable
variable scope Kad programi postaju ve i i složeniji, lokalne varijable su dobar na in da int i; // "i" je vidljiva samo unutar "loop" Scope &
varijabli ima pristup samo ona funkcija koja ju je deklarirala. Time se sprje avaju float f; // "f" je vidljiva samo unutar "loop" Qualifiers
programske greške, kad jedna funkcija nehotice modificira "tu e" varijable. // ...
Tako er, ponekad je dobro deklarirati i inicijalizirati varijablu unutar for (int j = 0; j < 100; j++) {
petlje for, jer to stvara varijablu kojoj se može pristupiti samo unutar // j se može dohva ati samo unutar for-loop zagrada
zagrada za tu petlju. }
}
void setup()
Void (spada u grupu varijbli) je klju na rije koja Ako se iza void navede ista funkcija { . . postava po .vrijednosti
VARIABLE
void se koristi isklju ivo u deklariranju funkcija. Iza nje iz koje je pozvana, odgovor e biti }
Data Types
se o ekuje funkcija. "no information" void loop()
{ itd.
volatile je klju na rije poznata kao kvalifikator varijable, (variable int pin = 13;
qualifier) a obi no se koristi prije tipa podataka varijable za izmijenu na ina na volatile int state = LOW;
koji kompajler a onda i program tretiraju varijablu.
void setup()
Deklariranje varijable kao volatile je direktiva za prevodilac. Kompajler je softver {
koji prevodi vaš C / C ++ kod u strojni kôd, koji predstavja stvarne upute za pinMode(pin, OUTPUT);
Atmega ip u Arduinu. attachInterrupt(0, blink, CHANGE);
Konkretno, usmjerava kompajler da u ita varijablu iz RAM-a (Random Access } VARIABLES
Memory), a ne iz registra pohrane, što je privremeno mjesto memorije gdje se Variable
volatile pohranjuju i manipuliraju programske varijable. Pod odre enim uvjetima, void loop() Scope &
vrijednost za varijablu pohranjenu u registrima može biti neto na. { Qualifiers
digitalWrite(pin, state);
U deklaraciji varijable treba primijeniti volatile kad god se njezina vrijednost može }
promijeniti ne im izvan kontrole sekcije koda u kojoj se pojavljuje, kao što je
istodobno izvršena nit. U Arduinu, jedino mjesto na kojem se to može dogoditi je u void blink()
dijelovima koda koji su po nterrupt service routine. vezani s prekidima (interrupts), {
koji se nazivaju prekidom servisne rutine (interrupt service routine). state = !state;
Primjer desno prebacue LED kada interrupt pin mijenja stanje }

Naredba while () pokre e petlju, koja se ponavlja var=0; Primjer:


while (izraz){
nepekidno, sve dok je izraz u zagradi istinit. On se while(var<200){ STRUCTURE
naredbe koje se izvode
while može promijeniti samo vanjskom intervencijom naredbe - izvest e se 200 puta -
dok je izraz istinit
Control
šadržanom u kodu (npr. provjerom nekog senzora) var++; Structure
}
ili uklju enom promjenljivom varijablom i sl. }
27

Na Uno i drugim ATMega plo ama word sprema 16-bitne unsigned brojeve. Na Due i Primjer: VARIABLES
word Zero me utim brojeve sprema u 32-bitnom unsigned (samo pozitivne) obliku. word w = 10000; Data Types

KORISNI LINKOVI (engleski)

Manuals and Curriculum Interfacing with Software


Arduino StackExchange User Code Library
Board Setup and Configuration Participate
Snippets and Sketches
Development Tools Libraries Formatting guidelines
Arduino on other Chips Tutorials All recent changes
PmWiki
Interfacing With Hardware Suggestions & Bugs WikiSandBox training
Electronics Technique Basic Editing
Output Sources for Electronic Parts
Input Related Hardware and Initiatives Documentation index
User Interface Arduino People/Groups & Sites
Storage Exhibition
Communication Project Ideas
Power supplies Languages

General

Reference Home
Korekcije, sugestije i novu dokumentaciju postati na Forum.
Tekst Arduino reference je objavljen pod licencom:
Creative Commons Attribution-ShareAlike 3.0 License.
Primjeri kodova u tutorijalu licencirani su kao public domain.
TABELA ASCII KODOVA (IZVOD ZA VELIKA I MALA SLOVA HRVATSKE ABECEDE)
(American Standard Code for Information Interchange, tj.
Ameri ki standardni kod za razmjenu informacija.
Tabela može biti iskazana u decmalnom obliku brojeva (žuto), ali i oktalnom ili heksadecimalnom
brojevnom sustavu ili u 8 bajtnom binarnom obliku (binarni kod)
Vidi se da je svaki znak izražen jednim 8-bitnim bajtom.
Kompletna tabela sadrži znatno ve i broj znakova, ukju ivo zagrade, posebne znakove, kao i znakove
koji se ne printaju.

www.inovatori.hr www.youtube.com/c/iPCRijeka

You might also like