Kommentering av programkoden er både nyttig og nødvendig. I C og C++ har vi to måter å lage kommentarer på.
I starten av programmet har vi en kommentar som går over flere linjer. (Markert med grønn skrift) Slike kommentarer starter med /* (skråstrek+stjerne) og avsluttes med */ (stjerne+skråstrek)
Det som er mest brukt er kommentarer på en linje, disse lages med dobbel skråstrek - // Når vi skriver dobbel skråstrek betyr det at resten av linja er kommentar (fram til linjeskift). Her er slike kommentarer markert med rød skrift.
Linjen i toppen, som starter med # kalles for «compiler preprocessor directives».
Det betyr at deg ikke egentlig er C-kode, men beskjeder til kompilatoren om hva den skal gjøre.
«#define» angir bl.a. konstanter som brukes i programmet. Her sier vi at hver gang vi bruker ordet LED skal det erstattes med tallet 13 (pinne nr 13)
«#include» gir kompilatoren beskjed om hvilke andre filer som hører til programmet, enten filer som vi har laget selv, eller ferdige programbiblioteker. Foreløpig har vi ingen, men det kan f.eks. være wire.h, som brukes til I2C-kommunikasjon, eller LiquidCrystal.h som er et bibliotek for LCD-paneler.
Mange standard-biblioteker kan finnes under menyen Skisse -> Inkluder bibliotek
I Setup-funksjonen, merket med rød tekst, gjøres oppsettet av mikrokontrolleren, som f.eks. oppsett av hvilke pinner som brukes som utganger, og hvilke som brukes som innganger. Foreløpig har vi satt opp én pinne som utgang, og vi har gitt denne pinne «aliaset» eller navnet LED.
Konseptet med funksjoner ser vi på senere, men vi kan nevne at funksjoner inneholder en kodeblokk, som kort og godt er en eller flere linjer kode som hører sammen.
Vi ser at starten på en kodeblokk er markert med { - venstre klammeparantes eller curly-brace på engelsk. Slutten på kodeblokka markeres med } – høyre klammeparantes.
Som vi ser har vi to funksjoner i programmet vårt, setup og loop, med hver sin kodeblokk. Loop kommer tilbake til snart. (Neste fane)
Uendelig løkke: Når vi jobber med mikrokontrollere, har vi i 99,9% av tilfellene behov for en uendelig løkke (loop). I motsetning til programmer som kjører på vanlige datamaskiner, vil vi som oftest aldri at programmet skal avsluttes. Det skal bare kjøre og kjøre til mikrokontrolleren enten får et reset-signal, eller mister spenningen.
Når vi jobber med Arduino er det loop-funksjonen som er denne uendelige løkken. Her har jeg markert funksjonen og tilhørende start- og stopp-klammer med rød skrift. For hver runde i løkken kjøres de fire kodelinjene i midten.
I et vanlig C- eller C++-program ville dette være en uendelig while-løkke. Alle while-løkker har en logisk test, omsluttet av parenteser. For å lage en uendelig løkke setter vi inn svaret på denne logiske testen, 1, altså sann. Så lenge den logiske testen er sann (og det vil 1 alltid være), så kjøres koden mellom klammeparentesene. Det vil altså se slik ut: while (1){ //Kode som kjøres }
De andre funksjonene som er brukt i koden brukes i de fleste Arduino-programmer:
pinMode() - Setter en Arduino-pinne til inn- eller utgang
digitalWrite() - Setter en utgangspinne til enten høyt eller lavt nivå (1 eller 0, 5V eller 0V)
delay() - lager en pause i programmet på et gitt antall millisekunder
I setup-funksjonen brukes pinMode til å sette pinne 13 til utgang.
Loop-funksjonen setter vekselvis pinne 13 til høyt og lavt nivå, med ett sekunds pause mellom. Legg merke til at ved å bruke delay-funksjonen på denne måten "blokkerer" vi programmet slik at vi ikke kan gjøre noe annet i mellomtiden. (F.eks. sjekke om en knapp er trykt inn) Vi kommer tilbake til teknikker for å forhindre dette lenger ut i kurset.
Andre viktige funksjoner som vi også vil komme borti ofte er:
digitalRead() – leser logisk nivå på en pinne
analogWrite() – skriver en «analog» verdi på en pinne (egentlig PWM)
analogRead() – leser en analog verdi fra en pinne (ADC)
Vi vil beskrive disse funksjonene nærmere etter hvert som vi får bruk for dem.