Arduino Nano - Taster
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.
Oder Sie können die folgenden Kits kaufen:
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.
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.
Nur Anwendungen, die eine genaue Erkennung der Anzahl der Tastendrücke erfordern, sollten dies berücksichtigen.
※ Notiz:
Verwechseln Sie den Knopf nicht mit dem Folgenden:
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:
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.
image source: diyables.io
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.
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.
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.
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.

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

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.
pinMode(2, INPUT_PULLUP);
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.
const int BUTTON_PIN = 2;
int prev_button_state = HIGH;
int button_state;
void setup() {
Serial.begin(9600);
pinMode(BUTTON_PIN, INPUT_PULLUP);
}
void loop() {
button_state = digitalRead(BUTTON_PIN);
if(prev_button_state == LOW && button_state == HIGH)
Serial.println("The state changed from LOW to HIGH");
prev_button_state = button_state;
}
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.
#define BUTTON_PIN 2
void setup() {
Serial.begin(9600);
pinMode(BUTTON_PIN, INPUT_PULLUP);
}
void loop() {
int button_state = digitalRead(BUTTON_PIN);
Serial.println(button_state);
}
Öffne den seriellen Monitor.
Drücke den Knopf mehrmals und lasse ihn los.
Sieh dir die im seriellen Monitor angezeigten Ergebnisse an.
1 ist hoch, 0 ist niedrig.
Schau dir die Zeilen-für-Zeile-Erklärung an, die in den Kommentaren des Quellcodes enthalten ist!
Passen wir den Code so an, dass er Drück- und Loslassen-Ereignisse erkennen kann.
#define BUTTON_PIN 2
int prev_button_state = LOW;
int button_state;
void setup() {
Serial.begin(9600);
pinMode(BUTTON_PIN, INPUT_PULLUP);
}
void loop() {
button_state = digitalRead(BUTTON_PIN);
if(prev_button_state == HIGH && button_state == LOW)
Serial.println("The button is pressed");
else if(prev_button_state == LOW && button_state == HIGH)
Serial.println("The button is released");
prev_button_state = button_state;
}
Ö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.
The button is pressed
The button is released
※ 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.
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.
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.
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.