Hallo liebe Community,
mit dem Arduino (derzeit eher ESP8266) noch in den Kinderschuhen, baue ich mir gerade eine universelles und strukturiertes Template für eine Reihe verschiedener Aufgaben (Aktoren, Sensoren, Kombi) im Haus. Allen gemein ist: MQTT und WLAN. Der Teil läuft auch schon sehr verlässlich. Auch Adafruit/Neopixel, etc geht (statisch) bereits wunderbar oder Sensorik (BME860, etc.). Dabei ist mir der Bedarf einer Aternative zu delay() völlig klar, ein TaskHandler ist sicher sinnvoll., Nur bin ich unsicher, was die richtiige Lösung ist...
Frage 1: Welche Bibliothek? Welche ist derzet die "beste Wahl"? Bin zunächst auf Scheduler.h gestoßen, aber die ist schon eine weile ohne Fortschritt. Die meisten Treffer finde ich zu TaskScheduler.h. Die Library ist auch aktiv in der Entwicklung. Tasks, um kein Delay zu haben, Ernegie-sparsamer zu sein (IDLE) und ohne delay-Verzögerung reaktiv zu sein,... Diesen Teil konnte ich grundsäctzlich bereits mit TaskScheduler.h erfüllen..
--> Ist diese Bibliothek auch eine Empfehlung in dieser Runde?
Frage 2:* Gerade in der LED-Aktorik möchte ich dynamisch parametrsierte Tasks erreichen. Ich weiß vorher noch nciht, wie viele Tasks undmit welchen Werten.
Einfaches Beispiel zur Veranschaulichung:
- Per MQTT ("1,1000,255,0,0,0") Pixel 1 mit sekündlich in rot blinken lassen und
- mit enem anderen Wert ("2,500,0,0,255") zum selben Topic parallel Pixel 2 doppelt so schnell in blau blinken lassen.
Ich würde denken, dass man nur eine Neopixel-Blink-Methode/Funktion braucht, die 2 Tasks zu zwei dynmaisch erzeugten Objekten/Instanzen werden (addTask? New task?). und mit einem MQTT-Wert (1,0,0,0,0,0) kann ich das Pixel 1 wieder ausschalten (deleteTask?).
Mir ist das OO-Prinzip an sich klar, aber ich bin ich ziemllich ungeübt damit und mit CPP habe ich erst vor wenigen Tagen mit Arduino angefangen. Auch nach Stunden kam ich mit den Beispielen zur Library nicht zum Erfolg (example8_LTS, example21_OO_Callbacks,...).
--> Wie löst man das mit TaskScheduler.h (oder einer empfehlenswerteren Library): Per MQTT kommt eine Wert herein: Was ist Global, setup(), loop() zu machen (außer "Scheduler runner;" und "runner.execute();")? Wie ist der Task mit den Paramtern zu instanziieren? Wie sähe eine einfache universelle Blink-Methode aus? Oder ist dies so gar nicht sinnvoll zu lösen?
Danke für das Stubsen in die richtige Richtung! ![]()
