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.
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); } }
Hallo, hat jemand schon ein Programm geschrieben welches innerhalb einer gewissen Zeit einen doppelklick eines Tasters erkennt?
bei mir klappt es auch, wenn ich den Schalter nur an den pin sanschließe, also ich muss gar keine stromzufur bringen
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?
Hallo Stefan,
vielen Dank für die schnelle Info. Werde das natürlich bald testen und Bescheid geben ;)
Andree
Hallo Andree,
meinst Du eine Platine, die irgendwo anders verbaut ist? Dann könntest Du einen Optokoppler verwenden. Ich habe das hier mal erklärt: https://www.starthardware.org/2014/01/ein-altes-handy-als-arduino-input/
Statt dem hier beschriebenen Vibrationsmotors verbindest Du einfach die Anschlussstellen der LED.
Liebe Grüße
Stefan”
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
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”
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.
@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.
Es heißt abgeschaltet und nicht abgeschalten !
@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.
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
Da mein Arduino Nano fest verbaut ist, kann ich es momentan nicht einfach so Testen.
Werde mir aber noch ein zum testen zulegen.
@Marcus: Das sollte auch gehen, aber probier es doch aus.
Hi,
kann ich auch ~3,2v als arbeiten?
Also 3,2v oder GND?
Oder müssen es 5v / GND sein?
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.
@fuat: Nee, die können einfach frei bleiben – kein Problem.
@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!
@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 :)
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?
@bowling: OK, den Teil habe ich verstanden. Es geht nicht um Button, sondern darum, die anliegenden Signale (vor den LM2596) auszulesen, oder? Dafür brauchst Du die LM2596 eigentlich nicht. Du kannst einfach einen Optokoppler (https://www.starthardware.org/2010/08/optokoppler/) verwenden.
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!
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.
@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.
@Stefan*: wieso geht das nicht?
@bowling: Das kann ich Dir nicht genau sagen – den Schalter kannst Du damit allerdings nicht auslesen.
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?
@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 …
Kann man sich nicht das ganze if-Statement sparen und einfach
digitalWrite(ledPin, buttonState);
schreiben?
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.
…ein Widerstand filtert keine Störungen. Er fungiert als Vorwiderstand etc.
Da fehlt noch etwas und zwar “springt” das Signal beim drücken des Buttons. Das muss man beachten. Ein gutes Info Video dazu gibts hier (ca. Minute 10:30): https://www.youtube.com/watch?v=_LCCGFSMOr4
Arduino is great… it makes me happy(:
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.