In diesem Tutorial zeige ich, wie Ihr mit einen Arduino Taster als Schalter verwenden könnt. Anhand eines Beispiels einer LEDs lernen wir unterschiedliche Möglichkeiten Taster zu programmieren. Um die gezeigten Beispiele auszuprobieren, benötigt ihr lediglich einen Arduino und eine LED, sowie zwei Kabel. Bewusst verzichten wir auf externe Pull Up bzw. Pull Down Widerstände, da wir auf die internen Widerstände des Arduinos zurückgreifen können.
Stückliste
1x Arduino Uno (Werbung)
1x Wiederstand (Werbung)
1x Leuchtdiode (Werbung)
1x Taster (Werbung)
Hinweis: LEDs benötigen in der Regel einen Vorwiderstand. Dieser verhindert, dass die LED im Bertrieb schaden nimmt. Bitte alle notwendigen Informationen dem Datenblatt der LEDs entnehmen. Dies kann in der Regel beim Verkäufer angefragt werden.
Taster an einen Arduino anschließen
Der Anschluss des Tasters und der LED an den Arduino ist einfach. Der Taster wird zwischen dem digitalem Pin 2 und Ground und die LED mit einem Vorwiderstand (z.B. 220 Ohm) zwischen Pin 5 und Ground angeschlossen. Die Schaltung sollte dann ungefähr so aussehen.

Wenn die kleine Schaltung zusammengebaut ist, kann es mit dem Programmieren des Schalters mit Hilfe eines Tasters losgehen.
Einen Taster als Schalter programmieren – So geht’s!
Das Programmieren eines Arduino Schalters als Taster ist im Prinzip eher unkompliziert. Es gibt allerdings eine kleine Herausforderung. Doch diese soll ein Thema des nächsten Kapitels sein.
Um einen Schalter zu emulieren ist es notwendig eine Variable einzuführen, die den Schaltzustand abspeichert. In unserem Beispiel nennen wir sie “geschaltet” und deklarieren sie als Boolean.
Als nächstes fragen wir den mit dem Befehl “digitalRead” ab, ob der Taster gedrückt ist. Sollte dies der Fall sein, wechseln wir den Wert von “geschaltet” von “false” auf “true” oder anders herrum.
Um die LED zu steuern aktivieren wir diese mit “digitalWrite” wenn unsere Variable “geschaltet” auf “true” steht und deaktivieren sie, wenn der Wert auf “false” steht.
Der vollständige Quellcode könnte so aus sehen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
/* Arduino Taster als Schalter verwenden - Codebeispiel Ihr könnt diesen Code gerne verwenden oder für eigene Projekte abwandeln. */ bool geschaltet = false; // geschaltet dient zur Speicherung des Schaltzustandes int ledPin = 5; // ist wohl selbsterklärend int tasterPin = 2; // wie oben int empfindlichkeit = 200; // empfindlichkeit speichert wie oft der Taster abgefragt wird void setup() { pinMode( tasterPin, INPUT_PULLUP); // wir definieren den tasterPin als Eingang mit Pull Up pinMode( ledPin, OUTPUT); // wir definieren den ledPin als Ausgang } void loop() { if (digitalRead(tasterPin) == LOW) // Abfrage ob der Taster gedrückt ist { if (geschaltet == false) { // Abfrage ob der unser logischer Schalter aus ist geschaltet = true; // sollte er aus sein, setzen wir geschaltet auf true } else { geschaltet = false; // sollte der an sein, setzen wir geschaltet auf false } } if (geschaltet == true) { // sollte der Schalter an sein, schalten wir die LED ein digitalWrite(ledPin, HIGH); } if (geschaltet == false) { // sollte der Schalter aus sein, sollte der Schalter aus digitalWrite(ledPin, LOW); } delay(empfindlichkeit); // der Arduino warte für den Wert von empfindlichkeit // im den Sketch einfach halten, // habe ich bewusst auf Millis() verzichtet } |
Interrupts nutzen um den Schalter zu programmieren
Wenn man den oberen Sketch ausprobiert, merkt man schnell, dass es Nachteile aufweist einen Taster so einzubinden. Der Arduino prüft in bestimmten Abständen, ob der Schalter gedrückt wurde. Daher kann es passieren, dass der Arduino einen Tastendruck nicht bemerkt. Stellt Ihr die Empfindlichkeit zu niedrig ein, ist es möglich Tastenbetätigungen mehrfach ausgelsen werden.
Um diesem Problem Abhilfe zu verschaffen ist möglich Interrupts zu nutzen. Um den Arduino Taster als Schalter zu programmieren ergänzen wir den Quellcode um einige Elemente.
Als erstes aktiveren wir einen Interrupt an Pin 2 und fügen eine Funktion hinzu, die der Arduino abarbeitet, wenn der Interrupt ausgelöst wird.
Der folgende Sketch ist sorgsam dokumentiert und sollte die Lösung des Problems gut darstellen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
attachInterrupt( 0, interruptFunktion, LOW); // aktivierung des Interrupts } void loop() { if (geschaltet == true) { // sollte der Schalter an sein, schalten wir die LED ein digitalWrite(ledPin, HIGH); } if (geschaltet == false) { // sollte der Schalter aus sein, sollte der Schalter aus digitalWrite(ledPin, LOW); } } void interruptFunktion() { // hier wird die Interruptfunktion aktiviert if ( millis() > (letzteZeit + entprellWert)) { // verhindert Mehrfachaktivierung if (geschaltet == false) { // überprüft den Schaltzustand geschaltet = true; // die LED wird eingeschaltet } else { geschaltet = false; // die LED wird ausgeschaltet } letzteZeit = millis(); } } |
Kommentar zu diesem Beitrag
Es ist mir vollkommen klar, dass einige Elemente dieses Programmcodes nicht optimal sind. Dies hat allerdings den Hintergrund, dass es mir ein Anliegen war die Darstellung möglichst einfach zu halten.
Wenn Ihr Fragen habt, könnt ihr gerne einen Kommentar hinterlassen. Auch würde mich ein Like meiner Facebookseite sehr freuen 🙂
2 Kommentare. Hinterlasse eine Antwort
Hilfe, warum versteh ich das nicht?
Unser Arduino scheint anders zu funktionieren
Ein paar mehr Infos wäre schon gut. Was versteht du denn genau nicht?