====== LED blinken lassen ohne delay() Funktion ====== Das folgende Programm ist funktionell das gleiche wie das erste Blink-Programm. Allerdings wird hier auf die Verwendung der delay() Funktion verzichtet. Der Nachteil dieser delay() Funktion ist folgender: Während die Funktion die Zeit abwartet, können keine weitere Aktionen durchgeführt werden. Das folgende Programm umgeht diesen Nachteil. Es können z.B. trotzdem noch Werte eingelesen oder Ausgaben auf einem LCD Display gemacht werden. /** * Dieser Sketch "Blink" laesst die SMD-LED auf dem Arduino Board blinken. * Dabei wird auf die delay() Funktion verzichtet. * */ int led = 13; int state = LOW; // Variable um den aktuellen Status der LED zu zwischen zu speichern unsigned long timestamp; // Variable um den aktuellen Timestamp zu speichern unsigned long lastupdate = 0; // Variable um den Timestamp des letzten Update zu speichern void setup () { Serial.begin (9600); pinMode (led, OUTPUT); } void loop () { timestamp = millis (); /* Die Funktion millis() gibt den Anzahl der vergangenen Millisekunden seit dem Start des Arduino zurück. Fängt nach ca. 50 Tagen wieder bei 0 an zu zählen. */ if (timestamp - lastupdate > 1000) { // sind schon 1000 Millisekunden vergangen? state = digitalRead (led); // digitalRead() gibt den aktuellen Status des IO-Port zurück (High/Low) lastupdate = timestamp; // speichert den Timestamp des letzten Statuswechsel (LED an/aus) digitalWrite (led, !state); // setzt den IO-Port 13 auf den gegenteiligen Status. /* Das Ausrufezeichen vor der Variable state bewirkt eine logische Negation. Aus HIGH wir LOW und aus LOW wird HIGH */ Serial.println("LED umgeschaltet"); } /* An dieser Stelle könnte weiterer Code folgen der trotz blinken weiter ausgeführt wird! */ }