Funksjoner
Innledning
I Biblioteker skrev vi en lang skisse som inneholdt mange gjentagelser. Det gjÞr koden vanskelig Ä vedlikeholde (eventuelle smÄ endringer mÄ gjÞres flere steder). I dette kapittelet skal vi derfor se nÊrmere pÄ hvordan vi ved hjelp av egne funksjoner kan optimalisere koden fra et vedlikeholdsperspektiv.
Argument og returverdi
Alle skissene vÄre inneholder setup-funksjonen og loop-funksjonen. Vi kan legge til flere funksjoner hvis vi Þnsker det. Ved Ä legge inn gjentakende kode i en egen funksjon, og deretter kalle opp den funksjonen ved behov, kan vi redusere stÞrrelsen pÄ skissen betydelig. Vi slipper ogsÄ Ä skrive samme ting flere ganger.
En funksjon har alltid et navn. Den har eventuelt argumenter (de stÄr i sÄ fall i parentes) og eventuelt en returverdi. Argumentene er variabler som sendes til funksjonen. Funksjonen gjÞr noe med argumentene den mottar, og svarer ved behov med en returverdi.

Void loop() er et eksempel pÄ en funksjon som vi allerede har brukt mange ganger. Navnet pÄ funksjonen er loop, og den mangler argument (det stÄr ingenting i parentes). Den har heller ingen returverdi. Ordet void betyr tom, og skal tolkes som at returverdien er tom.
void loop()
Â
Innefra loop-funksjonen har vi flere ganger kalt opp delay-funksjonen. Den har et argument, men ingen returverdi. Argumentet lagres i en usignert long-variabel og angir hvor mange millisekunders forsinkelse delay-funksjonen skal forĂ„rsake.Â
delay(1000);
Innefra loop-funksjonen har vi ogsÄ flere ganger kalt opp funksjonen digitalWrite. Den har ingen returverdi, men den har to argumenter:
- hvilken GPIO-pinne som skal pÄvirkis (int)
- om GPIO-pinnen skal settes til HIGH eller LOW (boolean).
digitalWrite(13, HIGH);
Matematikkeksempel
Vi trenger ikke skrive noen funksjon for Ă„ summere to heltall, men vi skriver en likevel for Ă„ vise tydelig hva en funksjon gjĂžr. Vi begynner med Ă„ lage en ny skisse (MathFunction.ino). I setup-funksjonen starter vi som vanlig en seriell kommunikasjon med Arduinoen.
Vi lager deretter en ny funksjon som vi kaller adder. Den skal ha to argumenter (de to verdiene vi vil summere) og én returverdi (summen). Vi bruker long som variabeltype for bÄde argumentene og returverdien. Selve koden skriver vi nederst i skissen (etter loop-funksjonen).
Del av MathFunction.ino
I loop-funksjonen kan vi nÄ kalle opp vÄr egen funksjon adder og sende med to heltall som argumenter. Svaret lagrer vi i en long-variabel som vi kaller answer. Det svaret kan vi deretter skrive til Seriell overvÄker. Vi legger ogsÄ inn en forsinkelse pÄ ett sekund. Den ferdige skissen ser slik ut:
MathFunction.ino
Verdiene i skissen blir sendt frem og tilbake pÄ fÞlgende mÄte:

Effektivisere kode med funksjoner
Som vi nevnte innledningsvis kan koden i Biblioteker effektiviseres ved Ä legge inn den gjentagende koden i en egen funksjon. Vi kopierer derfor skissen til en ny skisse (FruitPickers4.ino) og lager en egen funksjon som vi kaller updateStatus, som skal ha to argumenter (ingen returverdier). Det ene argumentet er en int med verdien for hvor mange epler som skal legges til for Alice. Det andre argumentet er samme ting for Bob. Deretter klipper vi ut den gjentagende koden og legger den inn i funksjonen vÄr
Del av FruitPickers4.ino
Inne i if-setningene som styrer hva som skal skje nÄr noen trykker pÄ knappene, legger vi i stedet inn et kall til updateStatus-funksjonen. PÄ denne mÄten slipper vi Ä skrive kode flere ganger. Den ferdige skissen ser slik ut:
FruitPickers4.ino