Wat is de structuur van een programma

Omschrijving
De structuur van een Arduino programma (sketch) is vrij eenvoudig en omvat over het algemeen de volgende hoofdonderdelen:

  1. Opmerkingen: Begin van een sketch vaak met opmerkingen die informatie geven over de auteur, het doel van de sketch en andere relevante details. Opmerkingen beginnen met // voor enkele regels of /* */ voor blokken tekst.
  2. Bibliotheken Includeren: Hier voeg je bibliotheken toe die nodig zijn voor jouw project. Dit gebeurt aan het begin van de sketch met de #include directive. Voorbeeld: #include <Servo.h> om een servomotor te besturen.
  3. Variabelen Definiëren: Hier declareer je globale variabelen die in de hele sketch gebruikt zullen worden. Je definieert bijvoorbeeld pinnen of andere parameters die je in meerdere functies gebruikt.
  4. Setup() Functie: Deze functie wordt eenmaal uitgevoerd bij het starten van de sketch. Je gebruikt het om pinmodi in te stellen (input, output), seriële communicatie te starten, of andere initialisatiecode uit te voeren die nodig is voordat de hoofdloop begint.
void setup() {
  pinMode(13, OUTPUT); // Stel pin 13 in als output
  Serial.begin(9600);  // Start seriële communicatie met 9600 bps
}
  1. Loop() Functie: De kern van een Arduino sketch, deze functie loopt continu zolang het Arduino bord van stroom wordt voorzien. De loop() bevat de code die de logica van het project bestuurt, zoals het lezen van sensoren, het maken van berekeningen en het aansturen van outputs.
void loop() {
  digitalWrite(13, HIGH);   // Zet pin 13 aan
  delay(1000);               // Wacht een seconde
  digitalWrite(13, LOW);    // Zet pin 13 uit
  delay(1000);               // Wacht nog een seconde
}
  1. Additionele Functies: Je kunt extra functies definiëren die door loop() of setup() worden aangeroepen. Deze functies kunnen helpen om de code overzichtelijk en modulair te houden.

Elk van deze onderdelen helpt bij het organiseren van de code en maakt het programmeren van de microcontroller effectiever en gestructureerder.

Gebruik van hoofd- en kleine letters
Gebruik hoofd- en kleine letters op de correcte manier, C++ is hoofdletter gevoelig. Dit wil zeggen dat het commando PinMode(13, OUTPUT); niet werkt en pinMode(13, OUTPUT); wel. Omdat pinMode() met een kleine letter p aan het begin geschreven moet worden. Dit geldt dus ook voor variabelen. Hierdoor zijn int pinLED = 13; en int PinLED = 14; twee verschillende variabelen. Gebruik voor variabelen duidelijke namen die omschrijven wat de inhoud van een variabele is, bijvoorbeeld int geboorteJaar = 1990; en int geboorteDag = 23;.

Gebruik van de ‘;’ (puntkomma)
In programmeren is de puntkomma (;) zoals een punt aan het einde van een zin. Het vertelt de computer dat je klaar bent met een instructie. Als je het vergeet, raakt de computer in de war omdat het niet weet waar de ene instructie stopt en de volgende begint. Het is een klein teken, maar heel belangrijk om fouten te voorkomen.

Gebruik van ‘{}’ (accolades)
Stel je voor dat je een reeks taken hebt die je wilt uitvoeren, maar alleen onder bepaalde omstandigheden. Accolades helpen je om deze taken als één geheel te groeperen, zodat ze alleen worden uitgevoerd wanneer die specifieke omstandigheden zich voordoen. Ze werken als een container die de taken bij elkaar houdt en vertelt de computer dat alles binnen die container samen hoort. Dit maakt je code gemakkelijker te begrijpen en te beheren, omdat je duidelijk kunt zien welke taken samen worden uitgevoerd in een bepaalde situatie. Je ziet ze bijvoorbeeld bij de setup() en loop() functie. Zo zie je wat er bij elke functie hoort, ze geven het begin en het einde aan.

Inspringen van de programma regels
Het inspringen van tekst in C++ code (of in elke andere programmeertaal) is belangrijk om verschillende redenen:

  1. Leesbaarheid: Goed ingesprongen code is veel makkelijker te lezen en te begrijpen. Dit helpt de persoon die de code schrijft en anderen die later de code moeten aanpassen.
  2. Structuur: Inspringen maakt de structuur van de code duidelijker. Vooral bij herhalingen zoals lussen (for) en voorwaarden (if). Hierdoor kun je snel zien welke stukken code bij elkaar horen.
  3. Fouten vermijden: Correct inspringen helpt om logische fouten te voorkomen. Als de inspringing niet klopt, kan dit betekenen dat er een fout in het programma zit.
  4. Samenwerking: Als iedereen dezelfde inspringstijl gebruikt, is het makkelijker voor teams om samen te werken en de code te begrijpen.

Download het programma zonder inspring en verbeter het, door de code te laten inspringen.

Zonder en met inspring

Voorbeeld van een compleet programma

/*
  Eenvoudige LED knipper sketch
  Auteur: Laurens
  Beschrijving: 
  Dit programma knippert een LED die is aangesloten op pin 13 van een Arduino bord.
  De LED wordt om de seconde aan- en uitgezet, waarbij de status via de seriële monitor wordt weergegeven.
*/

// Inclusief de standaard Arduino bibliotheek
#include <Arduino.h> 

// Variabelen
int ledPin = 13; // Het pinnummer waarop de LED is aangesloten

void setup() {
  pinMode(ledPin, OUTPUT); // Stel de pinmode van ledPin in op OUTPUT
  Serial.begin(9600);      // Start de seriële communicatie met de computer
}

void loop() {
  turnLEDOn();   // Roep functie aan om de LED aan te zetten
  delay(1000);   // Wacht 1000 milliseconden (1 seconde)
  turnLEDOff();  // Roep functie aan om de LED uit te zetten
  delay(1000);   // Wacht nogmaals 1000 milliseconden (1 seconde)
}

// Functie om de LED aan te zetten
void turnLEDOn() {
  digitalWrite(ledPin, HIGH); // Zet de LED aan
  Serial.println("LED AAN");  // Stuur een bericht naar de seriële monitor
}

// Functie om de LED uit te zetten
void turnLEDOff() {
  digitalWrite(ledPin, LOW);  // Zet de LED uit
  Serial.println("LED UIT");  // Stuur een bericht naar de seriële monitor
}