Een sensor gebruiken
Inleiding
Voor de volgende opdrachten wordt enige bekendheid verondersteld met het werken met Lego Mindstorms EV3, in combinatie met Small Basic.
Let op: de touchsensor van de EV3 is in verschillende modi te gebruiken. Voor de volgende opdrachten wordt uitsluitend modus 0 gebruikt.
Opdracht touchsensor 1
A. Sluit de touchsensor aan op poort 1 van de EV3. Voer de volgende code in. De die beginnen met een aanhalingsteken (') zijn commentaar en hoeven niet te worden ingevoerd. Test het programma en let op de werking ervan. Lees het commentaar en probeer de code te begrijpen.
'De touchsensor wordt gekoppeld aan poort 1. De modus is 0.
'Modus 0 betekent dat na aanraking het percentage weer 0 wordt.
Sensor.SetMode(1,0)
'lamp kan aan of uit zijn
lamp = "uit"
'toestand geeft aan in welke toestand het systeem zit: 1 of 2
toestand = 1
'waarde 100 geeft aan dat de sensor ingedrukt is en bij waarde 0 is deze niet ingedrukt
waarde = 0
'De regels om het scherm te verversen moeten direct, na wijzigen van de toestand, worden uitgevoerd i.v.m. de leesbaarheid
LCD.Clear()
LCD.Write(10, 40, "Waarde = " + waarde)
LCD.Write(10, 60, "Toestand = " + toestand)
LCD.Write(10, 80, "Lamp = " + lamp)
'De While-lus wordt continu doorlopen
While "true"
'Lees de waarde die de touchsensor aangeeft en ken deze toe aan de variabele 'waarde'
waarde = Sensor.ReadPercent(1)
'Controleer of de sensor is ingedrukt
If toestand = 1 Then
If waarde = 100 Then
lamp = "aan"
toestand = 2
LCD.Clear()
LCD.Write(10, 40, "Waarde = " + waarde)
LCD.Write(10, 60, "Toestand = " + toestand)
LCD.Write(10, 80, "Lamp = " + lamp)
EndIf
EndIf
'Controleer of de sensor is losgelaten
If toestand = 2 Then
If waarde = 0 Then
lamp = "uit"
toestand = 1
LCD.Clear()
LCD.Write(10, 40, "Waarde = " + waarde)
LCD.Write(10, 60, "Toestand = " + toestand)
LCD.Write(10, 80, "Lamp = " + lamp)
EndIf
EndIf
EndWhile
B. Maak het toestandsdiagram, dat bij deze code past.
C. De vier regels voor het schrijven naar het scherm worden vaak herhaald. Dit kan worden opgelost, door een subroutine te schrijven waardoor de totale code compacter wordt. Schrijf zo’n subroutine.
Opdracht touchsensor 2
Voor deze opdracht gebruik je dezelfde schakeling, als bij de vorige opdracht, want met deze serie opdrachten is het de bedoeling dat je ziet dat je met de computer kunt bepalen hoe er op de sensor gereageerd wordt.
Als je de sensor NIET aanraakt (indrukt) moet de tekst “Au, dit is vreemd…” verschijnen en als je hem WEL aanraakt “Dit voelt prima”.
A. Maak het hierbij behorende toestandsdiagram.
B. Pas de code aan en test je programma op de juiste werking.
Opdracht touchsensor 3
A. Voer de volgende code in. Test het programma en let op de werking ervan. Lees het commentaar en probeer de code te begrijpen.
'De touchsensor wordt gekoppeld aan poort 1. De modus is 0.
'Modus 0 betekent dat na aanraking het percentage weer 0 wordt.
Sensor.SetMode(1,0)
'lamp kan aan of uit zijn
lamp = "uit"
'toestand geeft aan in welke toestand het systeem zit: 1, 2, 3 of 4
toestand = 1
'waarde 100 geeft aan dat de sensor ingedrukt is en bij waarde 0 is deze niet ingedrukt
waarde = 0
'De regels om het scherm te verversen moeten direct, na wijzigen van de toestand, worden uitgevoerd i.v.m. de leesbaarheid
LCD.Clear()
LCD.Write(10, 40, "Waarde = " + waarde)
LCD.Write(10, 60, "Toestand = " + toestand)
LCD.Write(10, 80, "Lamp = " + lamp)
'De While-lus wordt continu doorlopen
While "true"
'Lees de waarde die de touchsensor aangeeft en ken deze toe aan de variabele 'waarde'
waarde = Sensor.ReadPercent(1)
'Controleer of de sensor is ingedrukt of losgelaten
If toestand = 1 Then
If waarde = 100 Then
lamp = "aan"
toestand = 2
LCD.Clear()
LCD.Write(10, 40, "Waarde = " + waarde)
LCD.Write(10, 60, "Toestand = " + toestand)
LCD.Write(10, 80, "Lamp = " + lamp)
EndIf
EndIf
If toestand = 2 Then
If waarde = 0 Then
lamp = "aan"
toestand = 3
LCD.Clear()
LCD.Write(10, 40, "Waarde = " + waarde)
LCD.Write(10, 60, "Toestand = " + toestand)
LCD.Write(10, 80, "Lamp = " + lamp)
EndIf
EndIf
If toestand = 3 Then
If waarde = 100 Then
lamp = "uit"
toestand = 4
LCD.Clear()
LCD.Write(10, 40, "Waarde = " + waarde)
LCD.Write(10, 60, "Toestand = " + toestand)
LCD.Write(10, 80, "Lamp = " + lamp)
EndIf
EndIf
If toestand = 4 Then
If waarde = 0 Then
lamp = "uit"
toestand = 1
LCD.Clear()
LCD.Write(10, 40, "Waarde = " + waarde)
LCD.Write(10, 60, "Toestand = " + toestand)
LCD.Write(10, 80, "Lamp = " + lamp)
EndIf
EndIf
EndWhile
B. Maak het toestandsdiagram, dat bij deze code past.
C. Maak gebruik van je eerder subroutine.
Opdracht infraroodsensor
A. Veronderstel dat je niet de beschikking hebt over een aanraaksensor, maar wel over een infraroodsensor. Als je die dan gaat gebruiken, moet je dan ook iets aan de code veranderen?
B. Denk je dat de schakeling anders gaat reageren? Zo ja, op welke manier merk je dat?
Opdracht hotelschakeling 1
Je kent vast wel de wissel- of hotelschakeling. In vrijwel elk huis komt een dergelijke schakeling voor bij de trap. Zowel beneden als boven kun je de lamp aan- en uitschakelen
A. Het bijbehorende toestandsdiagram ben je al eerder tegengekomen. Zoek deze op.
B. Gebruik nu twee aanraakschakelaars en programmeer daarmee een wisselschakeling. Sluit de sensoren aan op poort 1 en 2.
Opdracht hotelschakeling 2
Gebruik dezelfde opstelling als in de vorige opdracht (Opdracht hotelschakeling 1).
A. Lees deze opdracht door en teken het toestandsdiagram.
B. Zorg er voor dat de tekst ‘Aan’ op het beeldscherm verschijnt als je eerst de sensor op poort 1 aanraakt (en weer loslaat) en daarna de sensor op poort 2.
C. Het vorige programma wordt nu uitgebreid. Zorg er daarna voor dat de tekst ‘Uit’ op het beeldscherm verschijnt als je eerst de sensor op poort 2 aanraakt en daarna de sensor op poort 1.
Opdracht hotelschakeling 3
Gebruik dezelfde opstelling als in Opdracht hotelschakeling 1. Nu komt er een melding naar het beeldscherm (als in de vorige opdrachten) én een geluidsignaal.
A. Lees deze opdracht door en teken het toestandsdiagram.
B. Wijzig het programma dusdanig dat als je de sensor van poort 1 aanraakt de tekst ‘Aan’ op het beeldscherm verschijnt en als je de sensor loslaat de tekst ‘Uit’.
C. Met de sensor van poort 2 laat je bij het indrukken ervan een geluidsignaal horen en bij het weer loslaten ervan gaat het geluid uit.
Opdracht touchsensor toetsenbord
Het is mogelijk om de EV3 te laten reageren op aanslagen van het toetsenbord van de computer. Hiervoor kun je bijvoorbeeld deze code gebruiken.
While "True"
toetsinput=TextWindow.ReadKey()
If toetsinput="1" Then
...
ElseIf toetsinput="2" Then
...
EndIf
...
TextWindow.Write(toetsinput)
EndWhile
Schrijf een programma dat ‘Je hebt het cijfer 1 ingedrukt’ op het scherm zet, als je de deze toets hebt ingedrukt. Doe dit ook voor de cijfers 2, 3 en 4.
Opdracht mission accomplished
Je zult inmiddels gemerkt hebben dat de logica van het programmeren niet altijd eenvoudig is, maar dat het met een goed eindige-toestands-diagram een stuk gemakkelijker is om het programma te schrijven.
Ook de schakeling die we nu gaan maken is nog niet zo eenvoudig.
Het is de bedoeling dat je de tekst “Mission accomplished” naar het scherm stuurt als je de cijfers 1458 (exact in die volgorde) invoert zonder tussendoor andere toetsen in te drukken.
Let op: bij een verkeerde code moet je dus iedere keer weer opnieuw beginnen.
En dus beginnen we weer met het eindige-toestands-diagram.
A. Maak het programma waarmee je de genoemde tekst naar het scherm stuurt als je de cijfers 1458 in die volgorde invoert zonder tussendoor andere toetsen in te drukken. Let op: bij een verkeerd ingegeven getal moet je dus iedere keer weer opnieuw beginnen.
B. Als de code juist is, staat de tekst op het scherm. Zolang deze tekst er staat heeft het indrukken van een toets geen effect. Zorg ervoor dat de tekst na 10 seconden weer verdwijnt. Daarna heeft het indrukken van een toets weer effect en kun je dus opnieuw de code intypen.