Reaktionszeit mit LED berechnen

Hi,
Wir bräuchten Hilfe bei folgender Aufgabenstellung:

  1. LED leuchtet auf
  2. Spieler betätigt den Taster-> LED erlischt
    Zeit zwischen Aufleuchten der LED und Tasterbetätigung wird ausgegeben
  3. Nach einer Random Zeit ( bis 10s) fängt das Spiel wieder an.

Danke für eure Hilfe

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden.
Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.
mfg ein Moderator.

Gehe davon aus das die LED, Taster schon funktionieren :wink:
So was macht man mit millis (),
also deklarieren

unsigned long start ;
unsigned long messen ;

LED leuchtet auf
start = millis() ;
nach drücken auf Taster
messen = millis() ;
int zeit = messen - start ;

Ausgabe der zeit zB.
Seial.println (zeit / 1000); // zeit wird in Sekunden mit Nachkommastelle ausgegeben

In eurem Ablauf fehlt etwas um Frühstarts zu erkennen.
ansonsten
0. Spieler drückt Taster
...
--> Spieler hat immer 0 Sekunden Reaktionszeit.

//Variablendefinitionen
int ROTE_LED=D4;
int buttonPin=10;
int LAST_MILLIS=0;

void setup() {
  // put your setup code here, to run once:
pinMode(ROTE_LED, OUTPUT);
pinMode(buttonPin, INPUT);
digitalWrite(ROTE_LED, HIGH);
}

void loop() {
  // put your main code here, to run repeatedly:
//digitalWrite(ROTE_LED, HIGH);
if (digitalRead(ROTE_LED) == HIGH) {
 digitalWrite(ROTE_LED, HIGH);
 }
 else {
 digitalWrite(ROTE_LED, LOW);
 Serial.println(LAST_MILLIS=millis());
 }
}

Das wäre der Code den wir bis jetzt haben

Neues Spiel, neues Glück...?

Oder warum machst du nicht hier weiter ?

Zumindest hättest du da mal die Fragen und Beiträge beantworten können.

du sollst ein Algorithmus bauen, sobald es gewünschten Aufgabe entspricht kann man es schnell in einer Programmiersprache umschreiben.

aha, und wo ist die Tastenabfrage?

if (digitalRead(ROTE_LED) == HIGH) {
 digitalWrite(ROTE_LED, HIGH);

was macht das?

Den Rest macht ihr alleine :wink:
Ist ja Eure Aufgabe.
Für sowas nimmt man Blatt und schreibt nach der Reiche was soll Passieren danach baut ihr den Code.

//Variablendefinitionen
int ROTE_LED = D4;
int buttonPin = 10;
unsigned long LAST_MILLIS ;
unsigned long startZeit ;

void setup() {
  // put your setup code here, to run once:
  pinMode(ROTE_LED, OUTPUT);
  pinMode(buttonPin, INPUT);
  digitalWrite(ROTE_LED, HIGH);

}

void loop() {
   
  //LED wurde im Setup eingeschaltet 
  if (digitalRead(buttonPin) == HIGH)//Taster Abfrage
  {
    startZeit = millis(); //Zeitmessung start
    //digitalWrite(ROTE_LED, HIGH);

  }

  if (digitalRead(buttonPin) == LOW)
  {
    digitalWrite(ROTE_LED, LOW); 
    LAST_MILLIS = millis();
  }
}

 

Da ich nicht weis wie der Taster angeklemmt ist gehe davon aus das der gegen VCC geschaltet wird, zeichnet mall die Schaltung.
Taster schaltet man gegen GND sonnst kan passieren das der Eingang flattert
Dadurch wird aber die Logik umgekehrt , und man deklariert den Eingang mit

pinMode(buttonPin, INPUT_PULLUP);
//Variablendefinitionen
const byte ROTE_LED = 4;
const byte buttonPin = 10;
unsigned long LAST_MILLIS = 0;

const bool gedrueckt = LOW;  // ACHTUNG! DAS KOMMT DARAUF AN, WIE DER TASTER ANGESCHLOSSEN IST!!!
uint32_t startzeit, endzeit;

void setup()
{
  // put your setup code here, to run once:
  pinMode(ROTE_LED, OUTPUT);
  digitalWrite(ROTE_LED, LOW);
  pinMode(buttonPin, INPUT);      // NUR WENN DER EXTERN BESCHALTEN IST!
  // pinMode(buttonPIN, INPUT_PULLUP); // WENN DER TASTER NICHT EXTERN BESCHALTEN IST, DANN NACH GND SCHALTEN!
  randomSeed(A0);
}

void loop()
{
  if (digitalRead(buttonPin) == gedrueckt)
  {
    if (digitalRead(ROTE_LED) == HIGH)
    {
      endzeit = millis();
      digitalWrite(ROTE_LED, LOW);
      Serial.print(F("Reaktionszeit: "));
      Serial.print(endzeit - startzeit);
      Serial.println(F(" ms"));
    }
    endzeit = millis();  // Wird neu gesetzt um die ZufallsSperre bei gedrückter Taste nicht zu umgehen
  }
  else if (digitalRead(ROTE_LED) == LOW)
  {
    if (millis() - endzeit > static_cast<unsigned long>(random(5000, 15000)))
    {
      digitalWrite(ROTE_LED, HIGH);
      startzeit = millis();
    }
  }
}

Falsch gemacht, Die sollen lernen und nicht abschreiben, habe extra Stolpersteine eingebaut . außer dem Schüler sollen benutzten das was die kennen und nicht sofort höheres C++

Warum lernen, wenn man hier alles geliefert bekommt ?

Da ist ein Widerspruch drin!

Danach eine 6, plus wo möglich noch Ärger. Zeigen wo es hingeht finde ok.

Das stimmt !

Deswegen sollte man das auch nicht unterstützen.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.