De architectuur
We hernemen de code. Pas terug aan naar 1000, LED_BUILTIN en 13, als je dit nog niet gedaan had.
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
void setup()
{
pinMode(13, OUTPUT);
}
void loop()
{
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
setup() en loop()
De tot hiertoe besproken instructies (pinMode(), digitalWrite() en delay()) zijn allemaal onderdeel van een andere instructie. Ze staan namelijk tussen accolades {}.
Ze zijn ook ingesprongen, om de code leesbaarder te maken.
De instructies die onze Sketch vormgeven zijn void setup() en void loop().
Dit zijn de basisinstructies van de Sketch.
Opdracht 1
Duid aan wat klopt.
Lees op de website van Arduino waarvoor void setup() en void loop() gebruikt worden:
https://www.arduino.cc/reference/en/
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.
De code in void loop() wordt telkens opnieuw uitgevoerd. De code herhaalt zich.
Eerst wordt het eerste lijntje uitgevoerd, dan het tweede lijntje, enzovoort.
Heeft men het laatste lijntje uitgevoerd, dan begint men terug bij het eerste lijntje. Zo blijft het doorgaan tot het programma wordt stopgezet.
Declaratie en initialisatie
Een loop() en een setup() zijn noodzakelijk voor de code. Er is nog een onderdeel dat mogelijk is, namelijk het declareren en initialiseren. Dat gebeurt 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.
Uitwerking 1
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;
Je code ziet er als volgt uit.
int wachttijd = 1000;
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(wachttijd);
digitalWrite(LED_BUILTIN, LOW);
delay(wachttijd);
}
int wachttijd = 1000;
void setup()
{
pinMode(13, OUTPUT);
}
void loop()
{
digitalWrite(13, HIGH);
delay(wachttijd);
digitalWrite(13, LOW);
delay(wachttijd);
}
Test je code uit. De foutboodschap is nu normaalgezien weg. Is dat niet zo, zoek dan de fout in je code.
Opdracht 2
We testen uit wat de initialisatie doet.
- Upload/start de simulatie en observeer wat er gebeurt.
- Verander je code zodat je wachttijd gelijk is aan 100.
- Upload/start de simulatie en observeer wat er gebeurt.
"wachttijd" noemt men een variabele. Een variabele is een element dat je gebruikt in je code, dewelke je op voorhand gedeclareerd hebt.
Je kan de waarde van een variabele gemakkelijk initialiseren bij de declaratie, bovenaan. De waarde van een variabele kan ook in de void loop() aangepast worden.
"LED_BUILTIN" noemt men, daarentegen, een constante. De waarde van een constante hoort niet aangepast te worden, en blijft daarom constant. Een constante wordt aangeduid met hoofdletters.
Bij het declareren en het initialiseren moeten we ook een datatype toekennen aan de variabele.
De datatypes zijn blauw gekleurd in het programma Arduino IDE.
Een datatype wordt aan een variabele toegekend om duidelijk te maken over welke soort variabele het gaat.
Een variabele kan namelijk een woord zijn, of een geheel getal, een natuurlijk getal, een kommagetal, etc.
Het datatype van de variabele "wachttijd" is int.
Opdracht 3
Neem een kijkje op de website van Arduino naar de verschillende soorten datatypes.