Frage zu while-Schleife

Hallo! Wie kann ich eine while-Schleife für nur 2 sek. laufen lassen?

mfg Michael

z.B. so:

unsigned long start = millis();

while(millis() - 2000 < start) {
 //mache irgendwas ...

}

Besser so – keine while Schleife :wink: :

unsigned long start;
void loop() {
 if (startbedingung)
    start = millis();

 if (millis()-start < 2000)  {   // immer Differenz bilden, dann stört kein Überlauf von millis
   mach_irgendwas(); // sollte "sofort" fertig werden, um im nächsten loop - Durchlauf gleich wieder dranzukommen
 }

}
Vorteile:

  • loop hängt nicht
  • Startbedingung kann erneut getriggert werden, während mach_irgendwas noch beauftragt wird.
    Achtung:
  • wenn Startbedingung länger ansteht, wird mach_irgendwas entsprechend länger ausgeführt

Wenn etwas anderes Verhalten gewünscht, kann das natürlich auch realisiert werden,
das Prinzip “loop hängt nicht” sollte aber erhalten bleiben.