Reaktionstest

Was geht Arduino Community,

ich habe eine frage bezüglich einem Reaktionstest. Wenn ein LED erleuchtet drückt man einen Knopf und es steht da "Spieler 1 hat gewonnen". Unser Problem ist dass wir noch einfügen müssen dass wenn eine Person drückt bevor das LED leuchtet muss da stehen "Speler 1 hat zu früh gedrückt" aber wir bekommen es nicht hin. hoffen auf Baldige Rückmeldung.

Na dann zeige uns doch mal, was ihr habt.
Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).

Gruß Tommy

Hallo,

Na ja , eigendlich eine Frage der verwendeten Logik, es gibt da wie immer mehrere Wegen nach Rom

ich denke mir das mal so.

Led geht an und es startet die Zeitmessung
der Zustand der LED wird auf eine interen Variable gespeichert und auf true gesetzt.

mit dem Taster wird die Zeit angehalten und die Reaktionszeit ausgegeben
der Zustand des gedrückten Tasters wird auf einer internen Variablen gespeichert und auf true gesetzt

Fehlerauswertung
wenn Zustand vom Taster true ist und der Zustand der LED ist noch auf false ist zu früh gedrücht worden.

mit einem zweiten Taste werden die beide Speicherzuständer wieder auf false gesetzt und der Zeitzähler wieder genullt, das Ding also wieder scharf geschaltet.
Ich denke so könnte das gehen.

int LEDblau = 7;
int Butt1 = 8;
int Butt2 = 9;
int Butt3 = 10;


void setup() {

Serial.begin(9600);
pinMode(Butt1,INPUT);
pinMode(Butt2,INPUT);
pinMode(Butt3,INPUT);
pinMode(7,OUTPUT);

}


void loop() {
digitalWrite(7, HIGH);
Serial.println("Nun folgt ein Reaktionstest der höchste Konzentration und ein gutes Geschick mit den Fingerspitzen verlangt");

delay (3000); 

Serial.println("Wenn das LED erleuchtet, drücke den Knopf!!!!");

delay (3000);

Serial.println("3");

delay (1000);

Serial.println("2");

delay (1000);

Serial.println("1");

delay (1000);

Serial.println("LOOOOS!!!");

while ((digitalRead(Butt1) ==HIGH) && (digitalRead(Butt2) ==HIGH) && (digitalRead(Butt3) ==HIGH)) { 
   //Wait for input
}

if (digitalRead(Butt1) == LOW)
{
Serial.println ("Spieler 1 hat zu früh gedrückt");
   }
   
else if(digitalRead(Butt2) == LOW)
   {
   Serial.println ("Spieler 2 hat zu früh gedrückt");  
       }
       
    else if(digitalRead(Butt3) == LOW)
     {
     Serial.println ("Spieler 3 hat zu früh gedrückt");   
     }
{ "return"; }

delay (300);
delay(random(3000, 5000));
digitalWrite(7,LOW);


while ((digitalRead(Butt1) ==HIGH) && (digitalRead(Butt2) ==HIGH) && (digitalRead(Butt3) ==HIGH)) { 
   //Wait for input
}

if (digitalRead(Butt1) == LOW)
{
Serial.println ("Spieler 1 hat gewonnen");
   }
   
else if(digitalRead(Butt2) == LOW)
   {
   Serial.println ("Spieler 2 hat gewonnen");  
       }
       
    else if(digitalRead(Butt3) == LOW)
     {
     Serial.println ("Spieler 3 hat gewonnen");   
     }
delay (5000);
}

Nochmal für Leseunwillige: Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).

Eine ordentliche Formatierung (+T in der IDE erhöht ebenfalls die Übersichtlichkeit).

Solange Du delay verwendest, kannst Du keine sinnvolle Reaktionkontrolle machen.

Gruß Tommy

Hallo,

ich hab mal dein Programm überflogen, kann es sein das da eigendlich so gut wie nix so läuft wie Ihr das eigendlich wollt. Tommy sagte ja bereit das es sich schlecht lesen lässt.

Vorschlag :
Ih mach einen Ablaufplan auf einem Zettel, möglichst fein und fangt noch mal von vorne an. Mit dem Ansatzt jetzt wird das nichst werden.

Ihr wollt ja , so wie ich das sehe 3 Spieler gleichzeitig an dem Spiel teilnehen lassen. Da musst Du doch an die Info kommen wer schneller gedrückt hat. Also entweder geegeneinander verriegeln , oder Zeiten messen.

Heinz

Mit einem Automaten wird das recht einfach:

Im Grundzustand wird geprüft, daß keine Taste gedrückt ist. Falls doch, wird die passende Fehlermeldung ausgegeben. So läßt sich auch prüfen, ob alle Tasten funktionieren,

Wenn keine Taste gedrückt ist, kann (nach zufälliger Wartezeit...) die LED eingeschaltet werden.

Dann warten auf den ersten Tastendruck und Verkündigung des Siegers, anschließend Warten bis keine Taste mehr gedrückt ist (ohne Fehlermeldung), dann zurück zum Grundzustand.

Hallo danke erstmal für die antworten jetzt funktioniert es fast. Nur eins funktioniert noch nicht und zwar geht das LED erst an wenn ich im ersten While Teil den Knopf drücke dass dort "Spieler 1 hat zu früh gedrückt" dann nach ein paar sekunden leuchtet erst das LED auf. Sonst funktioniert alles wie kann ich dass umgehen?

Grüße mein Brain

Dr_Dovenschmirtz:
Hallo danke erstmal für die antworten jetzt funktioniert es fast.
.....

Warum liest du eigentlich nicht die Posts, die man dir schreibt ?