Selectie
Bij een selectie- of keuzestructuur kiest de Arduino wat hij doet op basis van een voorwaarde. Om deze voorwaarde te programmeren gebruiken we
een specifieke functie: if().
- Als de voorwaarde voldaan is (True), dan wordt een andere weg gevolgd dan wanneer die niet voldaan is (False).
- Voorstelling in stroomdiagram:
- De beslissingsblok wordt afgebeeld als een ruit.
- De procesblok wordt afgebeeld als een rechthoek.
if()
Lees de documentatie van de if-functie.
De functie heeft 1 parameter namelijk de voorwaarde.
- Wanneer aan de voorwaarde voldaan is, wordt de daaropvolgende actie eenmalig uitgevoerd.
- Indien er niet aan de voorwaarde voldaan is, dan slaat de computer de if-functie over.
if(voorwaarde) {
proces;
}
- voorwaarde: hier ga je meestal na of iets groter, kleiner of gelijk is aan iets
- proces: wat er moet gebeuren als de voorwaarde voldaan is.
Even een voorbeeld:
if(lichtwaarde < drempelwaarde) {// wanneer de lichtwaarde kleiner wordt dan de drempelwaarde
digitalWrite(LED_BUILTIN, HIGH);// schakel de interne led aan
}
Opdracht 1
Programmeer een buitenverlichting.
- Wanneer de lichtsensor (fototransistor) detecteert dat het donker wordt, moet de buitenverlichting aan gaan.
Deze oefening kan je enkel uitvoeren met een fysiek Arduino bordje. Wanneer je Tinkercad gebruikt, programmeer dan onmiddellijk opdracht 2 met een if...else functie.
Bouw volgende schakeling met fototransistor en weerstand en gebruik de interne led van je Arduino.
Deel 1: declaratie en initialisatie
- Maak een constante aan voor de pin waaraan je fototransistor verbonden is (A0).
- Maak een variabele aan om de lichtwaarde in te stockeren, stel ze gelijk aan 0.
- Maak een variabele aan voor de drempelwaarde, stel ze gelijk aan 500.
Mogelijk oplossing
Deel 2: setup
- Met pinMode() zet je de sensorpin als INPUT.
- Met pinMode() zet je de interne led (LED_BUILTIN) als OUTPUT.
- Start de seriƫle communicatie met Serial.begin().
Mogelijk oplossing
Deel 3: loop
- Met analogRead() lees je de sensorwaarde telkens opnieuw in, sla op in de variabele lichtwaarde.
- Met Serial.println(), print je de analoge waarde.
- Codeer een if-lus. Denk na over je voorwaarde (... < ...) en over je proces, wat moet er dan gebeuren?
- Met digitalWrite kan je de interne led laten branden.
Mogelijk oplossing
Probeer, nadat je de lichtsensor hebt afgedekt, er weer licht op te laten schijnen. Gaat de LED uit?
Om dit op te lossen kiezen we een if... else functie.
TIP: Wil je je code nog eens opnieuw testen, druk dan op de Reset knop op je bordje. Op deze manier wordt de code vanaf het begin opnieuw doorlopen.
.
if...else()
Als de voorwaarde voldaan is (True) wordt een andere weg gevolgd dan wanneer die niet voldaan is (False).
- Zowel bij het True- als False-pad zijn er procesblokken.
- Voorstelling in stroomdiagram:
- De beslissingsblok wordt afgebeeld als een ruit.
- De procesblok wordt afgebeeld als een rechthoek.
Lees de documentatie van de if...else-functie.
De if...else functie is een uitbreiding van de if-functie waarbij je nu ook aangeeft wat er moet gebeuren wanneer er niet, of niet meer aan de voorwaarde voldaan is.
if(voorwaarde) {
proces indien voldaan aan de voorwaarde;
}
else {
proces indien niet voldaan aan de voorwaarde;
}
- voorwaarde: hier ga je meestal na of iets groter, kleiner of gelijk is aan iets
- proces: wat er moet gebeuren als de voorwaarde al dan niet voldaan is.
Even een voorbeeld:
if(lichtwaarde < drempelwaarde) {// wanneer de lichtwaarde kleiner wordt dan de drempelwaarde
digitalWrite(LED_BUILTIN, HIGH);// schakel de interne led aan
}
else {// indien niet
digitalWrite(LED_BUILTIN, LOW);// schakel de interne led uit
}
In de volgende opdracht programmeren we een veelvoorkomend probleem. We willen aan de hand van een drukknop een led aan- en uitschakelen.
Opdracht 3
Bouw onderstaande schakeling en zorg ervoor dat de interne LED aan en uit gaat wanneer je op de drukknop drukt (pin D2).
Teken eerst het stroomschema voor dit programma. Overleg met een klasgenoot.
Probeer de code zelf te schrijven gebaseerd op het stroomschema.
Deel 1: declaratie en initialisatie
- Maak een constante aan voor de pin waaraan je drukknop verbonden is.
- Maak een variabele aan om de status van de drukknop in te stockeren, stel ze gelijk aan 0.
Mogelijk oplossing
Deel 2: setup
- Met pinMode() zet je de drukknoppin als INPUT.
- Met pinMode() zet je de interne led als OUTPUT.
Mogelijk oplossing
Deel 3: loop
- Met digitalRead() lees je de status van de drukknop telkens opnieuw in, sla op in de aangemaakte status variabele.
- Codeer een if...else-lus. Denk na over je voorwaarde (... == ...) en over je proces, wat moet er dan gebeuren?
- Wat moet er gebeuren als de voorwaarde niet voldaan is?
- Met digitalWrite kan je de interne led laten branden.
TIP:de voorwaarde 'als de drukknop is ingedrukt, dan mag de LED aan', codeer je als volgt:
De oplossing vind je bij de Arduino examples. Ga naar File > Examples > 02.Digital > Button.
De weerstand in bovenstaande schakeling noemen ze een Pull Down weerstand. Dit is een zeer belangrijk onderdeel voor de juiste werking van de schakelaar.
Wanneer de schakelaar gesloten is, zal er 5 V op PIN 2 staan. Wanneer de schakelaar terug opent, moet de spanning op PIN 2 ook terug naar 0 V gebracht worden.
Dit gebeurt door de PIN via een aardingsweerstand aan de aarde (GND) vast te maken.
Mocht de weerstand, die verbonden is met de aarde, er niet zijn dan is de ingang 'zwevend' en kunnen er willekeurige waardes gemeten worden.
Voor deze toepassing is een weerstand van 10 kOhm geschikt.
Als je de weerstand en de drukknop in bovenstaande schakeling omwisselt dan wordt het een Pull Up weerstand. De pin (D2) zal altijd een waarde van 5V meten en enkel wanneer de drukknop wordt ingedrukt wordt dit 0V.
De if-else is een voorwaardelijke keuze.
Bij de voorwaarde geef je aan welke voorwaarde moet voldaan zijn om de instructie binnen de if-accolades uit te voeren.
Wordt aan de voorwaarde niet voldaan, zal de instructie binnen de else-accolades uitgevoerd worden.