non-blocking function mit millis()

... und sogar nur jeweils 1 Relais und nie mehrere gleichzeitig ...
Da braucht es noch nicht mal so bewährte Lösungen wie die Leuchtfeuer - Landkarte.

Das BlinkWithoutDelay reicht schon eigentlich.
Der grundlegend andere Ansatz: "loop ist sofort wieder fertig, macht aber fast nie was"
ist dir wohl noch unklar, bzw. erfordert, deine Funktionen komplett umzuschreiben
Zusätzlich zum BlinkWithoutDelay

  • Musst dir nur noch merken, an welchem Ventil du grade bist.
  • vergleichst du die aktuelle Laufzeit mit einer von 4 Laufzeiten
  • machst du kein endloses Blinken, sondern sowas wie eine Schrittsteuerung mit Zeitgesteuerten Schritten

Ausserdem ist unklar, was passieren soll

  • wenn alle 4 durch sind :
  • Alle Ventile zu bis ein neues Kommando seriell reinkommt ?
  • sofort wieder von vorne ?
  • eine 5. Zeit, in der aber kein Ventil auf ist ?
  • ( diese Zeit ist der Rest der Summe aller Zeiten auf 86400 ) so dass das Programm 24 Stunden später wieder losgeht
  • wenn ein Kommando kommt während die Steuerung noch läuft:
  • Die Steuerung schliesst das aktuelle Ventil und startet das neue Programm
  • oder ? ( kann man sich komplizierte Sachen ausdenken )