Wie programmiere ich einen Reaktionstester bei arduino Uno (C++)?

2 Antworten

Was habe ich falsch programmiert?

Leider vieles...

  • Variablen, die Zeiten aus millis() speichern sollen, müssen als "unsigned long" deklariert werden.
  • Du brauchst zwei Zeitvariablen aus millis(), um die Differenz zu erfassen, denn millis) alleine läuft nach dem Powerup los und steigt bis zum überlauf weiter. Sprich, nach 1 Sekunde ist der Wert 1000, nach 60 Sekunden 60000 und setzt sich NICHT einfach zurück, wenn man millis() aufruft. Deshalb musst Du bei Start der Reaktion die Zeit speichern, bei Tastendruck eine zweite Zeit speichern und die Differenz berechnen, um die Reaktionszeit zu erhalten.
x= random (1,1000);
 if (x>10);
 if (x<300);
digitalWrite (10,HIGH);
 delay (100);
digitalWrite (10;LOW);

Du setzt x als Zufallszahl, prüfst x>10 und beendest die Abfrage, dann fragst Du nach x<300 und beendest wieder die Abfrage. Wenn etwas nur ausgeführt werden soll, wenn x zwischen 10 und 300 liegt, musst Du das anders schreiben:

if (x>10 && x<300){
Programmcode, der ausgeführt werden soll...
...
..
}

Hier würde jetzt ordentlich geprüft und der Code in der geschweiften Klammer nur ausgeführt wenn x mind 11 und max 299 ist...

Aber mit Delay zu arbeiten ist bei einem Reaktionstest ein absolutes NoGo, denn wenn der Arduino noch im Delay steckt, erkennt er auch keine Eingänge. Er stoppt solange alles. Heißt, Zeit speichern, LED einschalten und dann den Taster abfragen. Entweder mit einer Schleife, die erst endet, wenn der Taster gedrückt wird, oder zyklisch, dann musst Du aber auch verhindern, dass die Variable x neu gesetzt wird. Sprich, du brauchst noch eine Sperre, solange der Reaktionstest auf Eingabe wartet. Timer solltest Du dann auch nur mit millis() realisieren, also über die Zeitdifferenz, wenn Du welche brauchst, z.B. eine max Zeitüberwachung und den Reset, damit x wieder neu gesetzt werden kann...

Es gibtalso noch vieles zu beachten und zu berücksichtigen, bevpr ein Reaktionstest ordentlich laufen kann...


JuSp81 
Fragesteller
 16.05.2024, 21:53

Okay, alles klar😊, ich werde das Programm dann nochmal überarbeiten, Danke für die ausführliche Erklärung🫶.

0

Du hast 2 mal if ohne dass es was macht, sondern mit Semikolon. Das wird es nicht mögen. Viele Grüße