Structuur
We hernemen de code. Pas de delay terug aan naar 1000 en de pin naar LED_BUILTIN of 13.
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWriteLED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
setup() en loop()
Arduino-code bevat altijd deze 2 herkenbare delen: void setup() en
void loop().
Deze blokken vormen de basisstructuur van elke Arduino-sketch. Binnen deze blokken schrijven we de andere instructies die bepalen wat de Arduino moet doen tussen de accolades { }.
Voorbeelden van andere instructies in deze code zijn pinMode(), digitalWrite(), delay().
De accolades tonen aan dat de andere instructies 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?
Declaratie en initialisatie
Een loop() en een setup() zijn noodzakelijke delen van de Arduino code. Er is nog een onderdeel dat mogelijk is, namelijk het declareren en initialiseren. Dit gedeelte komt nog voor de void setup().
In de Blink-sketch hebben we de wachttijd in de delay()-functie handmatig aangepast — eerst naar 1000 milliseconden, daarna naar hogere en lagere waarden.
In dit eenvoudige voorbeeld komt delay() slechts 2 keer voor, dus dat aanpassen ging redelijk snel.
Maar stel je voor dat je een groter programma hebt met tientallen of zelfs honderden delay()-instructies.
Dan zou je overal handmatig de waarde moeten wijzigen. Dat is niet alleen tijdrovend maar ook foutgevoelig.
Gelukkig kan het veel eenvoudiger. We lossen dit op door de wachttijd op 1 centrale plaats te definiëren zodat we die makkelijk kunnen aanpassen wanneer nodig.
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 en de waarde hiervan is door de Sketch nog niet gekend.
- We moeten deze wachttijd eerst declareren ofwel bekend maken bij de Sketch.
- We gaan de wachttijd meteen ook initialiseren ofwel 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 delen in de Arduino code aangegeven.
// Deel 1: declaratie en initialisatie (wordt eenmalig doorlopen bij opstarten)
int wachttijd = 1000;
// Deel 2: setup (wordt eenmalig doorlopen bij opstarten)
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
// Deel 3: loop (wordt blijvend herhaald)
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(wachttijd);
digitalWrite(LED_BUILTIN, LOW);
delay(wachttijd);
}