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!
- Dinge in der Vergangenheit zu erledigen, ist unmöglich.
- Wenn man unterschiedliche Intervallzeiten braucht, macht man Intervall variabel.
- 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)