Suchcode

Lektion 98-3: Wie man eine Toggle-LED mit einem Taster am Arduino ein- und ausschaltet

Lektion 98-3: Wie man eine Toggle-LED mit einem Taster am Arduino ein- und ausschaltet

Drucktasten sind überall zu finden — in Fernbedienungen, Haushaltsgeräten und Bedienfeldern — und sobald eine einzelne Taste mehr als eine Aufgabe erfüllen muss, benötigt man Umschaltlogik. Dieses Projekt zeigt Ihnen, wie Sie mit einer einzigen Drucktaste eine LED beim ersten Drücken einschalten und beim nächsten Drücken ausschalten, sodass das Licht genau dort bleibt, wo Sie es hinterlassen haben. Dieses Verhalten „einmal drücken zum Einrasten, erneut drücken zum Loslassen" ist die Grundlage fast jeder Menütaste, jedes Netzschalters und jedes Moduswählers, den Sie jemals bauen werden.

LED mit Widerstand auf Steckbrett, verbunden mit Arduino und einer Drucktaste
LED mit Widerstand auf Steckbrett, verbunden mit Arduino und einer Drucktaste

Sobald Sie die Umschaltung verstanden haben, lässt sich dasselbe Codemuster auf echte Hardware übertragen. Sie können es verwenden, um:

  • Ein Relais zu schalten, das eine Wechselstromlampe oder eine Schreibtischleuchte über eine einzige Bedienfeldtaste steuert.
  • Einen Motor oder eine Pumpe mit einer Taste statt zwei zu starten und zu stoppen.
  • Durch Betriebsmodi eines Geräts zu wechseln (zum Beispiel langsam / schnell / aus).
  • Einen selbsthaltenden Alarm zu bauen, der eingeschaltet bleibt, bis ihn jemand quittiert.
  • Eine Stummschalttaste für ein Audioprojekt zu erstellen, die sich ihren Zustand merkt.
  • Als Soft-Power-Schalter für ein batteriebetriebenes Gerät zu dienen und einen mechanischen Schalter zu ersetzen.

Der Kursleiter weist im Video direkt auf diesen Punkt hin (im Video bei 19:52): In dem Projekt geht es eigentlich gar nicht um die LED — es geht um die Umschalttechnik, die Sie auf ein Relais, einen Motortreiber oder jeden anderen Ausgang anwenden können.

LED-5mm-grün

Hardware und Komponenten

Die Teileliste ist bewusst minimal gehalten, daher ist dies ein großartiges Projekt, wenn Sie gerade erst anfangen. Sie benötigen:

  • Ein Arduino-Board — Uno, Nano oder Mega funktionieren alle.
  • Eine LED, 3 mm oder 5 mm, beliebige Farbe.
  • Einen Widerstand für die LED, irgendwo zwischen 200 Ω und 1000 Ω. Das Transkript erklärt die Begründung (im Video bei 03:49): Eine LED hat einen Spannungsabfall von etwa 2 V und zieht etwa 10 mA, sodass bei einer 5 V-Versorgung die verbleibenden 3 V vom Widerstand abfallen müssen. Das Ohmsche Gesetz ergibt 3 V ÷ 0,01 A = 300 Ω, und alles von 300 Ω bis 1000 Ω funktioniert — höhere Werte machen die LED einfach dunkler.
  • Einen Drucktastenschalter. Das Video zeigt sowohl den kleinen taktilen Vier-Pin-Typ als auch eine Version mit längeren Pins (im Video bei 12:43). Wenn Sie keine Drucktaste haben, funktioniert auch ein gewöhnlicher Schalter — suchen Sie einfach die beiden Anschlüsse, die den Stromkreis schließen und unterbrechen.
  • Ein Steckbrett und einige DuPont-Jumperkabel.

Ein praktischer Tipp aus dem Video (im Video bei 07:50): Die taktile Vier-Pin-Taste hat zwei Paare intern verbundener Pins. Verwenden Sie ein Multimeter im Durchgangsmodus, um herauszufinden, welche zwei Pins zusammen piepen — das ist eine Seite des Schalters. Verbinden Sie eine Seite mit dem Eingangspin und die andere Seite mit Masse.

Verkabelungsanleitung

Arduino-Schaltplan für LED mit einem Drucktastenschalter
Arduino-Schaltplan für LED mit einem Drucktastenschalter
Arduino-Verkabelung für LED mit einem Drucktastenschalter
Arduino-Verkabelung für LED mit einem Drucktastenschalter

Die Verkabelung entspricht der einfachen LED- und Drucktastenschaltung, wobei die Taste zusätzlich hinzugefügt wird. Die Anode der LED (das längere Bein) kommt an Pin 3, und ihre Kathode (das kürzere Bein auf der flachen Seite des Gehäuses) wird über den Widerstand mit Masse verbunden. Die Drucktaste wird zwischen Pin 2 und Masse angeschlossen — mehr ist nicht nötig, da der Code den internen Pull-up-Widerstand des Arduino aktiviert.

Dieser interne Pull-up ist es wert, verstanden zu werden: Ohne ihn würde ein floating Eingangspin zufälliges Rauschen lesen. Das Aktivieren von INPUT_PULLUP hält den Pin auf 5 V, solange die Taste offen ist, und das Drücken der Taste zieht ihn auf 0 V herunter. Deshalb behandelt der Code einen LOW-Wert als „gedrückt" — die Logik ist im Vergleich zu einem einfachen Schalter gegen Masse mit externem Widerstand invertiert.

Code-Erklärung

Der vollständige Sketch ist unten in diesem Artikel verfügbar. Hier konzentrieren wir uns auf die Teile, die Sie tatsächlich ändern möchten.

Am Anfang der Datei werden die beiden Pin-Zuweisungen als Konstanten definiert. Wenn Sie Ihre Kabel an andere Pins anschließen, ist dies die einzige Stelle, die Sie bearbeiten müssen:

const int pushButtonPin = 2;//define a pin number for push button
const int LEDPin = 3;//define a pin that is connected to LED

Als Nächstes kommen die drei Zustandsvariablen. Normalerweise müssen Sie diese nicht ändern, aber es hilft zu wissen, was sie tun:

int pushButtonStatus = 0; // push value from pin 2
int lightStatus = 0;//light status
int pushed = 0;//push status

pushButtonStatus speichert bei jedem Durchlauf der Schleife den Rohwert des Taster-Pins. lightStatus merkt sich, was der Taster-Pin beim vorherigen Durchlauf gelesen hat, und so erkennt der Sketch den Moment eines neuen Tastendrucks, anstatt kontinuierlich zu reagieren. pushed ist das eigentliche Umschalt-Flag — es wechselt zwischen 0 und 1 und entscheidet, ob die LED ein- oder ausgeschaltet sein soll.

Das Umschalten selbst erfolgt mit einem cleveren arithmetischen Trick (im Video bei 18:30). Subtrahiert man das Flag von eins, wird es invertiert: 1 - 0 ergibt 1, und 1 - 1 ergibt 0. So kippt eine einzige Zeile den Zustand jedes Mal, wenn ein neuer Tastendruck erkannt wird:

pushed = 1-pushed;//toggle the pushed value
delay(100);//give some time for finger to press

Die Verzögerung von 100 ms ist dafür da, dass Ihr Finger vom Taster kommen kann. Ohne sie könnte ein physischer Tastendruck mehrfach gezählt werden. Wenn sich Ihr Taster unzuverlässig anfühlt oder Ihr Finger zittert, erhöhen Sie diesen Wert (im Video bei 40:39).

Die Bedingung, die das Umschalten auslöst, ist der Schlüssel zum gesamten Sketch. Sie greift nur, wenn der Taster nicht gedrückt ist (HIGH, wegen des Pull-ups) und die vorherige Messung LOW war — das bedeutet, der Taster wurde gerade nach einem Druck losgelassen:

if(pushButtonStatus == HIGH && lightStatus == LOW){
  pushed = 1-pushed;//toggle the pushed value
  delay(100);//give some time for finger to press
}

Schließlich wird die LED über das Umschalt-Flag angesteuert, und die aktuelle Taster-Messung wird für den nächsten Vergleich gespeichert:

lightStatus = pushButtonStatus;
if(pushed == HIGH){
  Serial.println("Light ON");
  digitalWrite(LEDPin, HIGH); //turn the LED ON
}else{
  Serial.println("Light OFF");
  digitalWrite(LEDPin, LOW);//turn the LED OFF
}

Sie können auch den Seriellen Monitor mit 9600 Baud öffnen, um die Meldungen "Light ON" und "Light OFF" zu beobachten, während Sie den Taster drücken.

Live-Demonstration

Im Video (im Video bei 19:41) können Sie das Verhalten in Aktion sehen: Der erste Tastendruck schaltet die LED ein, und sie bleibt nach dem Loslassen des Fingers eingeschaltet. Der nächste Tastendruck schaltet sie aus, und sie bleibt aus. Es ist nicht nötig, den Taster gedrückt zu halten, und genau das ist der Unterschied zwischen diesem Projekt und der einfacheren "Zum Leuchten gedrückt halten"-Version aus Lektion 98-2: Wie man eine LED mit einem Taster und Arduino ein- und ausschaltet.

Das Video weist außerdem darauf hin, dass Sie die LED durch ein Relaismodul ersetzen können, um netzbetriebene Geräte zu schalten, oder durch einen Motortreiber, um einen Motor zu starten und zu stoppen. Die Umschaltlogik ändert sich nicht — nur das Ausgabegerät.

Weitere im selben Video gezeigte Variationen — das Dimmen der LED, das Wippmuster, das Lauflicht, das Spannungsbalken-Messgerät und die Ampel — werden jeweils in ihren eigenen Tutorials behandelt, die unten verlinkt sind.

Verwandte Projekte aus diesem Video

Kapitel

  • [00:00] Überblick über die 10 LED-Projekte
  • [01:00] Einführung in den Arduino-Schritt-für-Schritt-Kurs
  • [02:29] LED-Grundlagen: Symbol, Anode, Kathode und Widerstandsberechnung
  • [05:53] Projekt 1: Eine LED ein- und ausschalten
  • [12:43] Projekt 2: Taster steuert die LED
  • [17:13] Projekt 3: Taster schaltet die LED ein und aus
  • [20:12] Projekt 4: Dimmen einer LED
  • [23:20] Projekt 5: Dimmen einer LED mit einem Taster
  • [27:32] Projekt 6: Wippe mit zwei LEDs
  • [30:47] Projekt 7: Lauflicht mit fünf LEDs
  • [36:41] Projekt 8: Lauflicht, weitergeschaltet per Taster
  • [42:25] Projekt 9: LED-Spannungspegelmesser mit Potentiometer
  • [49:25] Projekt 10: Arduino-Ampel

Bilder

push-button-and-finger
push-button-and-finger
Arduino schematic for LED
Arduino schematic for LED
Arduino wiring for LED with a push button switch
Arduino wiring for LED with a push button switch
Arduino schematic for LED with a push button switch
Arduino schematic for LED with a push button switch
LED-5mm-green
LED-5mm-green
LED mit Widerstand auf Steckbrett, verbunden mit Arduino mit einem Drucktaster
LED mit Widerstand auf Steckbrett, verbunden mit Arduino mit einem Drucktaster
935-Lessson 98-LED-3: Arduino code push button toggles LED ON/OFF
Sprache: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

Dateien📁

Arduino-Bibliotheken (zip)

|||Benutzerhandbuch