BetweenLoop - Event

eddyst:
Gibt's sowas evl. schon? Was haltet Ihr von der Idee? Oder wie handhabt Ihr sowas?

Keine Ahnung. Denn ich verstehe überhaupt nicht, was Du meinst.

Ein normales Programm-Design sieht so aus: Kein delay(), es sei denn vielleicht mal im Notfall ganz kurze bis hoch zu delay(5), ansonsten alles mit nicht-blockierenden Funktionen realisieren!

Und dann ist Deine loop eine enge loop, die zig- bis tausende mal pro Sekunde durchläuft, z.B. für eine Robotersteuerung:

void loop()
{
Sensoren_auswerten();
Funkbefehle_auswerten();
Blinken();
Lenken();
Fahren();
Status_melden();
}

Keine der Funktionen darf

  • ein delay() enthalten (es sei denn extrem kurze)
  • eine länger laufende Schleife enthalten

Und eine Funktion wie Funkbefehle_auswerten() darf NICHT so anfangen:

  • Warte_auf_Funkbefehl()
  • Führe Funkbefehl aus()

Sondern so:

  • wenn kein Funkbefehl bereit, dann Funktion verlassen
  • Funkbefehl lesen
  • Statusvariable zur Befehlsausführung setzen

Und wenn der Funkbefehl beispielsweise "Blinken()" lautet, dann darf das nicht so aussehen

  • Blinker an
    . delay(xy)
  • Blinker aus
  • delay(xy)

Sondern so

  • wenn (xy Zeit) seit letzter Umschaltung vergangen, dann Umschaltung des Blinkstatus

Und wenn Dein Programmdesign korrekt ist und Du beispielsweise 10 Unterfunktionen in Deiner loop drin hast, von denen jede maximal 10 ms Ausführungszeit benötigt, wären das 10*10 = 100 ms und Deine gesamte Loop wird dennoch mindestens zehnmal pro Sekunde komplett durchlaufen, ohne dass irgendwo noch Aufrufe in andere Unterfunktionen eingefügt werden brauchen.

Falls das mit den zu lange laufenden Funktionen mit delay() und langlaufenden Schleifen nicht das Problem ist, mach mal ein etwas konkreteres Beispiel! Die einfache "Liste mit Funktionszeigern" ist normalerweise immer die loop und die ist doch bereits vorhanden!