Hallo,
ich versuche gerade mit dem Arduino Nano ein kleines Geschicklichkeitsspiel zu bauen. Ist recht simpel. An Pin 2,3 und 4 hängt jeweils über einen 220 Ohm Widerstand eine LED. Die LEDs leuchten immer nacheinander auf (also 2,3,4,3,2,3,4....). Desweiteren hängt ein Taster am Eingang A5, der über einen 1k Widerstand mit GROUND verbunden ist.
Aufgabe des Spielers ist es, den Knopf dann zu drücken, wenn die mittlere LED aufleuchtet (hier an Pin 3).
- Drückt der Spieler während die mittlere LED aufleuchtet den Taster, leuchtet die mittlere LED fünfmal kurz auf und es verkürzt sich das Intervall, indem die Lampen aufleuchten, um 50 Millisekunden, womit es in der nächsten "Runde" schwerer wird.
- Drückt der Spieler den Taster, während die linke oder rechte LED aufleuchtet, ist das Spiel verloren, die linke und rechte LED leuchten fünfmal kurz auf und es beginnt wieder von vorne mit dem Intervall 1000 Millisekunden.
Der Fehler liegt darin, dass es beim Probespielen ein paar Mal vorgekommen ist, dass alle 3 LEDs auf einmal leuchten und der Arduino nicht mehr auf den Druck des Tasters reagiert, als ob er in einer Endlosschleife wäre, während alle 3 LEDs leuchten. Leider kann ich den Fehler nicht finden.
Könnt ihr mir helfen ?
Mein Code ist folgender :
unsigned long stime = 0; //Startzeit
unsigned long etime = 0; //Endzeit
int intervall = 1000;
int Error = 0;
void setup() {
// put your setup code here, to run once:
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(A5, INPUT);
}
void allOff() //alle LEDs aus
{
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
}
//Taster wurde im falschen Moment gedrückt und
//und Spiel beginnt von vorne
void ErrorSignal() //Fehler
{
allOff();
delay(1000);
//kurzes Aufblinken der linken und rechten LEDs
for (int i=0; i<5; i++)
{
digitalWrite(2, HIGH);
digitalWrite(4, HIGH);
delay(200);
digitalWrite(2, LOW);
digitalWrite(4, LOW);
delay(200);
}
intervall = 1000;
}
//Taster wurde im richtigen Moment gedrückt und
//die Intervallzeit wird um 50 ms verkürzt
void SuccessSignal() //Erfolg
{
allOff();
delay(1000);
//kurzes Aufblinken der mittleren LED
for (int i=0; i<5; i++)
{
digitalWrite(3, HIGH);
delay(200);
digitalWrite(3, LOW);
delay(200);
}
intervall = intervall - 50; //Zeit um 50 ms verringern
}
void loop() {
//alle LEDs ausschalten
allOff();
//Linke LED aufleuchten
digitalWrite(2, HIGH);
stime = millis();
while (etime - stime < intervall)
{
if (analogRead(A5) > 500)
{
Error++;
}
etime = millis();
}
digitalWrite(2, LOW);
//Mittlere LED aufleuchten
digitalWrite(3, HIGH);
stime = millis();
while (etime - stime < intervall)
{
if (analogRead(A5) > 500)
{
SuccessSignal();
}
etime = millis();
}
digitalWrite(3, LOW);
//Rechte LED aufleuchten
digitalWrite(4, HIGH);
stime = millis();
while (etime - stime < intervall)
{
if (analogRead(A5) > 500)
{
ErrorSignal();
}
etime = millis();
}
digitalWrite(4, LOW);
//Mittlere LED aufleuchten
digitalWrite(3, HIGH);
stime = millis();
while (etime - stime < intervall)
{
if (analogRead(A5) > 500)
{
SuccessSignal();
}
etime = millis();
}
digitalWrite(3, LOW);
}
Viele Grüße,
UnoRookie