Arduino - LED - Blinken ohne Delay
Bereit, eine der mächtigsten Arduino-Programmiertechniken zu erlernen? Sie sind hier genau richtig! Dieses Tutorial zeigt Ihnen, wie Sie eine LED ohne die delay()-Funktion blinken lassen - und glauben Sie mir, sobald Sie diese Technik beherrschen, werden Ihre Arduino-Projekte nie wieder dieselben sein.
Stellen Sie sich vor, dass Ihr Arduino Mega zwei wichtige Aufgaben erfüllen muss: eine LED blinken lassen und einen Button-Zustand überprüfen, der jederzeit gedrückt werden kann. Wenn wir die delay()-Funktion verwenden (beschrieben in einem vorherigen Tutorial), könnte Ihr Arduino einige der Button-Drück-Ereignisse verpassen. Mit anderen Worten: Ihr Arduino kann die zweite Aufgabe nicht vollständig bewältigen, während es während der Delay-Periode beschäftigt wartet.
Hier wird die "Blinken ohne Delay"-Technik zu einem echten Game-Changer! In diesem umfassenden Tutorial lernen wir, wie Ihr Arduino Mega gleichzeitig eine LED blinken lassen und den Zustand eines Buttons überwachen kann, ohne Drück-Ereignisse zu verpassen. Stellen Sie es sich vor wie die Fähigkeit, gleichzeitig zu gehen und Kaugummi zu kauen - Ihr Arduino wird wahrhaft multitasking-fähig.
Wir werden drei detaillierte Beispiele durcharbeiten und die Unterschiede zwischen ihnen vergleichen, damit Sie genau sehen können, warum diese Methode so mächtig ist. Sie werden entdecken, wie Sie die millis()-Funktion effektiv einsetzen, Timing-Konzepte verstehen, die auf unzählige Projekte anwendbar sind, und Fähigkeiten erlangen, die Sie zu einem selbstbewussteren Arduino-Programmierer machen. Am Ende dieses Tutorials werden Sie das Wissen haben, um responsive, nicht-blockierende Arduino-Projekte zu erstellen, die mehrere Aufgaben reibungslos und effizient bewältigen können.
Wir werden die drei folgenden Beispiele durchlaufen und die Unterschiede zwischen ihnen vergleichen:
- Arduino lässt LED mit der delay()-Funktion blinken
- Arduino lässt LED mit der millis()-Funktion blinken
- Arduino lässt LED mit der ezLED-Bibliothek blinken
※ Notiz:
- Diese Methode ist nicht nur für das Blinken von LEDs und die Überprüfung des Button-Zustands geeignet. Allgemein ermöglicht diese Methode Arduino, mehrere Aufgaben gleichzeitig auszuführen, ohne sich gegenseitig zu blockieren.
- Dieses Tutorial bietet tiefgreifendes Wissen, das Ihnen hilft, das Funktionsprinzip zu verstehen. Um es einfach zu machen, können Sie die Arduino - LED Bibliothek verwenden.
Benötigte Hardware
Oder Sie können die folgenden Kits kaufen:
| 1 | × | DIYables Sensor-Kit (30 Sensoren/Displays) | |
| 1 | × | DIYables Sensor-Kit (18 Sensoren/Displays) |
Kaufhinweis: Um den Verdrahtungsprozess zu vereinfachen, empfehlen wir die Verwendung des LED Module, das mit einem eingebauten Widerstand geliefert wird.
Verdrahtungsdiagramm
Lassen Sie uns die Verbindungen für unser LED-Blinken-ohne-Delay-Projekt einrichten - keine Sorge, die Verdrahtung ist unkompliziert und wir führen Sie durch jede Verbindung! Das Verstehen dieser Verbindungen ist entscheidend dafür, dass Ihr nicht-blockierendes Arduino-Projekt reibungslos funktioniert.

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
Das obige Verdrahtungsdiagramm zeigt, wie Sie sowohl die LED als auch den Button mit Ihrem Arduino Mega verbinden. Lassen Sie sich Zeit bei den Verbindungen - wenn Sie sie beim ersten Mal richtig machen, sparen Sie sich später die Fehlersuche. Die LED wird über einen strombegrenzenden Widerstand angeschlossen, um sowohl die LED als auch Ihren Arduino zu schützen, während der Button die interne Pull-up-Widerstand-Funktion des Arduino Mega für saubere, zuverlässige Eingabemessungen nutzt.
| Bauteil-Pin | Arduino Mega Pin | Zweck |
|---|---|---|
| LED Langes Bein (Anode) | Pin 13 über 220Ω Widerstand | Ausgangssignal zur LED-Steuerung |
| LED Kurzes Bein (Kathode) | GND | Ground-Verbindung |
| Button Pin 1 | Pin 7 | Digitaler Eingang mit internem Pull-up |
| Button Pin 2 | GND | Ground-Verbindung für Button |
Arduino Code - Mit Delay
Jetzt kommt der interessante Teil - schauen wir uns zuerst den traditionellen blockierenden Ansatz an, damit Sie genau verstehen können, warum die nicht-blockierende Methode so viel besser ist! Dieses erste Beispiel verwendet die delay()-Funktion, und Sie werden sehen, wie sie Beschränkungen in der Reaktionsfähigkeit Ihres Arduino erzeugt. Machen Sie sich keine Sorgen, wenn das Konzept zunächst komplex erscheint; wir gehen alles Schritt für Schritt durch.
Schnelle Schritte
Neu bei Arduino? Kein Problem! Beginnen Sie mit unserem Arduino Getting Started Leitfaden, um zuerst die Grundlagen zu lernen.
- Hardware Verbinden: Verdrahten Sie die LED und den Button gemäß dem obigen Diagramm. Lassen Sie sich Zeit dabei - gute Verbindungen sind die Grundlage eines funktionierenden Projekts.
- Arduino IDE Öffnen: Starten Sie die Arduino IDE auf Ihrem Computer und wählen Sie Ihr Arduino Mega aus dem Board-Menü. Vergessen Sie nicht, den richtigen COM-Port zu wählen!
- Code Hochladen: Kopieren Sie den obigen Code in einen neuen Arduino-Sketch und klicken Sie auf den Upload-Button. Sie sollten die "Done uploading"-Nachricht sehen, wenn es erfolgreich war.
- Serial Monitor Öffnen: Klicken Sie auf den Serial Monitor Button (Lupensymbol), um die Button-Drück-Ausgaben zu sehen. Stellen Sie die Baudrate auf 9600 ein.
- Blockierendes Verhalten Testen: Drücken Sie den Button mehrmals schnell hintereinander, während Sie das LED-Blinken beobachten. Sie werden etwas Frustrierendes bemerken - einige Ihrer Button-Drücke werden verpasst!
- Das Problem Beobachten: Beobachten Sie die Serial Monitor-Ausgabe. Sie werden sehen, dass nicht alle Ihre Button-Drücke erkannt werden, besonders wenn Sie während der Delay-Perioden drücken.
Profi-Tipp: Versuchen Sie, den Button zu verschiedenen Zeiten während des LED-Zyklus zu drücken. Sie werden bemerken, dass Drücke während der delay()-Perioden völlig ignoriert werden - das ist genau das Problem, das wir lösen werden!
- Verbinden Sie Arduino über USB-Kabel mit dem PC
- Öffnen Sie die Arduino IDE, wählen Sie das richtige Board und den Port
- Kopieren Sie den obigen Code und öffnen Sie ihn mit der Arduino IDE
- Klicken Sie auf den Upload-Button in der Arduino IDE, um den Code auf Arduino hochzuladen

- Öffnen Sie den Serial Monitor
- Drücken Sie den Button 4 Mal
- Beobachten Sie die LED: Die LED wechselt periodisch alle Sekunde zwischen AN/AUS
- Sehen Sie sich die Ausgabe im Serial Monitor an
- Im Serial Monitor wurden einige Drück-Zeiten verpasst. Das liegt daran, dass Arduino während der Delay-Zeit NICHTS anderes tun kann. Daher ist es nicht in der Lage, das Drück-Ereignis zu erkennen.
Arduino Code - Ohne Delay
Hier geschieht die Magie! Dieser nicht-blockierende Ansatz mit millis() wird völlig transformieren, wie Ihr Arduino mehrere Aufgaben bewältigt. Die LED wird mit genau derselben Rate blinken, aber jetzt bleibt Ihr Arduino vollständig reaktionsfähig für Button-Drücke. Es ist wie ein Upgrade von einem einzelnen-Aufgaben-Computer zu einem Multitasking-Kraftpaket!
Schnelle Schritte
- Neuen Code Hochladen: Ersetzen Sie den vorherigen Code mit dieser millis()-basierten Version und laden Sie sie auf Ihr Arduino Mega hoch. Sie werden gleich eine dramatische Verbesserung der Reaktionsfähigkeit sehen!
- Mehrere Aufgaben Testen: Drücken Sie den Button mehrmals schnell hintereinander, während die LED blinkt. Diesmal werden Sie bemerken, dass jeder einzelne Button-Druck erkannt wird - keine verpassten Ereignisse mehr!
- Den Unterschied Vergleichen: Beobachten Sie, wie die LED ihren gleichmäßigen Blink-Rhythmus beibehält, während Ihr Arduino sofort auf jeden Button-Druck reagiert. Das ist die Kraft der nicht-blockierenden Programmierung!
- Serial Monitor Überprüfen: Öffnen Sie den Serial Monitor und drücken Sie den Button mehrere Male. Sie werden sehen, dass alle Drück-Ereignisse nun erfasst werden, unabhängig davon, wann während des LED-Zyklus Sie drücken.
- Mit Timing Experimentieren: Versuchen Sie, den Button kurz gedrückt zu halten oder ihn schnell hintereinander zu drücken. Bemerken Sie, wie reaktionsfähig und zuverlässig das System im Vergleich zur delay-basierten Version geworden ist.
- Führen Sie den obigen Code aus und drücken Sie den Button 4 Mal
- Beobachten Sie die LED: Die LED wechselt periodisch alle Sekunde zwischen AN/AUS
- Sehen Sie sich die Ausgabe im Serial Monitor an
- Alle Drück-Ereignisse wurden erkannt.
Code-Erklärung
Lesen Sie die zeilenweise Erklärung in den Kommentarzeilen des Codes!
Weitere Aufgaben Hinzufügen
Der folgende Code demonstriert die wahre Kraft der nicht-blockierenden Programmierung, indem er zwei LEDs mit unterschiedlichen Blink-Intervallen steuert und gleichzeitig einen Button überwacht. Dieses Beispiel zeigt, wie Sie diese Technik skalieren können, um mehrere unabhängige Aufgaben zu bewältigen - stellen Sie sich die Möglichkeiten für Ihre zukünftigen Projekte vor!
Erweiterbarkeit
Diese millis()-basierte Methode eröffnet unglaubliche Möglichkeiten für Ihre Arduino Mega-Projekte! Sie können diesen nicht-blockierenden Ansatz verwenden, um Ihrem Arduino zu ermöglichen, mehrere Aufgaben gleichzeitig ohne jede Interferenz zwischen ihnen zu bewältigen. Stellen Sie es sich vor, als würden Sie Ihrem Arduino die Fähigkeit geben, Multitasking wie ein moderner Computer zu betreiben.
Zum Beispiel könnten Sie ein Projekt erstellen, das Anfragen an das Internet sendet und auf Antworten wartet, während es gleichzeitig LED-Status-Anzeigen blinken lässt, mehrere Buttons überprüft, Sensorwerte liest und ein Display aktualisiert - alles zur gleichen Zeit! Der Schlüssel ist, dass jede Aufgabe ihr eigenes Timing mit millis() verwaltet, wodurch sie harmonisch koexistieren können.
Andere praktische Anwendungen umfassen: die Erstellung reaktionsfähiger Benutzeroberflächen, die während langer Operationen nicht einfrieren, den Bau von Datenlogging-Systemen, die weiterhin Sensormessungen sammeln, während sie auf SD-Karten schreiben, die Entwicklung von IoT-Geräten, die Netzwerkverbindungen aufrechterhalten, während sie physische Ausgänge steuern, oder das Design interaktiver Installationen, die auf mehrere Eingaben reagieren, während sie komplexe Lichtsequenzen ausführen.
Anwendungsideen: Jetzt, da Sie die nicht-blockierende Programmierung beherrschen, ist Ihrer Kreativität keine Grenzen gesetzt! Hier sind einige aufregende Projektideen für den Einstieg: Sie könnten einen Smart Home Controller erstellen, der Lichter, Sensoren und drahtlose Kommunikation gleichzeitig verwaltet, eine Wetterstation bauen, die Daten protokolliert, während sie einen Webserver aktualisiert und Echtzeitinformationen anzeigt, eine interaktive Kunstinstallation mit mehreren Sensoren und LED-Arrays einrichten, die unabhängig reagieren, ein Sicherheitssystem entwickeln, das mehrere Zonen überwacht, während es Alarme sendet und Status-Displays aktualisiert, oder sogar einen Roboter entwerfen, der navigieren kann, während er Sensordaten verarbeitet und auf Fernbefehle reagiert. Was werden Sie zuerst bauen?
Fordern Sie sich selbst heraus: Bereit, Ihre nicht-blockierenden Programmierfähigkeiten auf die nächste Stufe zu heben? Probieren Sie diese spannenden Herausforderungen:
- Einfache Herausforderung: Modifizieren Sie den Code, um drei LEDs mit verschiedenen Raten (500ms, 1000ms und 1500ms) blinken zu lassen, während Sie den Button überwachen. Beginnen Sie mit dieser, um Ihr Selbstvertrauen aufzubauen!
- Mittlere Herausforderung: Fügen Sie einen zweiten Button hinzu, der die Blink-Geschwindigkeit einer LED ändert, wenn er gedrückt wird. Das wird Ihnen beibringen, wie man mehrere Eingaben in nicht-blockierendem Code behandelt.
- Fortgeschrittene Herausforderung: Erstellen Sie ein "Simon Says"-artiges Gedächtnisspiel mit mehreren LEDs und Buttons, bei dem Muster ablaufen, während das System auf Spielereingaben reaktionsfähig bleibt. Machen Sie sich keine Sorgen, wenn Sie stecken bleiben - so lernen wir!
- Experten-Herausforderung: Bauen Sie ein Datenlogging-System, das alle 30 Sekunden einen Sensor liest, jede Sekunde eine Status-LED blinken lässt, auf Button-Drücke zum Starten/Stoppen des Loggings prüft und Daten über Serial sendet - alles ohne eine Aufgabe zu blockieren.
- Kreative Herausforderung: Entwerfen Sie Ihr eigenes interaktives Projekt, das mindestens drei verschiedene Timing-Intervalle kombiniert. Vielleicht einen Ampel-Simulator, eine musikalische Lichtshow oder ein Pflanzen-Bewässerungs-Erinnerungssystem!
Beginnen Sie mit den einfachen und arbeiten Sie sich hoch! Jede Herausforderung wird Ihr Verständnis der nicht-blockierenden Programmierung stärken und Sie für noch komplexere Projekte vorbereiten. Denken Sie daran, der beste Weg zu lernen ist durch das Tun, also haben Sie keine Angst zu experimentieren und unterwegs Fehler zu machen.