Go Down

Topic: Stopuhr mit Max7219 Matrix Display (Read 3531 times) previous topic - next topic

obeis

#60
May 24, 2019, 10:04 pm Last Edit: May 24, 2019, 10:05 pm by obeis
Erster Erfolg !!

Code: [Select]
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

obeis

#61
May 24, 2019, 10:27 pm Last Edit: May 24, 2019, 10:30 pm by obeis
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?

Code: [Select]
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

Code: [Select]

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


Siebo

postmaster-ino

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.
Code: [Select]

 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

Go Up