De Blink van de Arduino voorbeelden laat zien hoe je het eenvoudigste knipperlicht kan maken. De code gebruikt een DELAY instructie om te knipperen. Maar tijdens deze Delay kan geen andere code worden uitgevoerd!
Kan dat anders? We onderzoeken hier hoe we de code kunnen aanpassen.
No Delay
Herken je wat hierboven staat uitgelegd?
- Tijdens een DELAY instructie kan geen andere code worden uitgevoerd. Eigenlijk willen we soms dat de Arduino ook andere dingen blijft controleren. Wat zou je willen dat een Arduino ondertussen doet?
- Soms wil je dat de Arduino oplet of er een knop wordt ingedrukt, bijvoorbeeld als je een stoplicht, een brug of een slagboom hebt gebouwd.
- Bij een auto wil je luisteren naar de signalen van de afstandbediening om te voorkomen dat de auto ergens tegenaan knalt.
- Bij een GPS tracker moet het programma opletten welke informatie er door een GPS ontvanger wordt doorgegeven, en we willen af en toe een berichtje versturen.
- Bedenk zelf waarom het onhandig is als de Arduino tijdens een DELAY opdracht niets kan doen.
Deze problemen kan je prima oplossen met een andere manier van programmeren. We noemen dat in dit voorbeeld ‘Blink No Delay’. Dit ga je doen:
- Bouw je Arduino op met het Blink Extreme voorbeeld.
- Op het breadboard is dat deze oefening: https://junioriot.nl/blink-extreme-breadboard/
- Kijk in de code naar de Delay opdracht.
Daarna:
We gebruiken nu wachten_tot
- Begin een nieuw leeg programma
- Bekijk de volgende voorbeeld code. Waar de drie puntjes staan mag je een ander stukje programma hebben, maar de drie puntjes zelf heb je niet nodig. Je ziet hieronder dat we extra regels code hebben ingetypt.
- Voeg dezelfde extra regels code toe aan jouw lege programma.
Je herkent nu misschien dat je deze regels kunt toevoegen aan elk bestaand programma. Zo kan je aan elk programma een knipper toevoegen zonder dat je een Delay nodig hebt.
Of we doen dit ‘elke 1000 milliseconde’
- Begin een nieuw leeg programma
- Bekijk de volgende voorbeeld code. Waar de drie puntjes staan mag je een ander stukje programma hebben, maar de drie puntjes zelf heb je niet nodig. Je ziet hieronder dat we extra regels code hebben ingetypt.
- Voeg dezelfde extra regels code toe aan jouw lege programma.
Hier herken je ook dat je deze regels kunt toevoegen aan elk bestaand programma. Dit is een heel makkelijke manier om aan elk programma een knipper toe te voegen zonder dat je een Delay nodig hebt.
Arduino voorbeeld BlinkWithoutDelay
In de Arduino IDE wordt ook een voorbeeld aangeleverd. Hierin kan je verschillende programmeer structuren herkennen.
- Open dit voorbeeld maar eens: file > examples > 02 Digital > BlinkWithoutDelay
- Kijk eens hoe deze software is geschreven. Herken je hoe in dit voorbeeld de blink opdracht zonder delay is gemaakt?
- Pas de knipper aan naar 300 milliseconden.
Bouw nu weer de extra ledjes op je Arduino op poort 2-3 en 5-6. Plaats de leds zoals hier: https://junioriot.nl/blink-extreme-breadboard/
- Je gaat verder waar je gebleven was met BlinkWithoutDelay
- We willen een tweede ledje laten knipperen, die elke 500 milliseconden knippert. Dit kan je doen door een heleboel regels te kopieren en deze nieuwe regels aan te passen. Probeer dit maar eens. Verrassend: Door deze manier van programmeren verandert je eerste knipper niet.
- Nu laat je nog een ledje kniperen, maar dan elke 1700 milliseconde. Kopieer nog meer regels en pas deze aan om dit voor elkaar te krijgen.
Wanneer is dit handig?
Soms wil je dat je programma reageert op een knop of een andere input. Wanneer je de Delay gebruikt is dat niet goed mogelijk, en daarom is de Delay eigenlijk een rare manier om dingen te regelen.