Structuur
We hernemen de code. Pas de delay terug aan naar 1000, en de pin naar LED_BUILTIN of 13.
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
setup() en loop() fases
Arduino-code bestaat uit drie duidelijk herkenbare fases. In de bekende Blink-sketch zie je er alvast twee: void setup() en void loop().
Deze blokken vormen de basisstructuur van elke Arduino-sketch. Binnen deze blokken schrijven we de instructies die bepalen wat de Arduino moet doen.
De instructies die we tot nu toe besproken hebben pinMode(), digitalWrite() en delay() staan telkens binnen een blok, tussen de accolades { }.
Dit betekent dat ze deel uitmaken van een groter geheel, zoals setup() of loop().
Om de code overzichtelijk te houden, worden deze instructies ingesprongen. Dat maakt het makkelijker om te zien welke instructies bij welk blok horen.
Info
Arduino heeft een overzicht genaamd 'Language Reference', een soort van bibliotheek, met alle mogelijke instructies.
https://www.arduino.cc/reference/en/
Ze zijn onderverdeeld in drie soorten:
- Functies
- Variabelen en constanten
- Structuur
Neem even de tijd om op te zoeken wat er bij void setup() en void loop() vermeld staat (onder Structure).
Opdracht 1
We zien in de Blink-Sketch de instructie om het LEDje aan te zetten (digitalWrite(13, HIGH)) en uit te zetten (digitalWrite(13,LOW)).
Die instructies staan er maar 1 keer. En toch pinkt je LEDje meerdere keren aan en uit.
Wat gebeurt er als je de 4 lijnen code van in de loop verplaatst naar de setup?
Opdracht 2
sleepoefening instructies per fase
Declaratie en initialisatie fase
Een loop() en een setup() zijn noodzakelijke fases van de Arduino code. Er is nog een onderdeel dat mogelijk is, namelijk het declareren en initialiseren. Deze fase komt nog voor de void setup().
We hebben in de Blink-Sketch manueel de wachttijd in delay() aangepast. Van 1000 naar hogere waarden en naar lagere waarden.
De delay()-instructie staat er slechts twee keer in. Stel nu dat we een veel uitgebreider programma hadden met veel meer delay()-instructies.
Dan hadden we dat overal manueel moeten aanpassen. Dat is te veel werk. We gaan dit gemakkelijker maken.
Opdracht 3
Vervang je delay()-code zodat er telkens het volgende staat:
delay(wachttijd);
Probeer dit eens uit te voeren. Je krijgt de foutmelding: "wachttijd" was not declared in this scope.
Het woordje “wachttijd” is door de Sketch nog niet gekend. We moeten deze wachttijd dus eerst “declareren”, oftewel bekend maken bij de Sketch.
We gaan de wachttijd meteen ook "initialiseren", oftewel een waarde toekennen aan de wachttijd, namelijk 1000.
Schrijf vlak boven de void setup() het volgende stukje code:
int wachttijd = 1000;
"wachttijd" noemt men een variabele.
Test je code uit. De foutboodschap is nu normaalgezien weg. Is dat niet zo, zoek dan de fout in je code.
Hieronder zie je de aangepaste code met de 3 verschillende fases in de Arduino code aangegeven.
// Fase 1: declaratie en initialisatie fase (wordt eenmalig doorlopen bij opstarten)
int wachttijd = 1000;
// Fase 2: setup fase (wordt eenmalig doorlopen bij opstarten)
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
// Fase 3: loop fase (wordt blijvend herhaald)
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(wachttijd);
digitalWrite(LED_BUILTIN, LOW);
delay(wachttijd);
}