Stopuhr mit Max7219 Matrix Display

Erster Erfolg !!

 if (laeuft && ergebnis >= 3000) {

Jetzt sartet die Uhr bei jedem neuen Tastendruck innerhalb von 3 sec. immer wieder neu.

Teilerfolgt aber nicht das Ergebnis, das ich ereichen will.
Die Zeit soll beim ersten tastendruck los laufen.

Danke im voraus!

Siebo

Ahoi die dritte

Ich habe es möglicheweise doch schon hin bekommen.
Aber für verbesserungen / vereinfachungen bin ich natürlich offen.

Geht es besser?

void loop() {
  uint32_t topLoop = millis();
  if (digitalRead(resetPin) != resetState) {
    resetState = !resetState;
    if (!resetState) {
      laeuft = false;
      anzeige(PSTR("START"));
      Serial.println(F("*Reset"));
    }
  }
  if (digitalRead(startPin) != startState) {
    startState = !startState;
    if (!startState && topLoop - stop >= 3000) {
      if (laeuft && ergebnis >= 3000) {
        stop = topLoop;
        laeuft = false;
        ergebnis = stop - start;
        anzeige(ergebnis);
        Serial.print(F("*Stop "));
        Serial.println(ergebnis);
      } else {        
        if (ergebnis <= 1 || laeuft == false ) {
          start = topLoop;
          laeuft = true;
          anzeige((uint32_t)0);
          Serial.println(F("*Start"));
        }
      }
    }

die hoffentlich entscheidende Änderung ist

 if (ergebnis <= 1 || laeuft == false ) {

Siebo

Hi

Habe mir Deinen Sketch jetzt nicht durchgesehen - Du musst aber doch 'nur' schauen, ob der Stop-Tastendruck 'mindestens drei Sekunden nach dem Start-Tastendruck' erfolgte.

 if (Taster gedrückt){
  switch druckanzahl{
  case 0:
     //Start-Tastendruck: millis() merken:
      startzeit=millis();
      druckanzahl=1;
   break;
  case 1:
    //Stoptaster (also Taster erneut gedrückt):
    if (millis()-startzeit>=3000){
       //jupp, mindestens drei Sekunden sind um
       endzeit=millis();
       //Anzeige der Laufzeit
       druckanzahl=2;
    }
    break;
  case 2:
  //Taster erneut gedrückt, dieses Mal Löschen/Resetten:
    if (millis()-endzeit>=3000){
      //und ein neuer Tastendruck
      //Anzeige löschen, bereits für nächsten Lauf
      druckanzahl=0;
    }
    break;
  default:
    break;
  }
}

Wenn man den Taster gedrückt hält, wechselt der Sketch durch alle Stationen im 3-Sekunden-Takt - eben, weil in jedem State die 3 Sekunden Zeit vergangen sein müssen, bevor 'weiter gegangen' wird.

MfG