Dieses Tutorial erklärt dir, wie man den Arduino Nano mit einem Knopf verwendet. Im Detail werden wir lernen:
Wie man den Taster mit dem Arduino Nano verbindet
Wie man den Arduino Nano programmiert, um den Zustand des Tasters auszulesen
Wie man den Arduino Nano programmiert, um das Drücken und Loslassen des Tasters zu erkennen
Wie man das Problem des schwebenden Eingangs verhindert, wenn man den Taster mit dem Arduino Nano verwendet
Wie man das Prellen des Tasters verhindert, wenn man den Taster mit dem Arduino Nano verwendet
Der Knopf wird als Pushbutton, Taster oder Momentanschalter bezeichnet. Es ist eine grundlegende Komponente und wird in Arduino-Projekten häufig verwendet. Es ist einfach zu bedienen. Allerdings kann es für Anfänger aufgrund mechanischer und physikalischer Aspekte sowie der verschiedenen Verwendungsmöglichkeiten verwirrend sein. Dieses Tutorial erleichtert Anfängern den Einstieg.
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.
Über Button
Anfänger stoßen typischerweise auf zwei häufige Schwierigkeiten bei der Verwendung eines Buttons:
1. Schwebendes Eingabeproblem:
Symptom: Der gelesene Wert des Eingangspins entspricht nicht dem gedrückten Zustand des Tasters.
Cause: Der Eingangspin verwendet weder einen Pull-Up- noch einen Pull-Down-Widerstand.
Solution: Verwenden Sie einen Pull-Up- oder Pull-Down-Widerstand, und die Schritte dazu werden in diesem Tutorial erläutert.
2. Ratternphänomen:.
Symptom: Obwohl der Knopf nur einmal gedrückt wird, erkennt der Arduino-Code mehrere Knopfdrucke.
Ursache: Die mechanischen und physischen Probleme verursachen, dass der Zustand des Knopfs (oder Schalters) schnell zwischen LOW- und HIGH-Pegel hin- und herwechselt.
Der Druckknopf, auch bekannt als Pushbutton, Taster oder Momentanschalter, ist eine Art Schalter, der schließt, wenn der Knopf gedrückt und gehalten wird, und sich öffnet, wenn er losgelassen wird. Verschiedene Arten von Druckknöpfen existieren, die grob in zwei Gruppen eingeteilt werden können:
PCB-mount push button (suitable for mounting on a breadboard)
Ein auf der Leiterplatte montierter Taster hat typischerweise vier Pins.
Dennoch sind diese Pins paarweise miteinander verbunden. Folglich müssen nur zwei der vier Pins verwendet werden, die intern nicht miteinander verbunden sind.
Es gibt vier mögliche Arten, sich mit dem Knopf zu verbinden, von denen zwei symmetrisch sind (wie im Bild zu sehen).
Warum werden nur zwei Pins eines Tasters verwendet, obwohl er vier hat?
⇒ Um sicherzustellen, dass es sicher auf der Leiterplatte (Printed Circuit Board) montiert ist und jedem Druck standhalten kann.
Ein Panelmontage-Taster hat normalerweise zwei Pins.
image source: diyables.io
Das Push-Button-Modul enthält einen eingebauten Pull-Down-Widerstand, der sicherstellt, dass der Ausgang LOW bleibt, wenn der Knopf nicht gedrückt wird. Es hat drei Pins:
GND: Verbinde diesen Pin mit der Masse.
VCC: Verbinde diesen Pin mit einer 5V- oder 3,3V-Stromversorgung.
OUT: Verbinde diesen Pin mit einem digitalen Eingang an deinem Arduino.
Mit dieser Konfiguration liefert das Modul LOW, wenn der Knopf nicht gedrückt ist, und HIGH, wenn der Knopf gedrückt wird.
Wie es funktioniert
Wenn der Knopf nicht gedrückt wird, sind Pin A und Pin B nicht miteinander verbunden.
Allerdings sind Pin A und Pin B miteinander verbunden, wenn der Knopf gedrückt wird.
Arduino Nano - Knopf
Der Pin eines Knopfs ist entweder mit VCC oder GND verbunden. Der andere Pin desselben Knopfs ist mit einem Pin auf einem Arduino Nano-Board verbunden. Durch Prüfung des Zustands eines als Eingang konfigurierten Pins des Arduino Nano können wir feststellen, ob der Knopf gedrückt wurde oder nicht.
Schaltzustand und Drückzustand
Die Verbindung zwischen dem Taster und dem Arduino Nano sowie die Konfiguration des Arduino-Pins bestimmen die Beziehung zwischen dem Zustand des Tasters und dem Drückzustand.
Es gibt zwei Möglichkeiten, einen Taster mit dem Arduino zu verwenden:
Der Pin eines Knopfs ist mit VCC verbunden, der andere ist mit einem Arduino-Pin verbunden, der einen Pull-Down-Widerstand hat
Wenn der Knopf gedrückt wird, wird der Zustand des Arduino-Pins HIGH sein. Falls nicht, wird der Zustand des Arduino-Pins LOW sein
In diesem Fall wird ein externer Widerstand benötigt.
Der Pin eines Knopfs ist mit GND verbunden, der andere ist mit einem Arduino-Pin verbunden, der einen Pull-Up-Widerstand hat
Wenn der Knopf gedrückt wird, ist der Zustand des Arduino-Pins LOW. Falls nicht, ist der Zustand des Arduino-Pins HIGH
Wir können entweder einen internen oder externen Widerstand verwenden. Der interne Widerstand ist bereits im Arduino Nano integriert und kann im Code des Arduino Nano festgelegt werden.
※ Notiz:
Wenn wir KEINE externen Pull-Down-/Pull-Up-Widerstände verwenden, ist der Zustand des Eingangspins, wenn der Taster NICHT gedrückt ist, „schwebend“. Das bedeutet, der Zustand kann HIGH oder LOW (instabil, nicht festgelegt) sein, was zu einer falschen Erkennung führt.
Die schlechteste Praxis: Initialisiert den Arduino-Pin als Eingang (pinMode(BUTTON_PIN, INPUT)) ohne externe Pull-Down- oder Pull-Up-Widerstände zu verwenden.
Die beste Praxis: Initialisiert den Arduino-Pin als internen Pull-Up-Eingang (durch Verwendung von pinMode(BUTTON_PIN, INPUT_PULLUP)). Es ist NICHT nötig, externe Pull-Down- oder Pull-Up-Widerstände zu verwenden.
Aus Gründen der Einfachheit für Anfänger verwendet dieses Tutorial den einfachsten Ansatz: Den Pin des Arduino Nano als internen Pull-Up-Eingang zu initialisieren, ohne einen externen Widerstand zu benötigen. Es besteht für Anfänger keine Notwendigkeit, sich darüber Gedanken zu machen, wie der Pull-Up-/Pull-Down-Widerstand angeschlossen wird. Alles, was sie tun müssen, ist den Code für den Arduino Nano zu verwenden.
Verdrahtungsdiagramm
Verdrahtungsdiagramm zwischen Arduino Nano und PCB-montiertem Taster
Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
Verdrahtungsdiagramm zwischen Arduino Nano und panelmontiertem Taster
Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
Verwenden Sie die pinMode()-Funktion, um den Arduino Nano-Pin als internen Pull-Up-Eingang festzulegen.
Zum Beispiel Pin 2:
pinMode(2, INPUT_PULLUP);
Verwendet die Funktion digitalRead(), um den Zustand des Arduino Nano-Pins festzustellen.
int button_state = digitalRead(BUTTON_PIN);
※ Notiz:
Zwei gängige Anwendungsfälle gibt es:
Der erste: Wenn der Eingangsstatus HIGH ist, führe eine Aktion aus. Wenn der Eingangsstatus LOW ist, führe die gegenteilige Aktion aus.
Der zweite: Wenn sich der Eingangsstatus von LOW auf HIGH (oder HIGH auf LOW) ändert, tue etwas.
Wir wählen je nach Anwendung einen dieser beiden aus. Zum Beispiel, wenn man einen Knopf verwendet, um eine LED zu steuern:
Wenn wir möchten, dass die LED AN ist, wenn der Knopf gedrückt ist, und AUS, wenn der Knopf NICHT gedrückt ist, SOLLTEN wir den ersten Anwendungsfall verwenden.
Wenn wir möchten, dass die LED bei jedem Drücken des Knopfs zwischen EIN und AUS umgeschaltet wird, SOLLTEN wir den zweiten Anwendungsfall verwenden.
Wie man die Zustandsänderung von LOW zu HIGH erkennt
constint BUTTON_PIN = 2; // Die Nummer des Pushbutton-Pinsint prev_button_state = HIGH; // Der vorherige Zustand des Eingangs-Pinsint button_state; // Der aktuelle Wert des Eingangs-Pinsvoidsetup() {// Initialisiere die serielle Kommunikation, um mit dem Serial Monitor zu kommunizieren.Serial.begin(9600);// Initialisiere den Pushbutton-Pin als Pull-Up-Eingang// Der Pull-Up-Eingangspin ist HIGH, wenn der Schalter offen ist, und LOW, wenn der Schalter geschlossen ist.pinMode(BUTTON_PIN, INPUT_PULLUP);}voidloop() {// Lies den Zustand des Schalters/Buttons: button_state = digitalRead(BUTTON_PIN);if(prev_button_state == LOW && button_state == HIGH)Serial.println("The state changed from LOW to HIGH");// Speichere den letzten Zustand prev_button_state = button_state;}
Arduino Nano Quellcode
Schnelle Schritte
Schließe deinen Arduino Nano über ein USB-Kabel an einen Computer an.
Starte die Arduino IDE, wähle das richtige Board und den richtigen Port aus.
Kopiere den untenstehenden Code und öffne ihn in der Arduino IDE.
/* * 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-button*/#define BUTTON_PIN 2 // The number of the pushbutton pinvoidsetup() {// Initialize the Serial to communicate with the Serial Monitor.Serial.begin(9600);// Configure the Arduino Nano pin as a pull-up input// The pull-up input pin is HIGH when the button is open and LOW when pressed.pinMode(BUTTON_PIN, INPUT_PULLUP);}voidloop() {// read the state of the switch/button:int button_state = digitalRead(BUTTON_PIN);// print out the button's state Serial.println(button_state);}
Klicken Sie in der Arduino IDE auf die Hochladen-Schaltfläche, um den Code zu kompilieren und auf den Arduino Nano hochzuladen.
Öffne den seriellen Monitor.
Drücke den Knopf mehrmals und lasse ihn los.
Sieh dir die im seriellen Monitor angezeigten Ergebnisse an.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano' on 'COM15')
New Line
9600 baud
1
1
1
0
0
0
0
0
0
1
1
1
Ln 11, Col 1
Arduino Nano on COM15
2
1 ist hoch, 0 ist niedrig.
Code-Erklärung
Schau dir die Zeilen-für-Zeile-Erklärung an, die in den Kommentaren des Quellcodes enthalten ist!
Bearbeitung des Arduino Nano-Codes
Passen wir den Code so an, dass er Drück- und Loslassen-Ereignisse erkennen kann.
Schnelle Schritte
Ändern Sie den Code wie folgt:
/* * 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-button*/#define BUTTON_PIN 2 // The number of the pushbutton pinint prev_button_state = LOW; // The previous state from the input pinint button_state; // The current reading from the input pinvoidsetup() {// Initialize the Serial to communicate with the Serial Monitor.Serial.begin(9600);// Configure the Arduino Nano pin as a pull-up input// The pull-up input pin is HIGH when the button is open and LOW when pressed.pinMode(BUTTON_PIN, INPUT_PULLUP);}voidloop() {// read the state of the switch/button: button_state = digitalRead(BUTTON_PIN);if(prev_button_state == HIGH && button_state == LOW)Serial.println("The button is pressed");elseif(prev_button_state == LOW && button_state == HIGH)Serial.println("The button is released");// save the the last state prev_button_state = button_state;}
Klicken Sie in der Arduino IDE auf die Hochladen-Schaltfläche, um den Code zu kompilieren und auf das Arduino Nano-Board hochzuladen.
Öffnen Sie den Serial Monitor.
Drücken Sie den Knopf und halten Sie ihn gedrückt.
Lassen Sie den Knopf los und beobachten Sie das Ergebnis im Serial Monitor.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano' on 'COM15')
New Line
9600 baud
The button is pressed
The button is released
Ln 11, Col 1
Arduino Nano on COM15
2
※ Notiz:
Auch wenn Sie die Taste nur einmal drücken und loslassen, kann die Ausgabe im seriellen Monitor mehrere gedrückte und losgelassene Ereignisse anzeigen. Dies ist das typische Verhalten des Schalters und wird als das "Entprellungsphänomen" bezeichnet. Um dieses Problem zu lösen, lesen Sie bitte das Tutorial Arduino Nano - Button Debounce.
Wir haben eine Bibliothek entwickelt, ezButton, um den Einstieg zu erleichtern, insbesondere wenn man mit mehreren Tasten arbeitet. Weitere Informationen zur ezButton-Bibliothek hier.
Für das Button-Modul, setzen Sie den Pin mit pinMode(BUTTON_PIN, INPUT). Das Modul liefert LOW, wenn es nicht gedrückt ist, und HIGH, wenn es gedrückt wird.
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.
Fordere dich heraus
Wenn der Knopf gedrückt wird, wird die LED eingeschaltet.
Wenn der Knopf nicht gedrückt wird, wird die LED ausgeschaltet.
Jedes Mal, wenn der Knopf gedrückt wird, wechselt die LED zwischen EIN und AUS.
Zusätzliches Wissen
In welchen Fällen ist es angemessen, einen Pull-Down- bzw. Pull-Up-Widerstand für einen Eingangspin zu verwenden? In welchen Fällen ist es nicht geeignet, einen Pull-Down- bzw. Pull-Up-Widerstand für einen Eingangspin zu verwenden?
Wenn der Sensor entweder geschlossene oder offene Zustände hat, ist ein Pull-up- oder Pull-down-Widerstand erforderlich, um sie auf LOW bzw. HIGH zu bringen. Beispiele für solche Sensoren sind Taster, Schalter und Magnetschalter (Türsensor).
Auf der anderen Seite gilt: Wenn der Sensor zwei definierte Spannungspegel (LOW und HIGH) hat, ist kein Pull-up- oder Pull-down-Widerstand erforderlich. Beispiele für solche Sensoren sind Bewegungsmelder und Berührungssensoren.
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!