2 Loops mit unterschiedlichem Delay gleichzeitig ausführen (Arduino)?
Servus.
Ich bin an einem Projekt indem ich eine funktion so oft und schnell wie möglich immer wieder ausführen will und eine andere aus performance gründen nur alle 100ms ausführen will.
Wie kann ich die eine funktion im "loop()" ausführen und die andere alle 100ms aufrufen ohne dass die erste funktion auch einen Delay bekommt?
Habe ich die Möglichkeit das zu tun, oder ist das nicht möglich?
2 Antworten
Da der Arduino nur einen Rechenkern hat, kannst du keine zwei Sachen parallel ausführen. Wenn deine zweite Funktion ausgeführt wird, muss die erste Funktion warten.
Vielleicht reicht für deinen Fall aber auch folgende Idee erst einmal aus:
unsigned long aLastRunTime = 0;
void setup
{
}
void loop
{
funktion1();
if (millis() - aLastRunTime > 100) {
funktion2();
aLastRunTime = millis();
}
}
Die Funktion 1 wird so mit jedem Loop-Aufruf ausgeführt, die Funktion 2 nur, wenn seit dem letzten Aufruf 100ms vergangen sind. Wenn die Funktion 2 nicht allzu zeitaufwändig ist, merkt man von der kurzen Verzögerung bis Funktion 1 erneut aufgerufen wird, meist nichts.
Ansonsten bliebe nur mit zwei Arduinos gleichzeitig zu arbeiten.
Du könntest einfach mit Interrupts arbeiten.