Arduino Nano - LED - Blinken ohne Verzögerung

Stellen wir uns vor, dass der Arduino Nano zwei Aufgaben zu erledigen hat: eine LED blinken lassen und den Zustand eines Knopfs überwachen, der jederzeit gedrückt werden kann. Wenn wir die delay()-Funktion verwenden (wie in einem früheren Tutorial besprochen), könnte der Arduino Nano einige der Knopfdrucke übersehen. Mit anderen Worten ist der Arduino Nano nicht in der Lage, die zweite Aufgabe vollständig zu erfüllen.

In diesem Tutorial wird erklärt, wie man mit dem Arduino Nano eine LED zum Blinken bringt und den Zustand eines Tasters erkennt, ohne dass Betätigungsereignisse verpasst werden.

Wir werden drei Beispiele durchgehen und die Unterschiede zwischen ihnen vergleichen:

Diese Methode beschränkt sich nicht nur darauf, eine LED blinken zu lassen und den Zustand des Tasters zu überprüfen. Generell ermöglicht sie dem Arduino Nano, mehrere Aufgaben gleichzeitig auszuführen, ohne sich gegenseitig zu blockieren.

Erforderliche Hardware

1×Official Arduino Nano
1×Alternativ: DIYables ATMEGA328P Nano Development Board
1×USB-A-zu-Mini-B-Kabel
1×LED Kit
1×LED (red)
1×LED Module
1×220Ω Resistor
1×Breadboard-Taster mit Kappe
1×Breadboard-Taster-Kit
1×Panel-Drucktaster
1×Taster-Modul
1×Breadboard
1×Verbindungskabel
1×(Empfohlen) Schraubklemmen-Erweiterungsboard für Arduino Nano
1×(Empfohlen) Breakout-Erweiterungsboard für Arduino Nano
1×(Empfohlen) Stromverteiler für Arduino Nano

Oder Sie können die folgenden Kits kaufen:

1×DIYables Sensor-Kit (30 Sensoren/Displays)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Kaufhinweis: Um den Verdrahtungsprozess zu vereinfachen, empfehlen wir die Verwendung des LED Module, das mit einem eingebauten Widerstand geliefert wird.

Über LED und Taster

Wenn Sie mit LED und Knopf (einschließlich Pinbelegung, Funktionalität und Programmierung) nicht vertraut sind, können Ihnen die folgenden Tutorials helfen:

Verdrahtungsdiagramm

Arduino Nano LED-Schaltplan

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Siehe Der beste Weg, den Arduino Nano und andere Komponenten mit Strom zu versorgen.

Arduino Nano Code - Mit Verzögerung

/* * Dieser Arduino Nano Code wurde von newbiely.de entwickelt * Dieser Arduino Nano Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino-nano/arduino-nano-led-blink-without-delay */ const int LED_PIN = 5; // The number of the LED pin const int BUTTON_PIN = 2; // The number of the button pin const long BLINK_INTERVAL = 1000; // interval at which to blink LED (milliseconds) int led_state = LOW; // led_state used to set the LED int prev_button_state = LOW; // will store last time button was updated void setup() { Serial.begin(9600); // set the digital pin as output: pinMode(LED_PIN, OUTPUT); // set the digital pin as an input: pinMode(BUTTON_PIN, INPUT); } void loop() { // if the LED is off turn it on and vice-versa: led_state = (led_state == LOW) ? HIGH : LOW; // set the LED with the led_state of the variable: digitalWrite(LED_PIN, led_state); delay(BLINK_INTERVAL); // If button is pressed during this time, Arduino CANNOT detect int button_state = digitalRead(BUTTON_PIN); if(button_state != prev_button_state) { // print out the state of the button: Serial.println(button_state); // save the last state of button prev_button_state = button_state; } // DO OTHER WORKS HERE }

Schnelle Schritte

  • Schließe deinen Arduino Nano mit einem USB-Kabel an deinen Computer an.
  • Starte die Arduino IDE, wähle das richtige Board und den richtigen Port aus.
  • Kopiere den Code und öffne ihn in der Arduino IDE.
  • Klicke in der Arduino IDE auf die Hochladen-Schaltfläche, um den Code zu kompilieren und auf den Arduino Nano hochzuladen.
Wie man Code auf den Arduino Nano hochlädt
  • Öffne den seriellen Monitor.
  • Drücke den Knopf viermal.
  • Schau dir die LED an; sie wechselt jede Sekunde zwischen Ein- und Auszustand.
  • Prüfe die Ausgabe im seriellen Monitor.
COM6
Send
1 0
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Im seriellen Monitor wurden einige Drückzeiten nicht registriert. Das liegt daran, dass der Arduino Nano während der Verzögerungszeit keine Aktionen ausführen kann. Folglich kann er das Drück-Ereignis nicht erkennen.

Arduino Nano Code - Ohne Verzögerung

/* * Dieser Arduino Nano Code wurde von newbiely.de entwickelt * Dieser Arduino Nano Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino-nano/arduino-nano-led-blink-without-delay */ const int LED_PIN = 5; // The number of the LED pin const int BUTTON_PIN = 2; // The number of the button pin const long BLINK_INTERVAL = 1000; // interval at which to blink LED (milliseconds) int led_state = LOW; // led_state used to set the LED int prev_button_state = LOW; // will store last time button was updated unsigned long prev_time_ms = 0; // will store last time LED was updated void setup() { Serial.begin(9600); // set the digital pin as output: pinMode(LED_PIN, OUTPUT); // set the digital pin as an input: pinMode(BUTTON_PIN, INPUT); } void loop() { // check to see if it's time to blink the LED; that is, if the difference // between the current time and last time you blinked the LED is bigger than // The interval at which you want to blink the LED. unsigned long time_ms = millis(); if (time_ms - prev_time_ms >= BLINK_INTERVAL) { // if the LED is off turn it on and vice-versa: led_state = (led_state == LOW) ? HIGH : LOW; // set the LED with the led_state of the variable: digitalWrite(LED_PIN, led_state); // save the last time you blinked the LED prev_time_ms = time_ms; } // check button state's change int button_state = digitalRead(BUTTON_PIN); if(button_state != prev_button_state) { // print out the state of the button: Serial.println(button_state); // save the last state of button prev_button_state = button_state; } // DO OTHER WORKS HERE }

Schnelle Schritte

  • Führen Sie den Code aus und drücken Sie den Knopf viermal.
  • Schauen Sie sich die LED an; sie wechselt im Abstand von einer Sekunde zwischen EIN und AUS.
  • Überprüfen Sie die Ausgabe im Seriellen Monitor.
COM6
Send
1 0 1 0 1 0 1 0
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Alle Vorkommnisse dringender Angelegenheiten wurden identifiziert.

Code-Erklärung

Schau dir die Zeilen-für-Zeile-Erklärung an, die in den Kommentaren des Quellcodes enthalten ist!

Weitere Aufgaben hinzufügen

Der unten stehende Arduino-Nano-Code führt Folgendes aus:

  • Lässt zwei LEDs mit unterschiedlichen Intervallen blinken.
  • Prüft den Zustand des Tasters.
/* * Dieser Arduino Nano Code wurde von newbiely.de entwickelt * Dieser Arduino Nano Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino-nano/arduino-nano-led-blink-without-delay */ const int LED_PIN_1 = 5; // The number of the LED 1 pin const int LED_PIN_2 = LED_BUILTIN; // The number of the LED 2 pin const int BUTTON_PIN = 2; // The number of the button pin const long BLINK_INTERVAL_1 = 1000; // interval at which to blink LED 1 (milliseconds) const long BLINK_INTERVAL_2 = 500; // interval at which to blink LED 2 (milliseconds) int led_state_1 = LOW; // led_state used to set the LED 1 int led_state_2 = LOW; // led_state used to set the LED 2 int prev_button_state = LOW; // will store last time button was updated unsigned long prev_time_ms_1 = 0; // will store last time LED 1 was updated unsigned long prev_time_ms_2 = 0; // will store last time LED 2 was updated void setup() { Serial.begin(9600); // set the digital pin as output: pinMode(LED_PIN_1, OUTPUT); pinMode(LED_PIN_2, OUTPUT); // set the digital pin as an input: pinMode(BUTTON_PIN, INPUT); } void loop() { unsigned long time_ms = millis(); // check to see if it's time to blink the LED 1 if (time_ms - prev_time_ms_1 >= BLINK_INTERVAL_1) { // if the LED is off turn it on and vice-versa: led_state_1 = (led_state_1 == LOW) ? HIGH : LOW; // set the LED with the led_state of the variable: digitalWrite(LED_PIN_1, led_state_1); // save the last time you blinked the LED prev_time_ms_1 = time_ms; } // check to see if it's time to blink the LED 2 if (time_ms - prev_time_ms_2 >= BLINK_INTERVAL_2) { // if the LED is off turn it on and vice-versa: led_state_2 = (led_state_2 == LOW) ? HIGH : LOW; // set the LED with the led_state of the variable: digitalWrite(LED_PIN_2, led_state_2); // save the last time you blinked the LED prev_time_ms_2 = time_ms; } // check button state's change int button_state = digitalRead(BUTTON_PIN); if(button_state != prev_button_state) { // print out the state of the button: Serial.println(button_state); // save the last state of button prev_button_state = button_state; } // DO OTHER WORKS HERE }

Video Tutorial

Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.

Erweiterbarkeit

Diese Methode kann verwendet werden, um dem Arduino Nano zu ermöglichen, mehrere Aufgaben gleichzeitig auszuführen, ohne dass eine Aufgabe den Fortschritt der anderen blockiert. Zum Beispiel das Senden einer Anfrage ins Internet und das Warten auf die Antwort, während gleichzeitig einige LED-Indikatoren blinken und der Abbruchknopf überwacht wird.

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!