Erstmal danke für eure Antworten.
In Bezug auf den Programmablauf gebe ich jurs erstmal recht. Konkret war ich auf der Suche nach einer simplen Möglichkeit zu sehen was mein Programm gerade tut. Serial ist vom Optokoppler belegt der mit meiner Heizung spricht. LCD hatte ich bestellt, ist aber noch nicht da (von China dauert das eben). Also Blinkzeichen per LED - angelehnt an das BlinkWithoutDelay Beispiel. Die ersten 2 LED - naja kein schöner Code aber geht erstmal. Bei Nummer 5 von den 8 vorhandenen war das dann so unübersichtlich das ich das in eine kleine Lib ausgelagert habe. Als minibeispiel sieht der Aufruf jetzt so aus:
#include <LEDTimer.h>
LEDTimer step1(13);
void setup() {
}
void loop() {
step1.doEvents();
Wenn irgendwas dann: step1.blinkBegin( 1000, 500, 10); //Blinke 10 mal abwechselnd 1000 dann 500 ms
}
Bleiben also noch die überflüssigen Aufrufe von doEvents aus dem Usercode wegzuoptimieren. Und optimal wäre es natürlich wenn sich das nach dem letzten blinken wieder deregistriert.
zweites Beispiel: Serial
main() macht bei jedem Durchlauf der Hauptschleife das folgende:
if (serialEventRun) serialEventRun();
Das nenne ich einen "bösen Hack". Warum kann es sich nicht mit Serial.begin registrieren?
Der User hat hier auch keine Kontrolle. Braucht er sie? Nö! Der der Serial entwickelt hat, hat entschieden das das eben ab und zu gemacht werden muß. Aber es ist eigentlich Aufgabe der Lib dafür zu sorgen das es ausgeführt wird. Vom core würde ich nur einen Mechanismus erwarten der das (allgemein für alle die Libs die diese Funktionalität brauchen) ermöglicht.
drittes Beispiel: Ethernet
Keines der Beispiele verwendet Ethernet.maintain() auch wenn einige DHCP nutzen. Nach einigem suchen habe ich gelesen man kann es ruhig in jedem loop aufrufen. Warum gibt man dan nicht der Lib die Möglichkeit das zu tun? Wird sonst eh vergessen - macht aber irgendwann Probleme.
@mkl0815:
Die Idee mit der Klasse ist eine gute (Not-) Lösung. Das werde ich wohl auch erstmal so machen.
Ich gebe Dir Recht:
der User hat weniger Kontrolle darüber wann bestimmte Aktionen durchgeführt werden sollen
ABER: Braucht er die? (Siehe Serial)
zum Anderen kann die Lib ja nie wissen wie lange ein loop() Durchlauf dauert und ob das immer gleich lang ist.
ABER: Ob das schlecht oder egal ist, muß der Entwickler der Lib entscheiden. Bis jetzt kann er aber nichtmal beeinflussen ob seine Funktion überhaupt aufgerufen wird.
Ich hoffe ich konnte meine Überlegungen ungefähr rüber bringen.