16. Vergelijkingen en condities

16. Vergelijkingen en condities

Doel van deze Experience

Je gaat tijdens deze Experience leren hoe je met vergelijkingen de computer bepaalde besluiten kunt laten nemen. Tevens leer je ook hoe je de volgende instructies kunt gebruiken

« if »,
« if else »
« for »
« while »

Wat heb je nodig 

  • Arduino bord
  • Schakelaar
  • weerstand 100kΩ

Theorie

Vergelijken van waardes.

Elk programma (sketch) dat je tot nu toe hebt gemaakt was redelijk eenvoudig en bestond uit een setup() en loop() functie. In de vorige Experience hebben we ook de “if” instructie gebruikt, deze gaan we nu verder uitleggen. door het gebruiken van condities en deze met elkaar te vergelijken kun je beslissingen nemen. zo heb je in de vorige Experience de licht sterkte gemeten met een LDR en de vochtigheid van de grond van planten. Wil je nu iets met die informatie doen, dan kan dat met  de “if” instructie, het Engelse woord voor “als”.

Hiermee kunt je bijvoorbeeld een lamp  aan schakelen doen “als” het te donker wordt of een waterkraan open zetten “als” de grond in de bloempot te droog is.

Het is dus een heel krachtige instructie die ontzettend vaak wordt gebruikt. Bij het vergelijken van getallen en het maken van loops (lussen) in de programmatuur zijn er bepaalde afspraken waarop een beslissing wordt genomen.

In het volgende voorbeeld zijn x en y twee variabelen, die ook een andere naam kunnen hebben.

vergelijkingen

Het is belangrijk dat je dit goed begrijpt en weet wat de verschillen zijn omdat dit heel vaak gebruikt wordt.  Daarom nogmaals een voorbeeld met de getallen;

X = 10 en Y = 15, dit levert de volgende uitkomsten op;

vergelijkingenvoorbeeld

De “if” instructie

De If opdracht test of bepaalde condities bereikt zijn. Dit kan bijvoorbeeld een analoog signaal zijn dat een bepaalde waarde bereikt moet hebben. Wat er moet gebeuren als de conditie WAAR is wordt binnen de accolades {} geplaatst.

Voorbeeld:

if (X==Y){
dosomething ()
}

Als je dit zou gebruiken voor de meting van de vochtigheid van de bloempot dan zou dit kunnen zijn;

if (humidity < 50){
    startWateringThePlants()
}

Hiermee zorg je ervoor dat als de vochtigheid (humidity) onder de waarde 50 is er een functie wordt aangeroepen die de klep van de kraan aan stuurt.

We kunnen hier nog nog een “else” functie aan toevoegen. dit is het Engelse woord voor “anders” als de conditie dus NIET waar is wordt deze angeroepen.

if (humidity < 50){
startWateringThePlants() // opens the valve  (de klep gaat open)
}
else {
 stopWateringThePlants() // closes the valve  ( de klep gaat dicht)
}

Dit stukje code zal dus, als de vochtigheid die we in de bloempot meten onder de 50 komt de klep open zetten. Zolang de waarde boven de 50 blijft zal de klep dicht blijven.

 

De “while” instructie

De while loop lijkt erg op de “for” loop. De “while” loop voert iets uit zolang er aan een bepaalde voorwaarde wordt voldaan. Bijvoorbeeld zolang de knop is ingedrukt of zolang de vochtigheid een bepaalde waarde heeft.

while (Variabel = waarde){
voer iets uit
}

In het voorbeeld van de bloempot;

while  (humidity <50){
startWateringThePlants()
}
stopWateringThePlants

Zolang de waarde humidity kleiner is dan 50 zal er water worden gegeven. Zodra de waarde groter wordt dan 50 zal hij uit deze loop komen en naar de volgende regel gaan en stoppen met watergeven.

De “for” instructie

Het “for” wordt gebruikt om bepaalde commando’s / instructies een aantal malen te herhalen. Via een teller wordt er bijgehouden hoe vaak de loop (lus) zich moet herhalen.

Voorbeeld:

for(int counter =0; counter<100;counter++){
  Serial.println(counter);
}

(Met het ++ commando weet de Arduino dat hij bij de waarde er 1 op moet tellen. Zo hebben we ook counter – -, dan weet de Arduino dat er van de waarde 1 af moet)

We geven hier de volgende instructies;

  1. We definiëren een integer “counter” met een begin waarde 0
  2. zolang de waarde counter < 100, tel er een op
  3. Print de waarde op het scherm.

Willen we dus van 100 naar 0 tellen dan kunnen we de sketch aanpassen naar de volgende;

for(int counter =100; counter>0;counter–){
  Serial.println(counter);
}

 

Opdracht 1

Maak op het Experimenteerbord een circuit met een LED en een weerstand van 220Ω in serie, die is aangesloten op de digitale pin 13. Maak een sketch waarbij de LED 250 ms (milli seconde) aangaat en na 500 ms weer uitgaat. Gebruik de “for” instructie om dit 5 x te herhalen en dan te stoppen.

Opdracht 2

We gaan een schakeling bouwen waarmee de computer kijkt of er een schakelaar wordt ingedrukt. Zodra dit is gebeurd gaat er een LED branden. Hieronder zie je een eenvoudig circuit. We sluiten via een weerstand van 100 kΩ de schakelaar aan op de 5 V.

drukknop

We gebruiken hiervoor deze push button die in de kist zit.  In deze schakelaar zitten twee schakelaars die beide worden gesloten als je op de knop drukt.

pushbutton         opbouwbutton

Als de schakelaar open is (dus niet is ingedrukt) zal de spanning op pin2 0 V zijn. Als de schakelaar wordt ingedrukt zal de spanning op pin2 5 V zijn. Aangezien dit dus een digitaal signaal is geworden (0 V of 5 V, Low of High) kunnen we dit via de digitale ingang inlezen.

We maken de volgende sketch.

Als je alles goed hebt aangesloten gaat de LED op de Arduino standaard AAN. Op het moment dat we de schakelaar indrukken, komt er 5 V te staan op de digital ingang 2. Ook wordt de “status” HIGH. De LED gaat nu dus uit omdat aan deze voorwaarde wordt voldaan.

Maak een sketch die;

  • de waarde van de schakelaar op het beeldscherm laat zien.
  • er voor zorgt dat als de schakelaar is ingedrukt LED 13 op het Arduino bord gaat branden.

Opdracht 3

Gebruik het circuit met de LDR uit Experience 15 en maak een sketch met de “while” instructie die er voor zorgt dat als de gemeten waarde op A0 groter is dan 500 LED 13 van de Arduino gaat branden.

Je kunt met een zaklamp of de lamp op je telefoon op de LDR schijnen om te zien of alles werkt.

Wat heb je geleerd;

  • Hoe je waardes met elkaar kunt vergelijken
  • De if, else en while instructie en toepassingen hiervan.
TestenStatus

Een reactie plaatsen