Overzicht Arduino C++

Hieronder zijn alleen de elementen beschreven die worden gebruikt in de workshops. Extra informatie die niet in de syntaxbeschrijvingen past, staat onderaan om een uniforme uitstraling te behouden. Later zullen er meer syntaxbeschrijvingen worden toegevoegd.

Functies


digitalWrite()

pinMode()

delay()

Variabelen


Variabele reikwijdte &
extra kenmerken variabelen

const

scope

static

volatile

Structuur


loop()

setup()

Extra informatie

Structuur van een programma (sketch)

De structuur van een Arduino IDE-programma volgt over het algemeen een standaardindeling. Hier is een basiskader dat vaak wordt gebruikt in Arduino-programma’s (zie voorbeeld code rechts).

Laten we de structuur doorlopen:

  • Globale variabelen en bibliotheken: In het bovenste deel van het programma worden eventuele externe bibliotheken ingevoegd en globale variabelen gedeclareerd. Dit is waar je aangeeft welke bibliotheken je programma nodig heeft. Bijvoorbeeld als een Lcd-display of zo gebruikt. En waar je variabelen definieert die in de hele code beschikbaar moeten zijn.
  • Setup-functie: Deze functie wordt één keer uitgevoerd bij het opstarten van het programma. Hierin initialiseer je pinnen, sensoren en voer je andere configuratietaken uit die slechts één keer nodig zijn. Een functie begint met het woordje ‘void’ (hier komen we later op terug bij eigen functies) dan de naam van de functie (in dit geval ‘setup’) met een ronde haak openen en sluiten ( ‘()’ ). Hierna komt de inhoud van de functie. Het begin van de functie inhoud wordt aangegeven met een linker accolade ‘{‘ en het einde met een rechter accolade ‘}’.
  • Loop-functie: Deze functie wordt continu herhaald zodra het programma is opgestart. Hierin bevindt zich de hoofdlogica van je programma. Wat binnen de loop-functie staat, wordt steeds opnieuw uitgevoerd, waardoor het programma in een oneindige lus blijft draaien.

In de code rechts zie je een eenvoudig voorbeeld waarbij een LED op pin 13 knippert. Je kunt de setup()-functie gebruiken voor initiële configuraties en de loop()-functie voor de hoofdlogica van je programma. De #include commando’s heb je hier niet nodig. Vergeet niet om de functie delay() te gebruiken om pauzes in te voegen en de microcontroller niet overmatig te belasten.

Let op!
hoofd- en kleine letters, C++ is hoofdletter gevoelig. Dit wil zeggen dat het commando PinMode(pinLED, OUTPUT); niet werkt en pinMode(pinLED, OUTPUT); wel (pinMode() moet met een kleine letter p). Dit is in het hele programma. Dit geldt dus ook voor variabelen. Hierdoor zijn int pinLED = 13; en int PinLED = 14; twee verschillende variabelen.

Zoals je ziet staat op het einde van bijna elke commando regel een puntkomma (;). Deze geeft aan dat dit het einde is van het commando. Deze mag je niet vergeten. Het begin en einde van iets kan ook aangegeven worden door accolade’s, zoals bij de funtie setup() en loop(). Hier eindigt deze niet met een ‘;’.

// Globale variabelen, bibliotheken en dergelijken
#include <bibliotheek1.h>
#include <bibliotheek2.h>

int pinLED = 13;  // Globale variabele


// Setup-functie: wordt eenmaal uitgevoerd bij het 
// opstarten van het programma
void setup() {
  // Initialisatie en configuratie van pinnen, sensoren, enz.
  pinMode(pinLED, OUTPUT);  // Instellen van de LED-pin als uitvoer
}


// Loop-functie: wordt herhaaldelijk uitgevoerd zodra 
// het programma is opgestart
void loop() {
  // Hoofdprogrammacode: logica die continu wordt herhaald
  // Voorbeeld: knipperen van een LED
  digitalWrite(pinLED, HIGH); // Zet de LED aan
  delay(1000);  // Wacht 1 seconde
  digitalWrite(pinLED, LOW);  // Zet de LED uit
  delay(1000);  // Wacht weer 1 seconde
}

Variabelen

Variabelen zijn als opbergvakjes voor informatie. Ze zijn nuttig voor het tellen van gebeurtenissen (hoe vaak een knop ingedrukt wordt) of het optellen van waarden (zoals in een rekenmachine). In C++ maakt het uit of je hoofdletters of kleine letters gebruikt: ‘a’ en ‘A’ zijn verschillende variabelen. Dus ‘aa’, ‘Aa’, ‘aA’, en ‘AA’ zijn elk anders. Let op typefouten bij zulke namen. Gebruik duidelijke namen zoals ‘achternaam’ om de inhoud van een variabele te begrijpen. Een variabele kan beperkt zijn in wat het kan opslaan: een getalvariabele (integer) kan bijvoorbeeld geen letters bevatten.

Scope van een variabele

De scope van een variabele geeft aan waar de variabele zichtbaar is. Hier kan de variabele gelezen en verandert worden. Als een variabele binnen een functie gemaakt wordt, is deze alleen binnen deze functie te gebruiken. Zie voorbeeld hieronder met toelichting.

int x = 10;

void setup(){
  Serial.begin(115200);
  
  int y = 5;
  Serial.println(y);
  Serial.println(x);
  Serial.println(k); // niet zichtbaar hier
  Serial.println(z); // niet zichtbaar hier
  Serial.println(j); // niet zichtbaar hier
}

void loop(){
  int k = 8;
  Serial.println(y); // niet zichtbaar hier
  Serial.println(x);
  Serial.println(k);
  Serial.println(z); // niet zichtbaar hier
  Serial.println(j); // niet zichtbaar hier

  for (int j = 0; j < 100; j++) {
    Serial.println(y); // niet zichtbaar hier
    Serial.println(x);
    Serial.println(k);
    Serial.println(z); // niet zichtbaar hier
    Serial.println(j);
  }
  
  mijnFunctie();
}

void mijnFunctie(){
  int z = 0;
  Serial.println(y); // niet zichtbaar hier
  Serial.println(x);
  Serial.println(k); // niet zichtbaar hier
  Serial.println(z);
  Serial.println(j); // niet zichtbaar hier
}

Toelichting voorbeeld
Serial.begin(115200) en Serial.println() zijn functies die het mogelijk maken gegevens op het scherm te zetten.

Op de regels: 9, 10, 11, 16, 19, 20, 23, 26, 35, 37, 39 gaat het fout. Hier zijn de variabelen NIET zichtbaar en kun je ze dus ook niet gebruiken.

Alle variabelen die buiten de setup()-functie en loop()-functie gemaakt worden, zoals x in het voorbeeld, zijn overal zichtbaar. Deze noemt men ook wel globale variabelen.