Frage zur Hysterese

Mit fehlt hier die etwas abstraktere Sicht auf die Dinge.

Denn:
Wenn man sich erstmal auf ein Verfahren festgebissen hat, und dann nur noch an Details schraubt, dann fallen die besseren Möglichkeiten weg, weil sie aus dem Blickfeld geraten sind.

//---

Für mich ist die Logik klar!

  1. Dinge in der Vergangenheit zu erledigen, ist unmöglich.
  2. Wenn man unterschiedliche Intervallzeiten braucht, macht man Intervall variabel.
  3. Wenn man ein anderes Startverhalten braucht, dann implementiert man das
    Fertig.

Gegenanzeigen sehe ich nicht.

Ziel ist es die Funktion auch sofort nach Programmstart/Reset auszuführen egal wie groß das Intervall ist.

Meine SimpleTimer Klasse könnte das!
Sie wurde u.A. gebaut um auch genau solche Probleme erschlagen zu können.
Ohne jede Trickserei!

#include <CombieTimer.h>

const unsigned long interval = 10000; //ms

const bool startMitDunkelPhase = true; // auf false setzen, wenn mit HellPhase gestartet werden soll



Combie::Timer::SimpleTimer timer; // timer Instanz anlegen

void setup()
{
  pinMode(LED_BUILTIN,OUTPUT);
  digitalWrite(LED_BUILTIN,false); // LED default: AUS
  if(startMitDunkelPhase) timer.start();
}

void loop()
{
  if(timer(interval)) // wenn abgelaufen
  { 
    digitalWrite(LED_BUILTIN,!digitalRead(LED_BUILTIN));
    timer.start();
  }
}

digitalWrite(LED_BUILTIN,false); // LED default: AUS
Alternativ könnte man auch hier einen anderen Default Wert wählen.
Aber die Frage war ja das Zeitverhalten.....

CombieLib.zip (50.6 KB)