Digital In

Button am Digital 2

Um ein digitales Signal zu erfassen (Schalter, Taster, usw.), erweitert man die Schaltung um einen 
Taster und einen Widerstand. Die eine Seite des Tasters wird mit dem 5V+ des Arduino-Boards, die andere Seite mit dem digitalen Pin 2 verbunden. Der Widerstand (1 – 10 kΩ) wird benötigt, um Spannungsschwankungen und Störsignale herauszufiltern. Man bezeichnet so einen Widerstand als Drop-Down-Widerstand. Er wird mit dem Digitalen Pin 2 und dem GND verbunden. Alle störenden Ströme werden somit über den Widerstand in den GND geführt. Ist der Taster nicht gedrückt, liegt am Pin 2 jetzt ein GND-Signal an (LOW), drückt man den Taster, so liegt ein 5V+ Signal an (HIGH).

Das Button-Beispiel aus der Arduino-Software (File > Examples > Digital > Button) sieht ohne Kommentare so aus:

Am Anfang werden drei ganzzahlige Variablen buttonPin, ledPin und buttonState erzeugt. Dabei sind die ersten beiden unveränderlich (Schlüsselwort const für Konstante). Die Variable buttonState wird verwendet, um den aktuellen Zustand des Tasters zu speichern.

Im Setup bekommt der ledPin die Funktion eines Outputs, der buttonPin die eines Inputs.

Im Loop wird der Variable buttonState mit dem Befehl = digitalRead(buttonPin) der aktuelle Zustand des Buttons übergeben (entweder HIGH oder LOW).

Durch eine if-Abfrage (Alle Anweisungen innerhalb der if-Abfrage werden nur ausgeführt, wenn die in Klammern angegebene Bedingung zutrifft.) wird die LED am ledPin eingeschaltet, also wenn buttonState HIGH ist, sonst (else) wird sie abgeschaltet.

33 Comments

  1. megabryte

    Anstatt des Pulldown-Wiederstandes, kann man auch die internen Pullup-Wiederstände nehmen, die kann man mit digitalWrite(pinnummer, HIGH) aktivieren.

  2. Peter

    In einem gewissen Sinne fungiert der Widerstand doch als Entstörung:
    ohne den pull-down Widerstand würde der Logikeingang bei offener Taste „floaten“, d.h. es würde sich unter Umständen ein Spannungspegel einstellen, der im Bereich der Schaltschwelle liegt. Ein überlagertes Rauschen würde dann zu fehlerhaften Eingaben führen.

  3. roeg

    Kann man sich nicht das ganze if-Statement sparen und einfach

    digitalWrite(ledPin, buttonState);

    schreiben?

  4. @roeg: Ja schon, aber wie erkläre ich dann die if-else Abfrage :D

    Es geht wahrscheinlich sogar

    digitalWrite(ledPin,digitalRead(buttonPin));

    ist aber weniger schön und nicht mehr so übersichtlich. In den einfachen Fällen klappt das bestimmt, aber die Anwendungsfälle werden ja komplexer …

  5. bowling

    Habe mal ne frage was ist denn wenn ich an denn schalter externe 5 volt anschließe und diese 5 volt aber geschaltet also nach dem schalter an die arduino anschließe kann da was passieren?

  6. @bowling: Damit Strom fließen kann, muss er von seinem + zu seinem – fließen. Wenn aber ein anderer + mit einem andern – verbunden wird, fließt kein Strom. Wenn Du beide GNDs (vom externen und internen Stromkreis) verbindest, könnte es klappen, ist aber nicht ohne Risiko für das Arduino.

  7. bowling

    wie mache ich es denn aber wenn ich 24 digitale eingänge habe die ich aber erst von 24V auf 5V drossel und denn auf das board gehe. die 24 v kommen von spannungswandlern die alle von einem netzgerät betrieben werden.

  8. bowling

    besser gesagt ich habe 24 mal (LM2596 DC-DC) die mir 24 mal aus 24 volt 5 volt machen kann ich denn nicht einfach die 24 mal + an meine eingänge anschließnen und die ganzen gnd zusammenführen und denn einmal an mein board anschließen? Wenn nicht sagt es bitte und helft mir bitte denn ich muss die benutzen weil ich nur 24 volt eingangssignale kriege!

  9. bowling

    es geht darum das alle meine signale mit 24V ankommen ich diese aber ja auf 5V runterkriegen muss. außerdem ist an diesem signal paralel auch noch ne led eingebaut 4,5V und 20mA. und du sagst ja das ich denn einfach vor der led nen optokoppler einfüge um denn damit von 24V auf 5V runterkomme oder? was mache ich denn da mit denn ganzen optokoppler bzw mit denn gnd?

  10. @bowling: Schickst Du mir mal Deinen Schaltplan? Und was Du damit vorhast? Dann kann ich mir bestimmt besser ein Bild davon machen und Dir leichter darauf antworten :)

  11. bowling

    @Stefan: vom prinzip her habe ich 24 schalter die 24v schalten diese 24v wolte ich mit lm2596 auf 5 volt runterbringen denn mit nen pulldown wiederstand (10k ohm) auf die arduino bringen!hilft dir das wenn nicht denn mach ich noch mal nen schaltplan!

  12. fuat

    Eine Frage:
    Was macht man mit den nicht benutzten Eingängen?
    Muss man sie an irgendein Potantial legen (eventuell mit Pull-up Widerständen), oder kann man sie unbeschaltet frei lassen.

  13. Marcus

    Da mein Arduino Nano fest verbaut ist, kann ich es momentan nicht einfach so Testen.
    Werde mir aber noch ein zum testen zulegen.

  14. Sharky

    Hab mal ne frage und zwar, wie ich kann ich die das Drücken auf dem Taster zählen?
    Geht darum um Zahlen für einen Taster in das Programm zu bekommen… 2 mal Drücken auf dem Taster soll dann eine 2 der Variable x zugewiesen werden

  15. @Sharky: Da brauchst Du noch eine Variable, die überprüft, ob der Schalter schon mal losgelassen wurde, bevor das erneute Drücken gezählt wird und eine zweite, die – klar – zählt.

  16. @Reiner: Naja, wenn ich in Deutsch gut gewesen wäre, hättest Du jetzt meine Romane lesen müssen und keine Tutorials zu Elektronik ;-)
    Egal: Kritik angenommen, geschalten in geschaltet geändert – auf dieser Seite jedenfalls.

  17. Anja

    Kann man einen Servo auslösen, indem man den Taster mehrmals hintereinander drückt? Also eine Aktion soll erst ausgelöst werden, wenn man sozusagen die Taster entweder öfters hintereinander drückt und lange gedrückt hält.
    Bitte um Hilfe. Danke.

  18. Hi Anja,

    sorry für die späte Antwort. Klar, das kannst Du machen. Das passiert in der Programmierung. Du zählst einfach die Millisekunden von dem Zeitpunkt, wenn der Taster gedrückt wird, bis zu dem Zeitpunkt, bis der Taster losgelassen wirst.

    Liebe Grüße

    Stefan“

  19. Andree

    Hi hätte da mal ne Frage:
    Angenommen ich habe eine Platine die mir zb. bei einem Ereignis eine Led anschaltet bzw ausschaltet. Nun hat diese Platine aber eben nur die 3 Volt Ausgang die die Led braucht. Ist es nun möglich mit dem Arduino den Schaltzustand der Led auszulesen und dann etwas anderes schaltet? Also Led externe Platine an- Arduino schaltet Motor an und umgekehrt?

    Vielen Dank in voraus
    Andree

  20. Andree

    Hallo Stefan,
    vielen Dank für die schnelle Info. Werde das natürlich bald testen und Bescheid geben ;)

    Andree

  21. es geht darum das alle meine signale mit 24V anokemmn ich diese aber ja auf 5V runterkriegen muss. audferdem ist an diesem signal paralel auch noch ne led eingebaut 4,5V und 20mA. und du sagst ja das ich denn einfach vor der led nen optokoppler einffcge um denn damit von 24V auf 5V runterkomme oder? was mache ich denn da mit denn ganzen optokoppler bzw mit denn gnd?

  22. Yannick

    bei mir klappt es auch, wenn ich den Schalter nur an den pin sanschließe, also ich muss gar keine stromzufur bringen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.