Hey,
Ich code einen Reaktionstester, jedoch habe ich Probleme damit.
Das erste Problem wäre, dass entweder der Lautsprecher einen Ton abgibt oder die LED blinkt. Dies soll zufällig laufen.
Das zweite Problem wäre die Zeitmessung. Ich möchte die Zeit messen ab dem Zeitpunkt, ab dem ein blinken oder ein Ton wiedergegeben werden. Daraufhin soll der Spieler den Schalter betätigen. Der Kontext:
"Der Reaktionstester misst die Zeit wie schnell man bei entweder blinken der LED oder einem bestimmten Ton aus dem Lautsprecher reagiert. Reagiert wird indem der Knopf gedrückt wird. Sobald der Knopf gedrückt wurde wird die Zeit gemessen und auf dem Display angezeigt. "
Ich habe es versucht umzusetzen. Jedoch hat es nicht geklappt. Woraufhin ich hier gelandet bin. Ich hoffe ihr könnt mir weiterhelfen.
Der Code:
Lg
Mikail
Und ich tippe mal drauf, dass die zahlreichen Delays dein Vorhaben stört.
Die solltes du besser entfernen und mit der Funktion millis() arbeiten, genau nach dem Beispiel "BlinkWithoutDelay".
Las den ganzen Quatsch weg, den Du da als Spielerchen drin hast und mach erstmal die Grundfunktion.
Und teile das in Funktionen auf.
Dann findest Du evtl, selber was.
Moin,
Bitte beim nächsten Mal das </> Symbol und nicht das Blockzitat, dann kan man den Code auch übernehmen.
ALSO:
Du willst da einen PIN beschreiben, aktivierst aber den internen PULLUP...
Dann werde ich aus Deinem Ablauf nicht schlau.
Eigentlich ist ein Reaktionstester doch ein einfacher Ablauf.
Starten, irgendwann kommt ein Auslöser, auf den muss reagiert werden, dann wird die Zeit ausgegeben, und alles von vorn.
Eine typische Schrittkette oder auch als Suchbegriff Statemachine.
Dafür gibt es das eine odere fertige Stück Code auch mit der Suchfunktion...
So ich habe Problem 2 gelöst aber Problem 1 nicht.
Das hier :"Das erste Problem wäre, dass entweder der Lautsprecher einen Ton abgibt oder die LED blinkt. Dies soll zufällig laufen."
Joa ich hab das mal so versucht, aber jedoch blinken und geben einen Ton wieder und dies zusammen. Mein Ziel: das nicht beide Sachen (Ton/blinken) auf einmal erfüllt werden(zufällig) Ich hoffe es ist jetzt verständlich @my_xy_projekt
long randNumber; //settings #include <Wire.h> #include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C Lcd(0x27,16,2);
unsigned long myTime1;
unsigned long myTime2;
const int LED_PIN = 6;
const int TASTER_PIN = 3;
int PIEZO_PIN = 5;
void setup() {//setup
Lcd.backlight();
pinMode(LED_PIN, OUTPUT);
pinMode(TASTER_PIN, INPUT_PULLUP);
Serial.begin(9600);
Lcd.init();
Lcd.print("NWT Projekt Game");
delay(200);
}
void loop() { //loop
int zahl = random(0,2);
int tasterValue = digitalRead(TASTER_PIN);
while (tasterValue == 1) {
tasterValue = digitalRead(TASTER_PIN);
}
Lcd.clear();
Lcd.print("START"); //rolling display
for (int i = 0; i < 10; i++) {
Lcd.scrollDisplayRight();
delay(50);
}
Lcd.scrollDisplayRight();
Lcd.clear();
Lcd.setCursor(0,0);
delay(50);
Lcd.clear();
Lcd.setCursor(11,4);
Lcd.print("START");
for (int i = 0; i < 12; i++) {
Lcd.scrollDisplayLeft();
delay(50);
}
Lcd.setCursor(0,0);
Lcd.clear();
Lcd.print("Press Button");
delay(350);
Lcd.clear();
tasterValue = digitalRead(TASTER_PIN);
if (tasterValue == 0) { //if statement LED&PIEZO
if (zahl == 1) {
digitalWrite(LED_PIN, HIGH);
Serial.println("if clause 1 starting LED");
}
else {
tone(PIEZO_PIN,523);
}
myTime1 = millis();
while (tasterValue == 0) {
tasterValue = digitalRead(TASTER_PIN);
}
myTime2 = millis();
Moins,
aehm.. mir ist schon klar, was Du willst, ich versteh nur noch nicht, wie Du das realisieren willst.
Also: Du hast einen Taster.
Mit dem willst Du den Test starten und gleichzeitig beenden.
Wie willst Du verhindern, das einfach doppelt auf den Taster gedrückt wird?
Also muss nach dem Start eine zufällige Zeit vergehen, bis die LED anfängt zu blinken - wobei mit dem aufleuchten begonnen werden sollte, damit nicht die AUS-Zeit schon mitzählt -, bzw. der piezo anfängt zu tröten.
Dann muss auf den Taster reagiert werden.
Die zufällige Auswahl, ob LED oder Piezo, ist dabei das geringste Übel.
Ist ein Zweizeiler.
Und @michael_x hats geschrieben... Codetags!