Teste Deine Reaktion!
Reaktionstest mit Arduino und unseren Bricks
Heute präsentieren wir Euch ein Reaktionsspiel, durchführbar mit unseren Bricks und dem Arduino Nano. Die Idee entstand während unseres Brick-Workshops bei Nerd Rider und stammt von Michael Steidl und Maria Hoffmann. Vielen Dank Euch!
Den Code findet Ihr weiter unten, das passende YouTube-Video gibt es hier.
Viel Spaß beim Programmieren und anschließendem Test!
Wenn man die Batterie anschließt, ist man zuerst im Hauptmenü. Um in das erste Level zu kommen, muss man kurz den Taster drücken. Die gelbe onboard-LED leuchtet für eine bestimmte Zeit auf, in dieser Zeit muss man den Taster drücken und gedrückt halten. Wenn man den Taster innerhalb der bestimmten Zeit erfolgreich drückt, leuchtet die gelbe Brick-LED und man kommt in das nächste Level.
Die Zeit, die man hat, um den Taster zu drücken, wird immer kürzer. Nach 3 Fehlversuchen, das heißt, wenn die rote LED leuchtet, landet man im Hauptmenü. Wenn man das letzte Level überstanden hat, leuchten beide LEDs kurz auf.
Hier ist der Code für den Arduino:
/*
Author:Michael Steidl, Maria Hoffmann
Datum: 04.06.2016
Licence: GPL v2
Reaction game
*/
#define GREENLED 2
#define REDLED 3
#define SWITCH 4
int GELBELED = 13;
int reactionTime = 500;
int subTime = 50;
int winningTime = 150;
int errors = 0;
boolean game = false;
void menu();
void ingame();
void resetAllValues();
void setup()
{
pinMode(GREENLED, OUTPUT);
pinMode(REDLED, OUTPUT);
pinMode(SWITCH, INPUT_PULLUP);
pinMode(GELBELED, OUTPUT);
}
void resetAllValues()
{
int reactionTime = 500;
int subTime = 50;
int winningTime = 150;
int errors = 0;
}
void menu()
{
if(digitalRead(SWITCH)==LOW)
{
game = true;
}
digitalWrite(GREENLED, HIGH);
digitalWrite(REDLED, HIGH);
delay(200);
if(digitalRead(SWITCH)==LOW)
{
game = true;
}
digitalWrite(GREENLED, LOW);
digitalWrite(REDLED, LOW);
delay(200);
}
void ingame()
{
delay(3000);
digitalWrite(GELBELED,HIGH);
delay(reactionTime);
digitalWrite(GELBELED,LOW);
if(digitalRead(SWITCH)==LOW) //gedrückt
{
//Decrease Reaction Time
reactionTime = reactionTime – subTime;
if(reactionTime <= winningTime || reactionTime <= 0)
{
game = false;
resetAllValues();
}
digitalWrite(GREENLED,HIGH);
delay(1500);
digitalWrite(GREENLED,LOW);
}
else
{
errors++;
if(errors >= 3)
{
game = false;
resetAllValues();
}
digitalWrite(REDLED,HIGH);
delay(1500);
digitalWrite(REDLED,LOW);
}
}
void loop()
{
if(game == false)
{
menu();
}
else
{
ingame();
}
}