I Bibliotek skrev vi en lång sketch som innehöll mycket upprepningar. Det gör koden svår att underhålla (eventuella småändringar måste göras på flera ställen). I detta kapitel ska vi därför se närmare på hur vi med hjälp av egna funktioner kan optimera koden ur underhållsperspektiv.
I alla våra sketcher finns setup-funktionen och loop-funktionen. Vi kan lägga till fler funktioner än så om vi önskar. Genom att lägga kod som upprepas i en egen funktion och anropa den funktionen vid behov kan vi skala ned sketchstorleken rejält. Vi slipper också skriva samma sak flera gånger.
En funktion har alltid ett namn. Den har eventuellt några argument (de står i så fall inom parentesen) och eventuellt ett returvärde. Argumenten är variabler som skickas till funktionen. Funktionen gör något med argumenten som den får och svarar vid behov vad den kom fram till med ett returvärde.
Argumenten skickas till funktionen och returvärdet skickas tillbaka från funktionen.
Void loop() är ett exempel på en funktion som vi redan har använt många gånger. Namnet på funktionen är loop och den saknar argument (det står inget inom parentesen). Den har inte heller något returvärde. Ordet void betyder tom och ska tolkas som att returvärdet är tomt.
void loop()
Inifrån loop-funktionen har vi flera gånger anropat delay-funktionen. Den har ett argument men inget returvärde. Argumentet lagras i en osignerad long-variabel och anger hur många millisekunders fördröjning som delay-funktionen ska orsaka.
delay(1000);
Inifrån loop-funktionen har vi också flera gånger anropat funktionen digitalWrite. Den har inget returvärde, men den har två argument:
digitalWrite(13, HIGH);
Vi behöver inte skriva någon funktion för att summera två heltal, men vi skriver en sådan ändå för att tydligt visa vad en funktion gör. Vi börjar med att skapa en ny sketch (MathFunction.ino). I setup-funktionen startar vi som vanligt en seriell kommunikation med Arduinon.
Vi skapar sedan en ny funktion som vi kallar adder. Den ska ha två argument (de två värdena som vi vill summera) och ett returvärde (summan). Vi använder long som variabeltyp för både argumenten och returvärdet. Själva koden skriver vi längst ned i sketchen (efter loop-funktionen).
Del av MathFunction.ino
I loop-funktionen kan vi nu anropa vår egen funktion adder och skicka med två heltal som argument. Svaret lagrar vi i en long-variabel som vi kallar answer. Det svaret kan vi sedan skriva ut i Serial monitor. Vi lägger även med en fördröjning på en sekund. Den färdiga sketchen ser ut på följande sätt.
MathFunction.ino
Värdena i vår sketch kommer att skickas fram och tillbaka på följande sätt.
Sättet vi skickar värden till och från vår egen funktion.
Som vi nämnde inledningsvis går det att effektivisera koden i Bibliotek genom att lägga den upprepande koden i en egen funktion. Vi kopierar därför sketchen till en ny sketch (FruitPickers4.ino) och skapar en egen funktion som vi kallar updateStatus med två argument (inget returvärde). Det ena argumentet är en int med värdet för hur många äpplen som ska läggas till hos Alice. Det andra argumentet är samma sak för Bob. Sedan klipper vi ut den upprepande koden och lägger den i vår funktion.
Del av FruitPickers4.ino
Inne i if-satserna som styr vad som ska hända när någon klickar på knapparna lägger vi i stället anrop till updateStatus-funktionen. På detta sätt slipper vi skriva samma kod flera gånger. Den färdiga sketchen ser ut på följande sätt.
FruitPickers4.ino
Som medlem hos oss får du alltid lite mer. Som till exempel låga medlemspriser, unika kampanjer, 100 dagars öppet köp och bonuscheckar. Dessutom sparas alla dina köp i ditt medlemskap så att du slipper spara papperskvitton för eventuella returer. Ditt medlemskap är helt digitalt och helt kortlöst. Och väldigt smidigt.
Läs mer