While...
De for-loop is een begrensde herhaling.
Het LEDje pinkt exact zo vaak als opgegeven in de voorwaarde.
Stel dat we het LEDje nu niet exact 4 keer willen laten pinken, maar 10 seconden lang.
Bekijk de for-loop:
for(teller = 0; teller < 4; teller++){
blinkKort();
}
De instructie "blinkKort();" wordt 4 keer na elkaar uitgevoerd.
Dit gaan we veranderen zodanig dat de instructie 10 seconden lang wordt uitgevoerd.
Let op
We werken verder met de blinkKort-sketch.
Maar we maken er nu geen "Hello World" morsecode meer van.
Opdracht 1
Dit is een voorwaardelijke herhaling:
Gedurende een bepaalde tijd:
voer een instructie uit.
Ga daarna verder met de volgende instructie.
Deze methode van Nederlandse zinnen herformuleren zodanig dat ze al in de vorm van een codeertaal staan, noemt men pseudocode.
In het Engels wordt while... gebruikt in de plaats van gedurende...
Deze voorwaardelijke herhaling wordt de while-loop genoemd.
De timer
De herhaling zal "een bepaalde tijd" worden uitgevoerd.
Die "bepaalde tijd" zullen we implementeren in de code via een timer.
Opdracht 2
Zoek op de website van Arduino welke twee instructies je zou kunnen gebruiken als timer.
https://www.arduino.cc/reference/en/
De instructies die je hierboven vond, geven enkel de verstreken tijd sinds de start van het programma.
De while-loop moet 10 seconden lang uitgevoerd worden.
We zoeken dus de verstreken tijd sinds de start van de while-loop (startWhile).
Er is daarom nog wat rekenwerk nodig om de juiste tijdspanne te meten.
We maken gebruik van millis(). Om de verstreken tijd te bekomen sinds de while-loop is begonnen, maken we het verschil millis() - startWhile.
Opdracht 3
Lees op de website van Arduino welke parameters je nodig hebt om de while-loop te implementeren:
https://www.arduino.cc/reference/en/
pseudocode
Gedurende (voorwaarde){
blinkKort();
}
Opdracht 4
Uitwerking 1
Vervang de for-loop door deze while-loop.
Vergeet de variabele startWhile niet te declareren en initialiseren. Deze moet bij aanvang van de while-loop ook de waarde van de timer millis() krijgen.
Probeer de code uit.
Oplossing
int wachttijdKort = 500;
int wachttijdLang = 3*wachttijdKort;
int startWhile = 0;
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void blinkKort() {
digitalWrite(LED_BUILTIN, HIGH);
delay(wachttijdKort);
digitalWrite(LED_BUILTIN, LOW);
delay(wachttijdKort);
}
void loop() {
startWhile = millis(); //Definieer startWhile bij aanvang van de while-loop
while(millis() - startWhile < 10000){
blinkKort();
}
delay(5*wachttijdKort); //Verhoog de wachttijd om de te verduidelijken dat de while-loop is afgelopen.
}
De while-loop is een voorwaardelijke herhaling.
Bij de voorwaarde geef je aan welke voorwaarde moet voldaan zijn om de instructie binnen de while-loop uit te voeren. Meestal zal dit een bepaalde tijdspanne zijn.
Als er niet meer aan de voorwaarde wordt voldaan, zal er verder gegaan worden met de instructie na de while-loop.