Professional Documents
Culture Documents
hr
1 / 34
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 .
www.inovatori.hr www.youtube.com/c/iPCRijeka
2
ARDUINO - PROGRAMIRANJE
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).
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.
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".
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
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)
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
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
....
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
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):
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
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.
VARIABLES
int() Pretvara bilo koju vrstu vrijednosti u cjelobrojnu Parametar x je vrijednost bilokog tipa int(x) Conversion
14
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)
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.
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
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.
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
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
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
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 }
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
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