ArduinoReaction game

We gaan dit keer een spelletje maken. Dit gaat helemaal om reactiesnelheid.

We hebben 5 gele LED's, deze zullen in willekeurige volgorde een aantal keer gaan knipperen. Ook dit aantal is willekeurig. Dan stopt dit irritante geknipper en zal de groene LED gaan branden.

Dat is het moment dat de speler in actie moet komen en zo snel mogelijk om de knop moet drukken. Het programma wacht dan eventjes en gaat nadenken. Als het snel genoeg was dan zal de groene LED even aangaan, zoniet de rode LED, om aan te geven dat de speler compleet gefaald heeft. Smiley. Hierna begint het spel opnieuw en krijgt de speler dus een herkansing.



ArduinoBreadboard


ArduinoSource code
/*
  Reaction game
  
  www.punthooft.nl
*/

// Constants
const int led1 = 6;
const int led2 = 5;
const int led3 = 4;
const int led4 = 3;
const int led5 = 2;

const int ledOk = 9;
const int ledFault = 8;

const int button = 12;

// Variables
int randNumber;
int randLed;
int playMode = 0;
int counter = 0;
int buttonState = 0;

// Setup function runs once when powerup the board and on reset 
void setup() {

  //Serial Port begin
  Serial.begin (9600);

  // Define output LEDs
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);

  pinMode(ledOk, OUTPUT);
  pinMode(ledFault, OUTPUT);

  pinMode(button, INPUT);
  
  // Prepare random generator
  randomSeed(analogRead(0));

  Serial.println("De rode LEDs zullen afwisselend, gaan knipperen.");
  Serial.println("Op een gegeven moment zal de groene LED aangaan.");
  Serial.println("Dan moet je zo snel mogelijk je hand voor de sensor houden");
  Serial.println("Of juist ervoor weghalen.");

  // Select random number
  randNumber = 3 + random(10);
}


// The loop function runs over and over again forever
void loop() {

  if (randNumber > 0) {

      randLed = 2 + random(5);
      digitalWrite(randLed, HIGH);     // Turn the LED on (HIGH is the voltage level)
      delay(1000);                     // Wait for a second
      digitalWrite(randLed, LOW);      // Turn the LED off by making the voltage LOW

      randNumber--;
      playMode = 0;
      counter = 0;

  } else {

    switch(playMode) {
       case 0: // Start

          // Set playmode to measuring
          playMode = 1;

          // Turn on LED ok
          digitalWrite(ledOk, HIGH);     // Turn the LED on (HIGH is the voltage level)
          break;
          
        case 1: // Measuring  
            Serial.println(counter);

           buttonState = digitalRead(button);

           if (buttonState == HIGH) {
              Serial.println("Knop gedrukt");
              playMode = 2;
              digitalWrite(ledOk, LOW);      // Turn the LED off by making the voltage LOW
           } else {
             counter++;
           }
           break;

         case 2: // Pressed button
            Serial.println(counter);

            delay(3000);                     // Judge by waiting

            if (counter<100) {
              digitalWrite(ledOk, HIGH);     // Turn the LED on (HIGH is the voltage level)
              delay(1000);
              digitalWrite(ledOk, LOW);      // Turn the LED off by making the voltage LOW
            } else {
              // Turn on LED ok
              digitalWrite(ledFault, HIGH);     // Turn the LED on (HIGH is the voltage level)
              delay(1000);                     // Wait for a second
              digitalWrite(ledFault, LOW);      // Turn the LED off by making the voltage LOW
            }

            // Select random number
            randNumber = 3 + random(10);
            break;

        default:
            Serial.println("Hier kom ik niet");
    }
  }
}



ArduinoToevoeging

De tijdsduur die de speler heeft staat nu op 100. Het spel is natuurlijk aantrekkelijker te maken door de tijdsduur iedere keer een klein beetje te verlagen. Maak hiervoor een variable:

  int reactionLimit = 100;

En ga in de code hierop testen:

  if (counter<reactionLimit) {

Iedere keer als je een nieuw nummer kiest, verlaag je deze variable:

  reactionLimit--;


Copyright 2019 www.punthooft.nl
We do not collect cookies for advertisement. Your data is never send to third parties.