Tasks - die Zeit im Griff

Ein gängiges Problem beim Arbeiten mit Arduino ist die Zeitproblematik. Während einige Aufgaben laufend erledigt werden müssen, braucht man andere Aktionen nur alle paar Minuten zu erledigen. Schreibt man jetzt diese Aufgaben alle in den Loop, so bremsen unter Umständen diese Aktionen, die man gar nicht so oft erledigen müsste andere Funktionen aus. Zeitkontrolle mit Pausen macht die Sache nur noch schlimmer. Es macht also Sinn diese Tasks zeitgesteuert zu erledigen und zwar jede Aufgabe so oft wie nötig.

Es gibt zahlreiche "Taskplanner" als Libraries für Arduino, ven denen man jede verwenden kann. Wir haben einen sehr einfachen gemacht, der ressourcenschonend ist und seine Aufgabe zuverlässig erledigt. Die "Tasks" Library ist völlig unanhängig von der restlichen KNiXuino Library, weshalb sie auch nicht im Verzeichnis liegt, sondern ein eigenes Verzeichnis verpasst bekommen hat.


#include <Arduino.h>
#include <taskPlanner.h>


void checkWind() {
  // check here if wind is too strong.
  // if yes move up all shades.
  Serial.println("checking...");
  return;
}


taskPlanner checkWindObj(checkWind, 10*1000);


void setup() {
  Serial.begin(9600);
  Serial.println("Lets go!");
  // objectSettings();
}

void loop() {
  checkWindObj.doIt();
}




void serialEvent()
{
  char ch = Serial.read();
  if (ch == 's') Serial.println(checkWindObj.elapsed());
} // end keyboardInput


Es muss lediglich ein File (taskPlanner.h) inkludiert werden. Dann wird ein Objekt der Klasse taskPlanner angelegt, in dem die aufzurifende Funktion und das Zeitintervall der Aufrufe in Millisekunden angegeben wird. In unserem Fall wird also die Funktion checkWind alle 10 Sekunden aufgerufen. Im Loop wird eine doIt Funktion eingefügt und die Sache läuft.