====== Zeitliche Abläufe steuern ====== ===== Einfach und ineffizient: Durch delays getrennte Anweisungen===== Wenn nur eine Aufgabe gleichzeitig erfüllt werden muss, spricht nichts dagegen, die Zeit zwischen den nötigen Einzelaktionen mit nichtstun zu überbrücken. In Arduino funktioniert das mit den Befehlen [[http://arduino.cc/de/Reference/Delay|delay]] (für millisekunden) und [[http://arduino.cc/de/Reference/DelayMicroseconds|delayMicroseconds]] (für noch kürzere Pausen). ===== Multitasking handgemacht: Zeitstempel ===== Delays haben den großen Nachteil, dass sie den Programmablauf blockieren, und währenddessen keine anderen Aktionen ausgeführt werden können. **Die Lösung:** Statt zu warten, merkt sich der Rechner den Zeitpunkt, an dem die nächste Aktion fällig ist und führt das Programm weiter aus. An einer anderen Stelle kann das Programm dann die aktuelle Zeit anschauen und überprüfen, ob der Termin fällig ist. Falls ja, wird die aktion ausgeführt und ggf. ein neuer Termin festgelegt. Indem sich das Programm unterschiedliche "Termine" für unterschiedliche Aktionen in separaten Variablen merkt, kann es Aufgaben gestaffelt "gleichzeitig" erledigen. Arduino stellt die seit dem Start vergangene Zeit durch die Funktion ''millis()'' und ''micros()'' bereit. **Das Beispiel:** Ein kommentiertes Beispiel für diese Vorgehensweise gibt es bei Arduino unter [[http://arduino.cc/en/Tutorial/BlinkWithoutDelay|Digital/BlinkWithoutDelay]] ===== Multitasking mit Hardwareunterstützung: Timer-Interrupts ===== Der im Arduino verbaute ATMega Prozessor besitzt mehrere integrierte Timer, die wie eine Stop- oder Eieruhr verwendet werden können. Sie sind ein kleines bisschen komplizierter in der benutzung, bieten dafür aber eine sehr hohe Genauigkeit und laufen auch dann weiter, wenn der Arduino gerade mit anderen Dingen ausgelastet ist. Die Bibliothek [[http://playground.arduino.cc/code/timer1|Timer1]] vereinfacht der Verwendung.