De eerste cyclus heeft als thema: domotica: hoe kun je het leven in en om het huis makkelijker maken met behulp van physical computing? En: hoe kun je thuis zuinig omgaan met energie?
De sensor die centraal staat is de aanraaksensor. Dit is zo’n beetje de eenvoudigste sensor die er is, hoewel er vele varianten op zijn. Het kan bijvoorbeeld een eenvoudig drukknopje zijn of een schakelaar.
De eindopdracht in deze cyclus is: ontwerp en ontwikkel een hotelschakeling. Dat is een systeem met twee aanraaksensoren en één lamp. De lamp moet met beide aanraaksensoren aan en uit kunnen worden gezet.
Domotica
Bekijk de volgende bronnen over domotica, afkomstig van de module Inleiding in domotica en automatisering op Wikiwijs.
Hieronder zie je een voorbeeld van een aanraaksensor, deze wordt Capacitive Touch Switch Sensor genoemd. Zodra je de sensor aanraakt wordt de output HIGH, en als je de sensor loslaat wordt de output weer LOW.
Een drukknop is ook een soort aanraaksensor. Bekijk het volgende filmpje over de drukknop.
Behind the MakeCode Hardware - Buttons
In het filmje heb je kunnen zien dat er twee soorten drukknoppen zijn:
Normally open (NO) - als je de drukknop niet indrukt kan er geen stroom lopen
Normally closed (NC) - als je de drukknop niet indrukt kan er wel stroom lopen
Een deurbel is een drukknop - normally open.
Naast de Capacitive Touch Switch Sensor en de drukknop zijn er ook aanraaksensoren met een zogenaamde toggle-functie. De meeste lichtschakelaars in huis werken zo. Zo'n schakelaar staat aan (er kan stroom lopen) of uit (er kan geen stroom lopen). De schakelaar houdt dus de toestand vast ook als je de sensor niet meer aanraakt.
Bovenstaande schakelaars hebben allemaal een toggle-functie. Ook het rechter (rode) knopje heeft dat, deze drukknop werkt dus anders dan de drukknop uit het filmpje.
Het is echter mogelijk om een drukknop zonder toggle-functie, zoals bijvoorbeeld die in het filmpje, te laten werken als een schakelaar met toggle-functie door dat te programmeren. Bijvoorbeeld, je kunt een systeem maken met een drukknop (zonder toggle-functie) en een lamp. Als je de drukknop indrukt en weer loslaat gaat de lamp aan. Doe je dat nogmaals gaat de lamp weer uit. Het systeem onthoudt dus of de lamp aan of uit moet, ook al is de drukknop niet ingedrukt. Wat dat betreft is zo'n drukknop handiger dan een schakelaar met toggle-functie. Je kunt immers softwarematig, door het programma te veranderen, het gedrag van de drukknop en het systeem als geheel aanpassen.
Als je met de Arduino werkt is het belangrijk om wat te weten over de volgende twee onderwerpen. We geven je hierbij twee bronnen, hoewel er veel meer bronnen over te vinden zijn. Werk je met de Micro:bit of Lego Mindstorms dan is dit minder relevant.
In deze module leer je te werken met toestandsdiagrammen. Als introductie daarop kun je met de gehele klas de volgende opdracht doen.
Opdracht: toestanden in games
Bekijk gezamenlijk het volgende fragment uit een game waarin de hoofdrolspeler een bewaker moet proberen uit te schakelen. Kijk goed naar de bewaker en beschrijf in welke toestanden de bewaker kan zijn. Beschrijf ook hoe de bewaker in elk van die toestanden terecht komt. Met andere woorden: wat moet er gebeuren voordat de bewaker in een bepaalde toestand terecht komt.
Automaat bewaker
Toestanden
Wellicht heb je de volgende toestanden gevonden, ook al noem je ze waarschijnlijk anders
Waakzaam, rondkijkend
Alert, klar voor actie, rondkijkend
Gealarmeerd, achter vijand aan lopend
Verdwaasd, rondlopend
Dood
Op basis van deze toestanden kun je een toestandsdiagram maken, waarin duidelijk wordt hoe de bewaker van de ene toestand in de andere komt. De getallen geven de toestanden aan zoals hierboven staat beschreven.
Je kunt in het toestandsdiagram bijvoorbeeld zien dat als de bewaker in toestand 1 is en hij ziet een vijand, dan wordt de toestand van de bewaker 2.
In de bovenstaande uitwerking zie je totaal 5 toestanden en 6 toestandsovergangen. Misschien zijn er wel meer hoor, alleen in dit korte fragment kun je ze niet allemaal zien.
Het losse pijltje naar toestand 1 betekent dat dit de begintoestand is, oftewel de initiële toestand.
Opdracht unplugged Nooddienstregeling bij de spoorwegen
Je kunt ook als inleiding ook de unplugged activiteit doen die je via de onderstaande link vindt.
Hieronder zie je een voorbeeld van een onderdeel van een frisdrankautomaat. Dit onderdeel houdt bij hoeveel geld de gebruiker van de automaat heeft ingeworpen. Voor het gemak gaan we uit van slechts twee munten: 50 cent en 1 euro. En alle frisdranken in de automaat kosten 2 euro.
De bollen zijn toestanden. Dit toestandsdiagram kent dus vijf toestanden. De frisdrankautomaat begint in de starttoestand, dat is in dit geval de toestand ‘Start: 0 euro’. Bij elke toestand zie je enkele overgangen. Bijvoorbeeld de overgang van de starttoestand ‘0 euro’ naar ‘0,5 euro’. Die toestandsovergang vindt plaats als de gebruiker begint met het inwerpen van een muntstuk van 50 eurocent.
Je ziet dat een toestandsovergang ook naar dezelfde toestand kan gaan. Kijk maar bij de toestand ‘2 euro’. Na de toestandsovergang ‘Inworp 50 cent’ is de toestand nog steeds ‘2 euro’.
Je kunt er zelf even mee oefenen. Klik op het plaatje hieronder om te activeren. Via de blauw en oranje knop kun je zogenaamd 50 cent of 1 euro inwerpen en dan zie je in welke toestand de automaat terecht komt.
Een toestandsovergang wordt meestal uitgevoerd op basis van informatie uit één van de sensoren. Als iemand één euro in de frisdrankautomaat doet, wordt dat door één of meerdere sensoren gedetecteerd. Hoe dat precies werkt is hierbij niet belangrijk. Uit de toestandsdiagram kun je opmaken naar welke toestand de automaat moet gaan als iemand die euromunt inwerpt.
Acties in een toestandsdiagram
Het vorige toestandsdiagram is nog niet volledig, de gebruiker moet immers wel een frisdrank kunnen selecteren. In het volgende toestandsdiagram voegen we een overgang ‘selectie’ toe aan alle toestanden. ‘Selectie’ betekent dat de gebruiker een frisdrank kiest.
Aan een toestandsovergang kan een actie worden gekoppeld. Bij de frisdrankautomaat wordt de actie: ‘geef frisdrank’ uitgevoerd als de gebruiker een frisdrank selecteert en de toestand is: ‘2 euro’. Acties zijn altijd gekoppeld aan toestandsovergangen en niet aan toestanden. Een toestandsovergang mag één of meer acties hebben, maar dat hoeft niet. Voor het uitvoeren van acties worden vaak actuatoren gebruikt, zoals een lampje, display of motor.
In deze module gebruiken we steeds een dubbele punt om het onderscheid te maken tussen toestandsovergang en actie.
<toestandsovergang> : <actie>
Voorbeelden
Inleiding
In dit deel vind je enkele voorbeelden, deels uitgewerkt, en deels zijn het opdrachten. Deze helpen om toestandsdiagrammen te begrijpen en te oefenen met het maken van toestandsdiagrammen. Kies zelf welke je interessant vindt.
Voorbeeld: lichtregulering
In dit voorbeeld gaat het om een systeem waarmee je de intensiteit van een lamp kunt reguleren. Het systeem bestaat uit een lamp en twee knoppen.
De lamp kan in drie standen worden gezet:
Uit (geen licht)
Half aan (zacht licht)
Helemaal aan (fel licht)
Het systeem heeft twee knoppen zonder toggle-functie (A en B). Met knop A gaat de lamp feller branden. Bijvoorbeeld: als de lamp half aan is en knop A wordt ingedrukt, dan gaat de lamp helemaal aan. Met knop B gaat de lamp minder fel branden. De lamp is altijd in één van de drie bovengenoemde standen.
Opdracht: maak toestandsdiagram lichtregulering
a) Maak een toestandsdiagram voor dit systeem. In de volgende paragraaf wordt dit uitgewerkt, probeer het echter eerst zelf.
b) Het systeem wordt verder uitgebreid. De lamp heeft twee kleuren (rood en blauw). Er wordt een derde knop (C) toegevoegd waarmee kan worden gewisseld tussen de kleur rood en de kleur blauw. Pas het toestandsdiagram hier op aan.
Uitwerking opdracht a)
Hieronder volgt een mogelijke uitwerking van opdracht a) over de lichtregulering.
Het begint met het proberen te bepalen welke toestanden er zijn. In de opdrachtomschrijving staat dat de lamp in drie standen kan staan. Het ligt voor de hand dat we die gebruiken voor de toestanden:
Lamp is uit
Lamp is half aan
Lamp is helemaal aan
Die toestanden kunnen we vast tekenen, als drie bollen
Belangrijk om te weten is welke gebeurtenissen er zijn, op basis daarvan kun je de toestandsovergangen bepalen. Als je de tekst van de opdracht leest blijkt dat er twee knoppen zijn. Dat zijn de gebeurtenissen, er zijn er dus twee:
knop A wordt ingedrukt (en weer losgelaten)
knop B wordt ingedrukt (en weer losgelaten)
Voor elke toestand (dat zijn er drie) en elke gebeurtenis (dat zijn er twee) kunnen we bepalen wat de toestandsovergang wordt (3 x 2 = 6). Elke toestandsovergang teken je als een pijl. Dan krijg je zoiets als hieronder.
A betekent: knop A wordt ingedrukt, B betekent: knop B wordt ingedrukt.
Nu moeten de acties er nog bij. Bijvoorbeeld, wat moet er gebeuren als de lamp in toestand 2 is en op knop B wordt gedrukt? Dan moet de lamp uit gaan. Een actie zet je altijd bij een toestandsovergang (dus niet bij een toestand). Je krijgt dan dit:
Je ziet, niet bij iedere toestandsovergang hoeft een actie te staan.
We zijn nog niet helemaal klaar, begintoestand moet er bij. Dat is de initiele toestand waar het systeem in begint. Het lijkt logisch dat de lamp eerst uit is, we kiezen daarom toestand 1 als begintoestand. En om het toestandsdiagram overzichtelijk te houden, laten we de toestandsovergangen die naar zichzelf verwijzen en geen actie hebben weg. Dan krijg je dit.
We houden de teksten kort in het diagram om het overzichtelijk te houden. Het nadeel is dat misschien niet helemaal helder is wat er wordt bedoeld. Bijvoorbeeld, de pijl van toestand 1 naar toestand 2 waar bij staat A: lamp half aan zou beter kunnen zeggen:
(gebeurtenis) knop A wordt ingedrukt -> (actie) zet de lamp met halve intensiteit aan.
Je kunt het toestandsdiagram voor jezelf testen en daarmee controleren of het klopt. Bijvoorbeeld, wat gebeurt er is als ik op A, B en dan weer B druk? Klopt dit met wat het systeem zou moeten doen?
Probeer nu eerst zelf opdracht b) te doen voordat je de uitwerking bekijkt.
Uitwerking opdracht b)
Hieronder volgt een mogelijke uitwerking van opdracht b) over de lichtregulering.
De eerste vraag die je jezelf moet stellen is: welke toestanden herken ik? De lamp kent nu naast de drie standen (uit, half aan, fel) ook nog de mogelijkheid voor twee kleuren (rood en blauw). Hoeveel toestanden zijn er dan? Het lijkt er op dat dat er zes zijn, namelijk 3 standen x 2 kleuren:
Lamp is uit / rood
Lamp is half aan / rood
Lamp is helemaal aan / rood
Lamp is uit / blauw
Lamp is half aan / blauw
Lamp is helemaal aan / blauw
Laten we proberen het toestandsdiagram uit a) uit te breiden. We laten de acties nog even weg.
Wat zijn de mogelijke gebeurtenissen? Er zijn nu drie knoppen, dus drie gebeurtenissen:
knop A wordt ingedrukt
knop B wordt ingedrukt
knop C wordt ingedrukt
Dat betekent dat er mogelijk 6 (toestanden) x 3 (gebeurtenissen) = 18 mogelijke toestandsovergangen zijn. Nu kun je gaan kijken wat die toestandsovergangen precies zijn en ze als een pijl gaan tekenen. Eerst maar eens kijken wat er moet gebeuren als knop C wordt ingedrukt voor ieder van de toestanden.
Dan zijn we er nog niet, want we moeten ook duidelijk maken wat er gebeurt als knop A of B wordt ingedrukt als het systeem in toestand 4, 5 of 6 is.
Vervolgens moeten de acties erbij, dat doen we hieronder, weliswaar in het kort, anders wordt het onoverzichtelijk.
Het nadeel van korte teksten is dat het misschien niet helemaal helder is wat er moet gebeuren. Bijvoorbeeld, de pijl van toestand 2 naar toestand 5 waar bij staat C: blauw, zou beter kunnen zeggen:
(gebeurtenis) knop C wordt ingedrukt : (actie) zet het rode licht uit en zet het blauw licht half aan
Nog een voorbeeld: de pijl van toestand 1 naar toestand 2 waar bij staat A: 50% rood, zou beter kunnen zeggen:
(gebeurtenis) knop A wordt ingedrukt : (actie) zet het rode licht half aan
Een begintoestand hadden we al, dus dit zou het moeten zijn. Test je toestandsdiagram vervolgens voor jezelf. Wat gebeurt er bijvoorbeeld als je de knoppen C, dan A, dan C, dan A indrukt? En klopt dat met wat je verwacht dat het zou moeten doen?
Voorbeeld: tamagotchi
Dit is gebaseerd op Micro:bit Challenge opdrachten en materiaal van Renske Weeda.
Een virtueel huisdier is elektronisch apparaatje dat je kunt ‘opvoeden’. Kijk maar eens naar het artikel over Tamagotchi’s.
Het doel is nu om zo’n virtueel huisdier te maken. Eerst maak je één of meerdere toestandsdiagrammen. Daarna kun je het ook zelf gaan implementeren, bijvoorbeeld met behulp van de Micro:bit.
We beginnen met een eenvoudig variant.
Ons huisdier is in eerste instantie blij, dat is de begintoestand. Als hij wordt geknepen, wordt ie verdrietig. Als je ‘m daarna weer aait, wordt ie weer blij. Dit toestandsdiagram kent de volgende toestandsovergangen:
Wordt geknepen
Wordt geaaid
Opdracht Tamagotchi
a) We gaan de tamagotchi verder uitbreiden. Het virutele huisdier kan boos worden als je hem duwt. Als je ‘m dan weer aait wordt ie weer blij. Of als je ‘m knijpt wordt ie verdrietig. We hebben vast een start gemaakt met het toestandsdiagram. Vul de juiste woorden in op de stippellijnen. Er ontbreken ook nog twee toestandsovergangen (twee pijlen dus), voeg die toe.
b) Maak een geheel nieuw toestandsdiagram voor het volgende virtuele huisdier. Standaard is het huisdier blij. Door te duwen wordt hij boos, door de aaien wordt hij blij. Als het donker is gaat hij slapen. Als het licht is wordt hij (blij) wakker. Als hij slaapt heeft duwen en aaien geen effect.
c) Pas het vorige huisdier aan: het huisdier wordt wakker in dezelfde toestand als hij ging slapen. Dus als hij boos was en ging slapen omdat het donker werd, wordt hij ook weer boos wakker.
Voorbeeld: valdetectie
Helaas komt het wel eens voor. Een oudere man of vrouw, alleen thuis, valt van de trap, breekt iets en kan niet meer opstaan of bewegen. De man of vrouw moet blijven liggen en hopen dat er iemand langskomt om te helpen.
Het doel is om een horloge te ontwikkelen dat kan detecteren of iemand valt. Als degene die het horloge draagt valt, wordt dat geregistreerd met behulp van een versnellingssensor (zie ook cyclus 4 van deze module). Vervolgens kan het horloge een bericht versturen naar iemand die in de buurt woon, misschien een zoon of dochter. De houder van het horloge kan ook op de reset-knop drukken om te laten weten dat alles ok is.
De gebeurtenissen zijn:
gevallen
reset-knop ingedrukt
Toestand 1 betekent: niks aan de hand
Toestand 2 betekent: persoon is gevallen
Voor de ontvanger van het signaal kun je ook een toestandsdiagram maken. Dit kan bijvoorbeeld op een mobiele telefoon of op een horloge. De gebeurtenissen daar zijn:
signaal "gevallen" ontvangen
signaal "ok" ontvangen
reset-knop ingedrukt
Toestand 1 betekent: geen alarm
Toestand 2 betekent: alarm aan
In het deel over de Micro:bit laten we zien hoe je hiervoor een prototype kunt maken met behulp van radiosignalen.
Correcte toestandsdiagrammen
Tabel met alle toestandsovergangen
Voor het overzicht laten we de toestandsovergangen die naar dezelfde toestand verwijzen ook wel eens weg, zoals hieronder.
Het is echter wel verstandig om goed na te denken over wat er in alle gevallen gebeurt. Bijvoorbeeld, wat gebeurt er in toestand ‘1 euro’ als de gebruiker een frisdrank selecteert? Door over alle mogelijkheden na te denken voorkom je fouten die je later veel tijd kosten om te herstellen. Je kunt dat ook in een tabel weergeven door alle toestanden te combineren met alle mogelijke toestandsovergangen. Daarbij geef je voor alle mogelijkheden aan wat de nieuwe toestand wordt.
Toestandsovergang
Toestand
Inworp 50 cent
Inworp 1 euro
Selectie
Start: 0 euro
0,5 euro
1 euro
0 euro
0,5 euro
1 euro
1 euro
1,5 euro
2 euro
In de bovenstaande tabel zie je alle toestanden in de linker kolom. Je ziet ook alle mogelijke gebeurtenissen in de bovenste rij. Voor iedere combinatie moet de tabel beschrijven wat de nieuwe toestand wordt. Dit kan dus ook dezelfde toestand blijven. De tabel hierboven is nog niet volledig ingevuld.
Regels voor een toestandsdiagram
Een toestandsdiagram is gebonden aan strenge regels:
Een toestandsdiagram bestaat uit toestanden (bollen) en toestandsovergangen (pijlen)
Alle toestanden worden weergegeven als bollen. In de bol staat een korte beschrijving van de toestand.
Er is altijd precies één starttoestand, die herken je aan de pijl die niet verbonden is aan een andere toestand.
Alle toestandsovergangen worden weergegeven als een pijl, die één kant op wijst. Bij de pijl staat een korte beschrijving van de toestandsovergang.
Een toestand kan nooit twee of meer keer dezelfde toestandsovergang hebben.
Een toestandsovergang mag dezelfde toestand als begin en eind hebben.
Bij een toestandsovergang mogen één of meerdere acties staan. In deze module gebruiken we steeds een dubbele punt om het onderscheid te maken tussen toestandsovergang en actie.
Je kunt toestandsdiagrammen prima op papier tekenen. Dat gaat vaak het snelst, maar pas op dat het wel leesbaar blijft. Een handige tool om toestandsdiagrammen mee te maken vind je via de volgende site.
Je kent vast wel de wisselschakeling of hotelschakeling. In vrijwel ieder huis komt een dergelijke schakeling voor bij de trap. Zowel beneden als boven zit een schakelaar. Met beide schakelaars kun je dezelfde lamp aan- en uitschakelen. Het systeem bestaat dus uit:
1 lamp
schakelaar A
schakelaar B
Je kunt gebruik maken van de volgende toestandsovergangen:
Schakelaar A gaat aan
Schakelaar A gaat uit
Schakelaar B gaat aan
Schakelaar B gaat uit
De mogelijke acties zijn:
zet lamp aan
zet lamp uit
Opdracht: maak toestandsdiagram hotelschakeling
Maak op basis van de gebeurtenissen en de acties een toestandsdiagram. Bedenk zelf hoeveel toestanden je nodig hebt.
Van toestandsdiagram naar programma
Inleiding
Een toestandsdiagram geeft de werking van een systeem weer. Als je een toestandsdiagram maakt voordat je het systeem echt gaat bouwen of programmeren, kun je jezelf een hoop fouten besparen. Uit het toestandsdiagram kun je namelijk opmaken of het systeem werkt zoals het moet werken. Als je ziet dat er een fout in zit, pas je eerst het toestandsdiagram aan. Dat kost veel minder tijd dan het aanpassen van een programma. Begin daarom altijd eerst met het maken van een toestandsdiagram.
Als je denkt dat het toestandsdiagram goed is kun je het programma gaan maken. Gelukkig is het omzetten van een toestandsdiagram naar een programma redelijk eenvoudig, in dit hoofdstuk leggen we uit hoe dat moet.
Doe ter voorbereiding op het werken met logische operatoren en met if-then-else structuren de volgende unplugged activiteiten met de klas.
Als je het toestandsdiagram eenmaal klaar hebt, dan is het maken van een programma dat kan worden uitgevoerd op bijvoorbeeld de Microbit, Arduino of Lego Mindstorms eenvoudig. We laten dat zien aan de hand van het volgende toestandsdiagram voor een systeem bestaande uit een lamp en een drukknop. Als de drukknop wordt ingedrukt (en weer losgelaten) gaat de lamp aan. Wordt de drukknop nogmaals ingedrukt (en weer losgelaten) gaat de lamp uit.
Om een toestandsdiagram om te zetten in een programma gebruik je ALS-DAN-constructies. De toestand sla je op in een variabele. Hieronder zie je een uitwerking in pseudo-code. Het bestaat uit twee delen:
EENMALIG BIJ OPSTARTEN
Dit deel wordt één keer uitgevoerd. Hierin kun je bijvoorbeeld de starttoestand aangeven.
HERHAAL:
Alles wat hier staat wordt steeds weer opnieuw uitgevoerd, zolang het systeem aan is.
Alle toestanden krijgen een nummer:
1 - Lamp is uit
2 - Lamp is aan
EENMALIG BIJ OPSTARTEN:
toestand wordt 1
HERHAAL:
ALS (toestand is 1) DAN
ALS (de drukknop wordt ingedrukt) DAN
toestand wordt 2
zet lamp aan
ALS (toestand is 2) DAN
ALS (de drukknop wordt ingedrukt) DAN
toestand wordt 1
zet lamp uit
Zie je de relatie tussen het toestandsdiagram en de pseudo-code?
Er is ook een andere manier, waarbij je start vanuit de gebeurtenissen.
EENMALIG BIJ OPSTARTEN:
toestand wordt 1
zet lamp aan
HERHAAL:
ALS (de drukknop wordt ingedrukt) DAN
ALS (toestand is 1) DAN
toestand wordt 2
zet lamp aan
ANDERS ALS (toestand is gelijk aan 2) DAN
toestand wordt 1
zet lamp uit
Beide manieren zijn toegestaan. Het hangt van de situatie en het specifieke platform dat je gebruikt (Micro:bit, Arduino, Lego Mindstormd) af wat het makkelijkste is. Soms gebruik je een mix van beide aanpakken.
Pas op voor de valkuil
Blijf goed opletten bij het omzetten van een toestandsdiagram naar een programma. Neem het volgende voorbeeld. Iemand heeft op basis van het eerdere toestandsdiagram het volgende programma gemaakt.
EENMALIG BIJ OPSTARTEN:
toestand wordt 1
HERHAAL:
ALS (de drukknop wordt ingedrukt) DAN
ALS (toestand is 1) DAN
toestand wordt 2
zet lamp aan
ALS (toestand is 2) DAN
toestand wordt 1
zet lamp uit
Tabel met alle toestandsovergangen
Om er zeker van te zijn dat je hebt nagedacht over alle toestandsovergangen is het goed om een tabel maken met alle mogelijke combinaties. We geven een voorbeeld op basis van het volgende toestandsdiagram. Dit is een uitwerking van de hotelschakeling die je eerder hebt gezien. Het systeem bestaat uit twee schakelaars en een lamp. Met beide schakelaars moet de lamp aan en uit kunnen worden gezet.
SA staat voor Schakelaar A, SB voor Schakelaar B
Toestand 1: SA = uit, SB = uit (de lamp is uit )
Toestand 2: SA = aan, SB = uit (de lamp is uit )
Toestand 3: SA = aan, SB = aan (de lamp is uit )
Toestand 4: SA = uit, SB = aan(de lamp is uit )
Hieronder zie je een tabel met alle mogelijke toestandsovergangen. Voor elke combinatie moet er staan wat de nieuwe toestand wordt en welke actie wordt uitgevoerd. Als er een streepje staat (-), dan is er geen toestandsovergang en geen actie. Hieronder hebben we vast een begin gemaakt.
Toestand
SA gaat aan
SA gaat uit
SB gaat aan
SB gaat uit
1
2
zet lamp aan
–
2
–
1
zet lamp uit
3
4
Opdracht: maak de tabel compleet
Maak de bovenstaande tabel compleet
Opdracht: maak de pseudocode
Maak op basis van het toestandsdiagram en de bijbehorende tabel het programma in pseudocode af.
Oefenopdrachten
Oefenopdracht: toegangscode
Het volgende toestandsdiagram beschrijft een systeem voor toegang tot een beveiligde omgeving. Het systeem bestaat uit twee drukknoppen, A en B. Om toegang te krijgen tot het systeem moet de gebruiker de knopjes indrukken in de juiste volgorde. Dan gaat de deur van het slot. Zodra iemand er doorheen loopt valt de deur automatisch weer in het slot.
Opdracht: toegangscode
a) Pas nu het toestandsdiagram aan zodat de deur open gaat bij de code ABBA.
b) Maak nu een in pseudocode op basis van het bovenstaande toestandsdiagram.
c) Ga nu uit van 3 knoppen: A, B en C. De kluis moet opengaan met de volgende twee codes:
ABCA. Maar ook bijvoorbeeld AABCA, ABABCA. Zolang het maar eindigt op ABCA.
ABBA. Ook hier geldt: zolang het maar eindigt op ABBA.
Maak het toestandsdiagram.
Oefenopdracht: toggle-functie van een drukknop
Je hebt kunnen lezen bij het deel over de aanraaksensor dat er drukknopjes zijn met en zonder toggle-functie. De drukknopjes met toggle-functie zijn eigenlijk een schakelaar, ze kunnen aan of uit staan. De drukknopjes zonder toggle-functie staan altijd uit, tenzij je je vinger op de knop houdt, dan staat ie aan. Je kunt een drukknopje zonder toggle-functie toch laten werken als drukknopje met toggle-functie. Dat ga je in deze opdracht maken.
Maak twee toestandsdiagrammen voor een eenvoudig systeem met een lampje en een drukknop zonder toggle-functie. Ga uit van de volgende gebeurtenissen
De drukknop wordt ingedrukt (was eerst niet ingedrukt en nu wel)
De drukknop wordt losgelaten (was eerst wel ingedrukt en nu niet meer)
Er zijn twee mogelijke acties
Zet lamp aan
Zet lamp uit
Opdracht Toggle-functie van drukknopje
Maak twee toestandsdiagrammen:
voor een systeem waarbij de lamp aan gaat zodra je de knop indrukt. De lamp gaat uit zodra je de knop loslaat.
voor een systeem waarbij de lamp aan gaat zodra je de knop indrukt. De lamp blijft aan, ook als je de knop loslaat. Als je de knop nogmaals indrukt gaat de lamp uit. De lamp blijft uit, ook nadat je de knop hebt losgelaten.
Oefenopdracht: TV met 2 afstandsbedieningen
Opdracht: TV met 2 afstandsbedieningen
Je hebt een televisie die werkt met een afstandsbediening. Omdat je vaak een afstandsbediening kwijt raakt heb je besloten een tweede afstandsbediening erbij te nemen. Maak een toestandsdiagram voor deze TV. Je kunt je beperken tot twee zenders waarop de televisie kan staan: NPO1 en NPO2. Verder hebben beide afstandsbedieningen beide twee knoppen:schakelen naar NPO1 en schakelen naar NPO2.
Dit lesmateriaal is gepubliceerd onder de Creative Commons Naamsvermelding 4.0 Internationale licentie. Dit houdt in dat je onder de voorwaarde van naamsvermelding vrij bent om:
het werk te delen - te kopiëren, te verspreiden en door te geven via elk medium of bestandsformaat
het werk te bewerken - te remixen, te veranderen en afgeleide werken te maken
voor alle doeleinden, inclusief commerciële doeleinden.