Tutorial : Een reactie snelheid GAME (code)

De flowchart uit vorige tutorial omzetten naar code kan je het best door elk onderdeel apart te bekijken, toch zeker voor het gedeelte in loop. Voor het gedeelte setup en voor setup moet je enkel kijken naar alle inputs en outputs die je gaat gebruiken.

Programma initialiseren

Als output heb je een groene, gele en rode led.
Als input heb je een startknop en een stopknop.
Alle andere zaken zijn geheugens die je ook nog in de loop kan aanmaken.

Om het STEM shield te gebruiken krijg je dus volgende code VOOR setup en IN setup().

int groen = 5;
int geel = 4;
int rood = 3;
int drukknopStart = 9;
int drukknopStop = 10;
int toestandStart = 0;
int toestandStop = 0;

void setup() {
pinMode(groen,OUTPUT);
pinMode(geel,OUTPUT);
pinMode(rood,OUTPUT);
pinMode(drukknopStart,INPUT);
pinMode(drukknopStop,INPUT);
Serial.begin(9600);
}

De code voor de GAME

Dan het omzetten van de flowchart om te bepalen wat er IN loop() moet komen.

Het genereren van een willekeurig getal met random() hebben hebben in de tutorial voor de dobbelsteen reeds gebruikt.
Het is aan te raden om direct te testen of dit werkt, de laatste 2 regels van onderstaande code zijn daarom toegevoegd en geen onderdeel van het programma.

void loop() {
randomSeed(analogRead(A5));
int willekeurigeTijd = random(5000);
Serial.println(willekeurigeTijd);
delay(1000);
}

Het volgende wat moet gebeuren is wachten tot de startknop is ingedrukt, zoals in de flowchart tutorial reeds aangetoond werd is dit een do while structuur. Je krijgt dan een iets groter programma, ook hier hebben we bewust het printen van de gegenereerde tijd laten staan en de delay om tijdens het testen van de code vast te kunnen stellen dat de do while werkt. Het programma blijft daar vast zitten tot er op de knop gedrukt zal worden.

void loop() {
randomSeed(analogRead(A5));
int willekeurigeTijd = random(5000);
do {
toestandStart = digitalRead(drukknopStart);
}
while(toestandStart == LOW);
Serial.println(willekeurigeTijd);
delay(200);
}

Het volgende stukje code dat erbij komt moet de groene led aanzetten, de willekeurige tijd wachten, de gele led aanzetten en de huidige tijd opslaan. Ook hier gaan we voor de test extra code toevoegen zodat we kunnen controleren dat alles goed werkt.

void loop() {
randomSeed(analogRead(A5));
int willekeurigeTijd = random(5000);
do {
toestandStart = digitalRead(drukknopStart);
}
while(toestandStart == LOW);
digitalWrite(rood,LOW);
digitalWrite(groen,HIGH);
delay(willekeurigeTijd);
digitalWrite(geel,HIGH);
digitalWrite(groen,LOW);
int tijd1 = millis();
Serial.print("de tijd is ");
Serial.println(tijd1);
delay(200);
}

Nu nog het meten van de reactietijd door het wachten op de stop knop, we gaan dus verder met het omzetten van de flowchart.

Dit tweede gedeelte is gelijkaardig maar nu moet je wachten op de stopknop en niet enkel de tijd bekijken maar ook het verschil bepalen tussen beide tijden. Als je dit allemaal doet krijg je volgende code in je loop();

void loop() {
randomSeed(analogRead(A5));
int willekeurigeTijd = random(5000);
do {
toestandStart = digitalRead(drukknopStart);
}
while(toestandStart == LOW);
digitalWrite(rood,LOW);
digitalWrite(groen,HIGH);
delay(willekeurigeTijd);
digitalWrite(geel,HIGH);
digitalWrite(groen,LOW);
int tijd1 = millis();
do {
toestandStop = digitalRead(drukknopStop);
}
while(toestandStop == LOW);
int reactietijd = millis() - tijd1;
Serial.print("je reactietijd was : ");
Serial.print(reactietijd);
Serial.println("ms");
digitalWrite(geel,LOW);
digitalWrite(rood,HIGH);
}

Zoals je ziet een kort maar krachtig programma dat alles doet wat je ervan verwacht. Na het indrukken van START zal groen oplichten dan na een willekeurige tijd geel en dan na het drukken op STOP rood. De tijd tussen het geel en het indrukken van de stopknop is je reactie.

Volgende les : Servo

Iets wat we nog niet gebruikt hebben en wat op het KAEDU STEM shield aanwezig is is de aansluiting van een externe servo. Hoe je deze moet aansturen kan je lezen in deze tutorial.

Vorige les : probleemstelling reactiesnelheid game

Wil je nog eens bekijken wat dit programma moet doen en hoe we tot de oplossing van het probleem kwamen dan kan je de analyse van de probleemstelling nogmaals bekijken.

Post Author: admin

3 reacties op “Tutorial : Een reactie snelheid GAME (code)

Geef een reactie