Arduino IDE

Arduino IDE

I dette kapittelet gjør vi oss kjent med utviklingsmiljøet Arduino IDE og gjør oss klare til å skrive vårt første program. Vi tar utgangspunkt i hvordan utviklingsmiljøet ser ut i Windows, men det fungerer på akkurat samme måte i Mac OS. Følg guiden i Kom i gang med Arduino for å installere og konfigurere Arduino IDE.

Oversikt over utviklingsmiljøet

Utviklingsmiljøet består av en stor, hvit tekstrute der selve koden skrives. Koden som skrives der kalles skisse (sketch), og litt senere i dette kapittelet viser vi hvordan en skisse ser ut, og hvordan den skrives. Over koderuten er det knapper for seks av de vanligste handlingene:

  • verifisere en skisse
  • kompilere og laste opp en skisse til Arduino
  • lage en ny skisse
  • åpne en eksisterende skisse
  • lagre en skisse
  • vise Seriell overvåker.

Senere i dette kapittelet forklarer vi hva de nevnte handlingene innebærer, og hvordan de brukes.

Under koderuten er det en svart rute. Den bruker utviklingsmiljøet til å forklare hva som skjer. Den brukes også til å formidle eventuelle feilmeldinger.

Oversikt over Arduino IDE.

Utviklingsmiljøet dekker mange funksjoner. Det lar programmereren gjøre bl.a. disse tingene på en enkel måte:

  • skriva kode (skisser)
  • verifisere kode
  • kompilere kode
  • laste opp kode.

Skrive skisser

Skissen beskriver hva Arduino skal gjøre. Hvis vi for eksempel vil at en lysdiode skal blinke, kan vi skrive en skisse for det. Hvis utviklingsmiljøet hadde forstått norsk, kunne vi ha skrevet en kode som så slik ut:

Sett GPIO-pinne 13 til å være en utgang.

Gjør dette gjentatte ganger:
* slå  lysdioden  pinne 13
* vent i 1000 millisekunder
* slå av lysdioden  pinne 13
* vente i 1000 millisekunder.

Ettersom Arduino-utviklingsmiljøet ikke forstår norsk, må vi skrive koden på et språk som både vi og utviklingsmiljøet forstår: Arduino Programming Language (APL). Heldigvis er det enkelt å oversette norsk til APL! Da ser skissen slik ut. 

void setup() {
  pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(13, HIGH);
  delay(1000); 
  
  digitalWrite(13, LOW);
  delay(1000); 
}

BlinkLed.ino

Tips! Skissen ovenfor er den klassiske nybegynnerskissen innen Arduino-programmering. Faktum er at den allerede finnes på datamaskinen din! Klikk på Fil, Eksempel, 01. Basics og velg Blink. På eksempelmenyen finner du mange andre bra eksempler som kan være til god hjelp når du skriver dine første skisser.

Skissen består av to funksjoner (hva en funksjon er forklares i Funksjoner) som kalles henholdsvis setup og loop. Disse to funksjonene må være med i alle skisser, men avanserte skisser har ofte flere funksjoner i tillegg.

Alt som står i setup er det som Arduino bare gjør én gang (når den starter). Vi begynner med å gjøre noe med GPIO-pinne 13. Den GPIO-pinnen har en lysdiode koblet til seg (fastmontert på utviklingskortet), så vi trenger ikke koble noe maskinvare til utviklingskortet for å kunne teste denne skissen.

Ettersom GPIO-pinne 13 kan brukes som både inngang og utgang, må vi velge hvilken funksjon GPIO-pinnen skal ha. Du kan sammenligne dette med å snakke med en venn. Få mennesker kan snakke og lytte samtidig, så du må bestemme deg for hvilken av de to tingene du vil gjøre. Arduino kan "snakke" og "lytte" på forskjellige pinner, men den kan ikke snakke og lytte samtidig på samme pinne. Vi vil at GPIO-pinne 13 skal brukes som utgang (altså for å "snakke").

Alt som står i loop er det som Arduino skal gjenta om og om igjen. Vi vil at lysdioden i GPIO-pinne 13 skal være tent i ett sekund (1000 millisekunder) og deretter være slukket like lenge. Slik skal den fortsette å bytte tilstand i all uendelighet. Vi skriver derfor at Arduino først skal sette høy spenning i GPIO-pinne 13 (det får lysdioden til å lyse) og deretter lav spenning i GPIO-pinne 13 (det slukker lysdioden). For at lysdioden skal blinke i riktig takt skiller vi de to instruksjonene med en forsinkelse (et delay).

For å dokumentere hva vi har gjort og hva vi vil gjøre, legger vi inn kommentarer. Kommentarene kan vi skrive på hvilket som helst språk. Vi velger å skrive dem på engelsk, siden det har blitt standardspråket for kommentarer i programmeringskode. Hvis vi laster opp skissen på et forum for å få hjelp med feilsøking, er det praktisk hvis alle som leser skissen, kan forstå kommentarene.
Vi innleder alle kommentarer med to skråstreker (//). Dette indikerer for utviklingsmiljøet at all etterfølgende tekst på samme linje er kommentarer og ikke en del av programmeringskoden. Velskrevet kode er alltid godt dokumentert, slik at andre programmerere kan forstå hva koden gjør!

Prøv å skrive inn koden på datamaskinen din. Legg merke til at det er mange skilletegn i koden. Disse skilletegnene må være med for at koden skal tolkes på riktig måte.

Når du har skrevet skissen, kan du lagre den på datamaskinen ved å klikke på Lagre-knappen eller velge Lagre på Fil-menyen. Velg et filnavn som bare inneholder bokstavene A til Z.

Tips! Du kan velge hvor skissene dine skal lagres som standard, ved å velge Fil > Innstillinger.

Verifisere kode

Vi mennesker er ganske flinke til å forstå hverandre selv om vi ikke uttrykker oss hundre prosent korrekt. Datamaskinene våre derimot (inkl. Arduino) er sjanseløse til å forstå hva vi mener hvis vi ikke utrykker oss korrekt.

Hvis du får spørsmålet "vil du ha et eple eller en pære", svarer du antakeligvis enten "et eple" eller "en pære". Hvis en datamaskin får tilsvarende spørsmål, svarer den "ja" eller "nei"! For at datamaskinen skal forstå spørsmålet må det omformuleres til: Vil du ha "et eple", "en pære", "verken et eple eller en pære" eller "både et eple og en pære"?

Vi kan slurve med staving og grammatikk når vi skriver norsk, men når vi skriver APL, må vi uttrykke oss helt korrekt. Hvis vi staver et ord feil, forstår ikke datamaskinen hva vi mener. Hvis vi slurver med grammatikken (som innen programmering kalles syntaksen), forstår den heller ikke hva vi mener. Syntaksreglene i APL er heldigvis enklere å lære enn norsk grammatikk.

I likhet med stavekontrollen i Microsoft Word kan verifiseringsfunksjonen i Arduino IDE hjelpe oss med å kontrollere skissen vi har skrevet. Prøv å klikke på Verifiser-knappen og se om skissen din er korrekt skrevet.

Verifiseringsfunksjonen i Arduino IDE fungerer som en stavekontroll.

Verifiseringsfunksjonen i Arduino IDE kan til og med hjelpe deg med å korrigere en feilskrevet skisse. Hvis du for eksempel fjerner det siste semikolonet fra koden og deretter verifiserer den på nytt, viser verifiseringsfunksjonen følgende feil.

Verifiseringsfunksjonen påpeker at det skal være et semikolon foran denne klammeparentesen.

Tips! Når forumfellesskapet hjelper til med feilsøking, henvises det ofte til linjenummer.  Ved å slå på linjenummervisning blir det enklere å feilsøke. Klikk på Fil-menyen, velg Innstillinger og kryss av for Vis linjenummer.

Slå på linjenummervisning for enklere feilsøking.

Kompilere kode

Etter å ha lest denne boken kommer du til å forstå APL. Det kommer imidlertid aldri Arduino-kortet ditt til å gjøre! Det forstår bare maskinkode, dvs. kombinasjoner av ettall og nuller som gir Arduino instruksjoner om å gjøre noe. Skissen du har skrevet må derfor kompileres.

Å kompilere noe innebærer å ta kildekoden (skissen) som programmereren har skrevet og oversette den til maskinkode som datamaskinen kan kjøre. Kompilatoren er innebygd i utviklingsmiljøet, så du trenger bare klikke på en knapp for å få skissen kompilert. Faktum er at du allerede har kompilert koden! Da du verifiserte skissen tidligere i dette kapittelet, sendte du den til kompilatoren for å se om den kunne gjøre kildekoden om til maskinkode.

Kompilatoren er en fantastisk oppfinnelse. Uten den måtte vi ha skrevet maskinkode, som ser slik ut (maskinkoden i eksempelet er den du får når du kompilerer skissen din).

:100000000C945C000C946E000C946E000C946E00CA
:100010000C946E000C946E000C946E000C946E00A8
:100020000C946E000C946E000C946E000C946E0098
:100030000C946E000C946E000C946E000C946E0088
:100040000C9488000C946E000C946E000C946E005E
:100050000C946E000C946E000C946E000C946E0068
:100060000C946E000C946E00000000080002010069
:100070000003040700000000000000000102040863
:100080001020408001020408102001020408102002
:10009000040404040404040402020202020203032E
:1000A0000303030300000000250028002B000000CC
:1000B0000000240027002A0011241FBECFEFD8E043
:1000C000DEBFCDBF21E0A0E0B1E001C01D92A930AC
:1000D000B207E1F70E9403020C9413020C94000093
:1000E00061E08DE00C94930161E08DE00E94CC0111
:1000F00068EE73E080E090E00E94F50060E08DE043
:100100000E94CC0168EE73E080E090E00C94F50072
:100110001F920F920FB60F9211242F933F938F933C
:100120009F93AF93BF938091010190910201A091A1
:100130000301B09104013091000123E0230F2D371A
:1001400020F40196A11DB11D05C026E8230F0296DB
:10015000A11DB11D20930001809301019093020124
:10016000A0930301B09304018091050190910601D1
:10017000A0910701B09108010196A11DB11D8093C6
:10018000050190930601A0930701B0930801BF9168
:10019000AF919F918F913F912F910F900FBE0F9034
:1001A0001F9018953FB7F894809105019091060132
:1001B000A0910701B091080126B5A89B05C02F3F6B
:1001C00019F00196A11DB11D3FBF6627782F892F19
:1001D0009A2F620F711D811D911D42E0660F771FDE
:1001E000881F991F4A95D1F708958F929F92AF92D9
:1001F000BF92CF92DF92EF92FF926B017C010E943F
:10020000D2004B015C01C114D104E104F104F1F00E
:100210000E9412020E94D200681979098A099B097A
:10022000683E73408105910570F321E0C21AD10840
:10023000E108F10888EE880E83E0981EA11CB11C2D
:10024000C114D104E104F10429F7DDCFFF90EF9050
:10025000DF90CF90BF90AF909F908F90089578944B
:1002600084B5826084BD84B5816084BD85B58260BB
:1002700085BD85B5816085BDEEE6F0E08081816059
:100280008083E1E8F0E01082808182608083808159
:1002900081608083E0E8F0E0808181608083E1EB31
:1002A000F0E0808184608083E0EBF0E08081816019
:1002B0008083EAE7F0E080818460808380818260CF
:1002C00080838081816080838081806880831092B8
:1002D000C1000895833081F028F4813099F0823094
:1002E000A1F008958730A9F08830B9F08430D1F4B6
:1002F000809180008F7D03C0809180008F778093F4
:100300008000089584B58F7702C084B58F7D84BD49
:1003100008958091B0008F7703C08091B0008F7DE9
:100320008093B0000895CF93DF9390E0FC01E458F0
:10033000FF4F2491FC01E057FF4F8491882349F13E
:1003400090E0880F991FFC01E255FF4FA591B491F1
:100350008C559F4FFC01C591D4919FB7611108C086
:10036000F8948C91209582238C93888182230AC0F3
:10037000623051F4F8948C91322F309583238C9312
:100380008881822B888304C0F8948C91822B8C9373
:100390009FBFDF91CF9108950F931F93CF93DF936A
:1003A0001F92CDB7DEB7282F30E0F901E859FF4F93
:1003B0008491F901E458FF4F1491F901E057FF4F80
:1003C00004910023C9F0882321F069830E946A0107
:1003D0006981E02FF0E0EE0FFF1FEC55FF4FA59174
:1003E000B4919FB7F8948C91611103C0109581234B
:1003F00001C0812B8C939FBF0F90DF91CF911F91F4
:100400000F91089508950E942F010E9402020E94F8
:100410007000C0E0D0E00E9474002097E1F30E94D9
:0A0420000000F9CF0895F894FFCF13
:00000001FF

Maskinkoden her i boken er ikke skrevet ved hjelp av ettall og nuller (binært). Det hadde tatt altfor stor plass. Vi har i stedet skrevet koden med sifrene 0 til 9 og bokstavene A til F. Dette kalles heksadesimalt og brukes av programmerere som trenger å endre noe direkte i maskinkoden (hvilket du heldigvis ikke trenger å gjøre takket være kompilatoren). Den heksadesimale koden kan gjøres om til binær kode ved å erstatte sifrene og bokstavene med følgende kombinasjoner av fire ettall og nuller. Du kan lese mer om binære tall i datadelen av Hvordan virker det?-serien hvis du er interessert.

HeksadesimaltBinært
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
A 1010
B 1011
C 1100
D 1101
E 1110
F 1111

Laste opp kode

Grunnen til at du kan ta til deg informasjonen i denne boken, er at du kan lese. Hvis du ikke kunne lese, hadde ikke teksten på disse sidene hatt noen funksjon. Husker du hvordan du lærte deg å lese? Det var antakeligvis ikke ved hjelp av en tykk tekstbok som heter "Kunsten å lese". En ren tekstbok kan ikke lære noen å lese, siden den forutsetter at personen som leser den allerede kan lese. Du lærte deg antakeligvis å lese ved at du fikk inntrykk fra bilder, lærere og foreldre som etter hvert gjorde at du forstod lesekonseptet.

En mikrokontroller kan ikke programmeres via USB. Den forstår ikke hva det innebærer å være koblet til en datamaskin via USB. På samme måte som vi ikke kan lese oss til hvordan vi skal lese, kan heller ikke en mikrokontroller lære seg å bruke USB-grensesnittet via USB-grensesnittet. Det fører til et problem på datamaskiner som bare er utstyrt med USB-porter.

Dette "catch 22"-problemet løses i Arduino-verden ved hjelp av en såkalt bootloader. Det er en programvare som "brennes" til mikrokontrolleren ved hjelp av en spesiell maskinvare. Vi trenger ikke ha tilgang til noe annen maskinvare ettersom bootloaderen allerede er brent inn i mikrokontrolleren på Arduino Uno.

Takket være den forhåndsinnstilte bootloaderen kan vi bruke programmereren som sitter på utviklingskortet, til å programmere vår Arduino. Det er den som gjør at vi kan koble utviklingskortet til en datamaskin og trykke på en knapp for å få maskinkoden overført.

Sammendrag av prosessen

Å programmere en Arduino skjer i fire trinn. Det første vi gjør er å skrive skissen (kildekoden ). Det gjør vi i programmeringsspråket APL. Det andre vi gjør er å verifisere koden, slik at vi ikke har gjort feil. Hvis verifiseringen er vellykket, kan vi kompilere kildekoden og få ut maskinkode. Den maskinkoden kan vi til slutt – takket være bootloaderen – laste opp til Arduino-kortet og få det til å gjøre noe.

Sammendrag av prosessen

Avslutt kapittelet ved å gjøre nettopp dette. Klikk på Last opp-symbolet, så kommer utviklingsmiljøet til å verifisere, kompilere og laste opp skissen din. Når maskinkoden er lastet opp til Arduinoen, vil TX- og RX-lysdiodene på utviklingskortet blinke intensivt. Deretter vil lysdioden som er koblet til GPIO-pinne 13, blinke langsomt.

Tips! Du kan endre hvor raskt lysdioden blinker ved å endre verdien som står i parentesen bak delay().

Når maskinkoden er overført til Arduinoen, trenger den ikke lenger å være koblet til datamaskinen. Alt den trenger ligger i mikrokontrolleren. Det innebærer at du kan koble utviklingskortet til f.eks. en powerbank med USB-port og bruke din blinkende Arduino hvor du vil. Du kan også drive den med et 9 V-batteri.

Referanser

5. Også kjent som "Kjellkode".

Sist endret: 2017-09-08