Verkabelung eines Schalters.

Ich möchte einen Drehschalter mit zwei Positionen an einen Arduino Uno anschließen.
Der Schalter soll an zwei Digitalepins angeschlossen werden.

Bei HIGH soll eine Aktion ausgelöst werden und bei LOW auch. Und das für zwei Schaltpositionen.
Das programmieren ist an sich kein Problem.
Allerdings hab ich vergessen wie man das richtig anklemmt.

Bild meines Schemas befindet sich im Anhang

Es funktioniert auch. Nur frage ich mich ob es längerfristig zu Problemen kommt.
Kann ich auch ein 100k Resistor nehmen.

Ich würde mich freuen wenn mich jemand aufklären kann.
:slight_smile:

schema.png

Hi,

beim Arduino schaltet man üblicherwese gegen GND (-), da Du interne PullUp-Widerstände im Arduino einschalten kannst.
Das heißt beim betätigen schaltest Du von High nach Low.

https://playground.arduino.cc/Deutsch/Eingang

Gruß André

Profiler64:
Es funktioniert auch. Nur frage ich mich ob es längerfristig zu Problemen kommt.
Kann ich auch ein 100k Resistor nehmen.

Was sollte da zu Problemen führen? 10 kOhm ist für den Anfang ok, wenn die Leitungen nicht zu lang sind. Sonst musst Du weiter runter gehen. 100 kOhm halte ich für zuviel, weil dann evtl. schon zu viele Störungen mitspielen wollen.

Gruß Tommy

Wenn Du INPUT_PULLUP verwendest, dreht sich die Logik um, denn gedrückt ist dann LOW. Da Du aber beide Zustände abfragen möchtest, ist es egal.

Ich lege Dir Tastenentprellung und Flankenauswertung nahe.

Profiler64:
Das programmieren ist an sich kein Problem.

Warten wir mal ab, ob Dir Deine Erfahrung nicht hinderlich im Weg steht. Bei mir war es so.

Hi

Was meinst Du mit 'Bei HIGH und bei LOW auch'?
Wenn's beide Male die gleiche Aktion sein darf, brauchst Du weder einen Arduino, noch einen Schalter - nur die Aktion :wink:

Du solltest also 'etwas' genauer beschreiben, was Dein Anliegen ist - gerne so, als ob Dein Gegenüber von Deinem Projekt ABSOLUT NICHTS weiß - und: in der Tat ist mir Dein Projekt völlig fremd!

MfG

Ich tippe auf eine Flankenauswertung, die hier gebraucht wird.

SpaghettiCode:
Hi,

beim Arduino schaltet man üblicherwese gegen GND (-), da Du interne PullUp-Widerstände im Arduino einschalten kannst.
Das heißt beim betätigen schaltest Du von High nach Low.

Arduino Playground - Eingang

Gruß André

Ok, gibt es jetzt Probleme wenn ich es anders rum mache? :slight_smile: Als Reaktion auf das Betätigen des Drehschalters wird auf einem OLED Display etwas angezeigt.

Tommy56:
Was sollte da zu Problemen führen? 10 kOhm ist für den Anfang ok, wenn die Leitungen nicht zu lang sind. Sonst musst Du weiter runter gehen. 100 kOhm halte ich für zuviel, weil dann evtl. schon zu viele Störungen mitspielen wollen.

Gruß Tommy

Ja ich es geht lediglich um circa 10cm lange Kabel. Hab halt momentan nur noch 100k da. Dann werd ich nochmal welche besorgen.

agmue:
Wenn Du INPUT_PULLUP verwendest, dreht sich die Logik um, denn gedrückt ist dann LOW. Da Du aber beide Zustände abfragen möchtest, ist es egal.

Ich lege Dir Tastenentprellung und Flankenauswertung nahe.
Warten wir mal ab, ob Dir Deine Erfahrung nicht hinderlich im Weg steht. Bei mir war es so.

Ich hab den Pinmode normal als Input festgelegt. Wie gesagt es funktioniert ja bereits. Ich war mir lediglich nicht sicher was denn nun der richtige Wert für den Wiederstand ist.

postmaster-ino:
Hi

Was meinst Du mit 'Bei HIGH und bei LOW auch'?
Wenn's beide Male die gleiche Aktion sein darf, brauchst Du weder einen Arduino, noch einen Schalter - nur die Aktion :wink:

Du solltest also 'etwas' genauer beschreiben, was Dein Anliegen ist - gerne so, als ob Dein Gegenüber von Deinem Projekt ABSOLUT NICHTS weiß - und: in der Tat ist mir Dein Projekt völlig fremd!

MfG

Ok Also ich habe ein Drehschalter der drei Positionen hat ( Auto, Null, Ein).

Bei Null schaltet der schalter auch nicht. Bei den beiden Inputs hab ich 5V anliegen. Wenn man auf Auto stellt kommen die 5V an dem einen Ausgang raus und wenn man auf Ein stellt bei dem anderen.

Ich hab es so programmiert dass wenn der Schalter auf Auto steht, in einem OLED-Display "Modus: Auto" angezeigt wird. Ebenso wird dann die automatische Regelung von einem Servo aktiviert (aber das ist eine andere Geschichte). Auf "Ein" soll auf dem OLED-Display "Modus: An" stehen. Ebenso wird der Servo auf die höchste Einstellung gestellt.
Bei Null soll auf dem OLED "Modus: Aus" stehen, und der Servo auf die niedrigeste Position.

Programmiert hab ich das ungefähr so:
if (buttonState == HIGH) { //für die erste Schaltposition (Auto)

...

if (secbuttonState == HIGH){ //für die zweite Schaltposition (Ein)

...

if (secbuttonState == LOW) {
if (buttonState == LOW){

...

Und so hab ich die Null-Position programmiert.

Wahrscheinlich werde ich gleich gesteinigt, weil das dumm programmiert ist. Aber hey es funktioniert :slight_smile: .
Und ich lerne ja noch.

Kürzer, aber ohne Steinigung :wink:

if (buttonState == LOW && secbuttonState == LOW)
// noch kürzer
if (!buttonState && !secbuttonState)

Gruß Tommy

Tommy56:
Kürzer, aber ohne Steinigung :wink:

if (buttonState == LOW && secbuttonState == LOW)

// noch kürzer
if (!buttonState && !secbuttonState)




Gruß Tommy

Danke fürnden Tipp, hab das schon mal bei anderen Codes gesehen. Top

Profiler64:
Ok, gibt es jetzt Probleme wenn ich es anders rum mache? :slight_smile:

Nein, wenn es funktioniert, ist es gut.

Profiler64:
Hab halt momentan nur noch 100k da.

Für den Fall, es wäre notwendig, kannst Du auch vier 100k parallel schalten, ergibt 25k.

agmue:
Für den Fall, es wäre notwendig, kannst Du auch vier 100k parallel schalten, ergibt 25k.

Gute Idee! Aber da ich mir gerade eine Platine designed hab und die bald ätzen möchte, werde ich mir noch ein paar 10K Wiederstände besorgen.

Danke an alle für ihre Hilfe und Antworten.

Profiler64:
werde ich mir noch ein paar 10K Wiederstände besorgen..

Wenn du noch öfter was mit Elektronik machen willst, bestell dir lieber gleich ein Widerstandssortiment beim fC. Da bekommst du Hunderte mit allen gängigen Werten für 3-4€.