Zum Inhalt springen
Arduino Digital In Taster

Digital In

    Um ein digitales Signal zu erfassen (Schalter, Taster, usw.), erweitert man die Schaltung um einen Taster. Die eine Seite des Tasters wird mit dem GND des Arduino-Board verbunden, die andere Seite mit dem digitalen Pin 2.

    Im Code schalten wir am Pin 2 den so genannten Pull-Up Widerstand hinzu. Er wird benötigt, um Spannungsschwankungen und Störsignale herauszufiltern. Alle störenden Ströme werden somit über diesen internen Widerstand in den 5V+ geführt. Ist der Taster nicht gedrückt, liegt am Pin 2 jetzt ein 5V+-Signal an (HIGH), drückt man den Taster, so liegt ein GND Signal an (LOW).

    Code für den Digital In vom Arduino

    const int buttonPin = 2;
    const int ledPin =  13;
    int buttonState = 0;
    
    void setup() {
      pinMode(ledPin, OUTPUT);
      pinMode(buttonPin, INPUT_PULLUP);
    }
    
    void loop(){
      buttonState = digitalRead(buttonPin);
      if (buttonState == LOW) {
        digitalWrite(ledPin, HIGH);
      } else {
        digitalWrite(ledPin, LOW);
      }
    }

    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.


    Sieh dir jetzt meinen neuen Arduino-Videokurs an: Jetzt ansehen!


    const int buttonPin = 2;
    const int ledPin =  13;
    int buttonState = 0;

    Im Setup bekommt der ledPin die Funktion eines Outputs, der buttonPin die eines Inputs mit zugeschaltetem Pull-Up-Widerstand.

    pinMode(ledPin, OUTPUT);
    pinMode(buttonPin, INPUT_PULLUP);

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

    buttonState = digitalRead(buttonPin);

    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 LOW ist, sonst (else) wird sie abgeschaltet.

    if (buttonState == LOW) {
        digitalWrite(ledPin, HIGH);
      } else {
        digitalWrite(ledPin, LOW);
      }
    }

    35 Gedanken zu „Digital In“

    1. Hallo, hat jemand schon ein Programm geschrieben welches innerhalb einer gewissen Zeit einen doppelklick eines Tasters erkennt?

    2. 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?

    3. 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

    4. 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”

    5. 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.

    6. @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.

    7. @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.

    8. 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

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

    10. 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.

    11. @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. @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 :)

    13. 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?

    14. 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!

    15. 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.

    16. @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.

    17. 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?

    18. @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 …

    19. 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.

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

    Die Kommentarfunktion ist deaktiviert.