Arduino - Taste

Der Taster ist eine Basiskomponente und wird in vielen Arduino-Projekten häufig verwendet. Er ist nicht so einfach, wie es aussieht (aufgrund mechanischer und physikalischer Eigenschaften). Anfänger könnten damit viele Schwierigkeiten haben. Dieses Tutorial erleichtert Anfängern den Einstieg. Lass uns anfangen!

※ Notiz:

Bevor wir über den Taster sprechen, möchten wir darauf hinweisen, dass es zwei häufige Fehler gibt, die Neulinge normalerweise begegnen:

  1. Das Problem des schwebenden Eingangs:
    • Symptom: Beim Anschluss eines Tasters an den Arduino-Eingangspin ist der Zustand des Eingangspins zufällig und stimmt nicht mit dem Betätigungszustand des Tasters überein.
    • Ursache: Der Tasterpin verwendet KEINEN Pull-Down-Widerstand oder Pull-Up-Widerstand.
    • Lösung: ⇒ Verwenden Sie einen Pull-Down-Widerstand oder einen Pull-Up-Widerstand am Eingangspin. Die Details werden später in diesem Tutorial beschrieben.
  • Das Prellen-Phänomen
    • Symptom: Der Code auf dem Arduino liest den Zustand des Tasters und identifiziert das Betätigungsereignis, indem er die Zustandsänderung erkennt (HIGH zu LOW, oder LOW zu HIGH). Wenn der Taster tatsächlich nur einmal gedrückt wird, erkennt der Arduino-Code mehrere Betätigungen statt nur einmal.
    • Ursache: Aufgrund mechanischer und physikalischer Eigenschaften wird bei einem einzelnen Druck auf einen Taster der Zustand des Eingangspins schnell mehrmals zwischen LOW und HIGH umgeschaltet statt nur einmal.
    • Lösung: ⇒ Entprellen. Die Details werden im Arduino - Button - Debounce Tutorial beschrieben.

    Das Prellen-Phänomen verursacht Fehlfunktionen nur in einigen Arten von Anwendungen, die genau die Anzahl der Betätigungen erkennen müssen. In einigen Anwendungen ist es harmlos.

    Erforderliche Hardware

    1×Arduino Uno R3
    1×USB 2.0 Kabel Typ A/B (für USB-A PC)
    1×USB 2.0 Kabel Typ C/B (für USB-C PC)
    1×Breadboard-Taster mit Kappe
    1×Breadboard-Taster-Kit
    1×Panel-mount Button
    1×Taster-Modul
    1×Breadboard
    1×Verbindungskabel
    1×(Empfohlen) Schraubklemmenblock-Shield für Arduino Uno
    1×(Empfohlen) Breadboard-Shield für Arduino Uno
    1×(Empfohlen) Gehäuse für Arduino Uno
    1×(Empfohlen) Prototyping-Grundplatte & Breadboard-Kit für Arduino Uno

    Oder Sie können die folgenden Kits kaufen:

    1×DIYables STEM V3 Starter-Kit (Arduino enthalten)
    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.

    Über Button

    Der Druckknopf, auch als Pushbutton, Taster oder Momentanschalter bezeichnet, ist eine Art Schalter, der schließt, wenn der Knopf gedrückt und gehalten wird, und sich öffnet, wenn er losgelassen wird. Es gibt verschiedene Arten von Druckknöpfen, grob in zwei Gruppen eingeteilt:

    • PCB-mount push buttons (breadboard-mountable)
    • Panel-mount push buttons
    Arduino-Drucktaster

    Pinbelegung

    Die PCB-montierten Taster haben in der Regel vier Pins.

    Pinbelegung der Taste

    Allerdings sind diese Pins intern paarweise verbunden. Daher müssen wir nur zwei der vier Pins verwenden, die nicht intern verbunden sind.

    Es gibt vier Möglichkeiten (tatsächlich zwei aufgrund der Symmetrie), eine Verbindung zum Knopf herzustellen (siehe Bild).

    So verwenden Sie die Schaltfläche.

    Wir können nur zwei Pins eines Tasters verwenden. Warum hat er vier Pins?

    Damit es fest auf der Leiterplatte sitzt und der Druckbelastung standhält.

    Die panelmontierten Taster haben gewöhnlich zwei Stifte.

    Pinbelegung eines zweipoligen Drucktasters
    image source: diyables.io

    Das Taster-Modul enthält einen eingebauten Pulldown-Widerstand, der sicherstellt, dass der Ausgang LOW bleibt, wenn der Knopf nicht gedrückt ist. Es hat drei Anschlüsse:

    • GND: Schließen Sie diesen Pin an die Masse an.
    • VCC: Schließen Sie diesen Pin an eine 5V- oder 3,3V-Stromversorgung an.
    • OUT: Schließen Sie diesen Pin an einen digitalen Eingang Ihres Arduino-Boards an.

    Mit dieser Konfiguration gibt das Modul LOW aus, wenn der Knopf nicht gedrückt ist, und HIGH, wenn der Knopf gedrückt ist.

    Wie es funktioniert

    • Wenn der Knopf NICHT gedrückt ist, ist Pin A NICHT mit Pin B verbunden.
    • Wenn der Knopf gedrückt ist, ist Pin A mit Pin B verbunden.
    Wie der Button funktioniert

    Arduino - Knopf

    Der Pin eines Tasters ist mit VCC oder GND verbunden. Der andere Pin ist mit einem Arduino-Pin verbunden.

    Durch das Ablesen des Zustands des Arduino-Pins (als Eingangspin konfiguriert) können wir erkennen, ob der Knopf gedrückt ist oder nicht.

    Zustand der Schaltfläche und Drückzustand

    Der Zusammenhang zwischen dem Zustand des Tasters und dem Betätigungszustand hängt davon ab, wie wir den Taster mit dem Arduino verbinden und wie der Pin des Arduino konfiguriert ist.

    Es gibt zwei Möglichkeiten, einen Knopf mit Arduino zu verwenden:

    1. Der Pin eines Tasters ist mit VCC verbunden, der andere ist mit dem Pin eines Arduinos mit einem Pulldown-Widerstand verbunden.
      • Wenn der Taster gedrückt wird, ist der Zustand des Arduino-Pins HIGH. Andernfalls ist der Zustand LOW.
      • Wir MÜSSEN einen externen Widerstand verwenden.
  • Der Pin eines Tasters ist mit GND verbunden, der andere ist mit dem Arduino-Pin verbunden, der einen Pull-up-Widerstand verwendet.
    • Wenn der Taster gedrückt wird, ist der Zustand des Arduino-Pins LOW. Andernfalls HIGH.
    • Wir können entweder einen internen oder externen Widerstand verwenden. Der interne Widerstand ist im Arduino eingebaut; wir müssen ihn nur im Arduino-Code einstellen.

    ※ Notiz:

    Wenn wir weder Pull-Down- noch Pull-Up-Widerstand verwenden, ist der Zustand des Eingangspins „schwebend“, wenn der Knopf NICHT gedrückt ist. Das bedeutet, der Zustand kann HIGH oder LOW sein (instabil, nicht festgelegt), was zu einer falschen Erkennung führt.

    • Die schlechteste Praxis: initialisiert den Arduino-Pin als Eingang (durch pinMode(BUTTON_PIN, INPUT)) und verwendet KEINEN externen Pull-Down-/Pull-Up-Widerstand.
    • Die beste Praxis: initialisiert den Arduino-Pin als internen Pull-Up-Eingang (durch pinMode(BUTTON_PIN, INPUT_PULLUP)). Es braucht KEINEN externen Pull-Down-/Pull-Up-Widerstand.

    Um Anfängern den Einstieg zu erleichtern, verwendet dieses Tutorial die einfachste Methode: Es initialisiert den Arduino-Pin als internen Pull-Up-Eingang, ohne den externen Widerstand zu verwenden. Die Anfänger müssen sich nicht darum kümmern, wie der Pull-Up- bzw. Pull-Down-Widerstand verschaltet wird. Die Anfänger müssen lediglich den Arduino-Code verwenden.

    Verdrahtungsdiagramm

    • Verdrahtungsdiagramm zwischen Arduino und PCB-montiertem Taster
    Schaltplan für Arduino-Taster

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

    • Schaltbild zwischen Arduino und panelmontiertem Taster
    Arduino-Drucktaster mit zwei Pins Verdrahtungsdiagramm

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

    Arduino-Zweipol-Taster-Verdrahtungsdiagramm

    Wie man eine Schaltfläche programmiert

    • Initialisiert den Arduino-Pin als internen Pull-up-Eingang durch die Verwendung der Funktion pinMode(). Zum Beispiel Pin 7:
    pinMode(7, INPUT_PULLUP);
    • Liest den Zustand des Arduino-Pins mithilfe der Funktion digitalRead().
    int buttonState = digitalRead(BUTTON_PIN);

    ※ Notiz:

    Es gibt zwei weit verbreitete Anwendungsfälle:

    • Der erste: Wenn der Eingangsstatus HIGH ist, tue etwas. Wenn der Eingangsstatus LOW ist, tue etwas anderes – umgekehrt.
    • Der zweite: Wenn der Eingangsstatus sich von LOW auf HIGH (oder HIGH auf LOW) ändert, tue etwas.

    Je nach Anwendung wählen wir eine davon.

    Zum Beispiel: Bei der Verwendung eines Knopfes zur Steuerung einer LED:

    • Wenn die LED eingeschaltet sein soll, wenn der Knopf gedrückt wird, und ausgeschaltet, wenn der Knopf NICHT gedrückt wird, sollten wir den ersten Anwendungsfall verwenden.
    • Wenn die LED bei jedem Drücken des Knopfes zwischen EIN und AUS umgeschaltet werden soll, sollten wir den zweiten Anwendungsfall verwenden.

    Wie man die Zustandsänderung von LOW zu HIGH erkennt

    // Konstanten ändern sich nicht. Sie werden hier verwendet, um Pin-Nummern festzulegen: const int BUTTON_PIN = 7; // die Nummer des Pushbutton-Pins // Variablen ändern sich: int lastState = HIGH; // der vorherige Zustand vom Eingangspin int currentState; // die aktuelle Auslesung vom Eingangspin void setup() { // Serielle Kommunikation mit 9600 Baud initialisieren: 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); } void loop() { // Lese den Zustand des Schalters/Tasters aus: currentState = digitalRead(BUTTON_PIN); if(lastState == LOW && currentState == HIGH) Serial.println("The state changed from LOW to HIGH"); // letzten Zustand speichern lastState = currentState; }

    Arduino-Code

    Schnelle Schritte

    • Verbinde Arduino über ein USB-Kabel mit dem PC
    • Öffne die Arduino IDE, wähle das richtige Board und den richtigen Port
    • Kopiere den untenstehenden Code und öffne ihn mit der Arduino IDE
    // constants won't change. They're used here to set pin numbers: const int BUTTON_PIN = 7; // the number of the pushbutton pin void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); // initialize the pushbutton pin as an pull-up input // the pull-up input pin will be HIGH when the switch is open and LOW when the switch is closed. pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the switch/button: int buttonState = digitalRead(BUTTON_PIN); // print out the button's state Serial.println(buttonState); }
    • Klicken Sie in der Arduino IDE auf die Hochladen-Schaltfläche, um Code auf Arduino hochzuladen.
    Arduino IDE – Wie man Code hochlädt
    • Öffne den seriellen Monitor
    • Drücke den Knopf mehrmals und lasse ihn los
    • Sieh das Ergebnis im seriellen Monitor:
    COM6
    Send
    1 1 1 0 0 0 0 0 0 1 1 1
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    1 ist hoch, 0 ist niedrig.

    Code-Erklärung

    Sie finden die Erklärung in der Kommentarzeile des obigen Arduino-Codes.

    Arduino-Code ändern

    Lass uns den Code so ändern, dass Drück- und Loslassen-Ereignisse erkannt werden.

    Schnelle Schritte

    • Ändern Sie den Code wie unten.
    /* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino 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/arduino-button */ // constants won't change. They're used here to set pin numbers: const int BUTTON_PIN = 7; // the number of the pushbutton pin // Variables will change: int lastState = LOW; // the previous state from the input pin int currentState; // the current reading from the input pin void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); // initialize the pushbutton pin as an pull-up input // the pull-up input pin will be HIGH when the switch is open and LOW when the switch is closed. pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the switch/button: currentState = digitalRead(BUTTON_PIN); if(lastState == HIGH && currentState == LOW) Serial.println("The button is pressed"); else if(lastState == LOW && currentState == HIGH) Serial.println("The button is released"); // save the the last state lastState = currentState; }
    • Klicken Sie auf die Hochladen-Schaltfläche in der Arduino-IDE, um Code auf Arduino hochzuladen.
    Arduino IDE Code hochladen
    • Seriellen Monitor öffnen
    • Drücken Sie den Knopf und lassen Sie ihn dann los
    • Sehen Sie das Ergebnis im seriellen Monitor
    COM6
    Send
    The button is pressed The button is released
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    ※ Notiz:

    • Selbst wenn du den Knopf nur einmal gedrückt und losgelassen hast, kann die Ausgabe im seriellen Monitor mehrere gedrückte und losgelassene Ereignisse anzeigen. Dies ist das normale Verhalten des Knopfes. Dieses Verhalten wird als das „Prellphänomen“ bezeichnet. Weitere Informationen findest du im Arduino - Button Debounce Tutorial.
    • Um es Anfängern deutlich zu erleichtern, insbesondere beim Einsatz mehrerer Taster, haben wir eine Bibliothek namens ezButton erstellt. Du kannst hier Erfahre hier mehr über die ezButton-Bibliothek.
    • Verwende pinMode(BUTTON_PIN, INPUT) für das Tastermodul. Es liefert LOW, wenn nicht gedrückt, und HIGH, wenn gedrückt.

    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

    • Schalte die LED ein, wenn der Knopf gedrückt wird, und schalte die LED aus, wenn der Knopf NICHT gedrückt wird.
    • Schalte die LED bei jedem Knopfdruck zwischen EIN und AUS um.

    Zusätzliches Wissen

    Wann sollten wir einen Pull-down- bzw. Pull-up-Widerstand für einen Eingangspin verwenden, und wann nicht?
    • Wenn der Sensor entweder im geschlossenen Zustand (mit VCC oder GND verbunden) oder im offenen Zustand (nicht mit irgendetwas verbunden) ist, benötigen Sie einen Pull-up- oder Pull-down-Widerstand, damit diese Zustände zwei Zustände werden: LOW und HIGH. Zum Beispiel Taster, Schalter, Magnetschalter (Türsensor)...
    • Wenn der Sensor zwei definierte Spannungspegel (LOW und HIGH) hat, benötigen Sie keinen Pull-up- oder Pull-down-Widerstand. Zum Beispiel Bewegungssensor, Berührungssensor ...

    ※ 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!