Millis() innerhalb void loop auf Null setzen

In Display() fehlt das Merken der Startzeit. Als Anregung:

  switch (Anzeige) {

    case 0:
      displayanzeige = currentMillis;
      Anzeige = 1;
      break;

    case 1:
      //Displayhintergrund();

1 Like

Danke @agmue und @wwerner für die Hilfe! Werde es heute Abend, nach der Arbeit, mal ausprobieren.

Wenn Du Dich mit jemamden "in 10 Minuten" verabredest, schaust Du auf Deine Uhr und merkst Dir die aktuelle Zeit. Die gemerkte Zeit vergleichst Du so lange mit der aktuellen Zeit, bis die Differenz 10 Minuten beträgt.

switch (Anzeige) {

    case 0:
      startZeit = currentMillis;
      Anzeige = 1;
      break;

    case 1:
      if (millis() - startZeit >= intervall) { ... }

Alternativ kannst Du Dir auch die Zielzeit merken und dann mit der aktuellen vergleichen:

switch (Anzeige) {

    case 0:
      zielZeit = currentMillis + intervall;
      Anzeige = 1;
      break;

    case 1:
      if (millis() >= zielZeit) { ... }

Wobei die 2. Version den Überlauf nicht sauber stemmt.

Gruß Tommy

Ach ja, der Überlauf :thinking:

Gibt es eine Variante mit richtigem Überlauf?

Variante 1 macht keine Probleme.

Um das Problem oder nicht Problem zu erkennen, kann man Beispielhafte Werte kurz vor dem Überlauf sich aufschreiben und schauen was der Vergleich ergibt.

Ich habe millis() mal mit unsigned char nachgebildet. Damit kann man sich die Ausgabe bei verschiedenen if - Bedingungen im Überlaufmoment anschauen.

Gruß Tommy

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