Pull-Up /Down

Hallo ich bin ganz neu hier, ich habe mir einen Elegoo Mega zugelegt und nun diverse von Elegoo mitgelieferte Programme ausprobiert und anschließend versucht nachzuvollziehen. Nun habe ich ganz einfach einen Kippschalter/Neigungsschalter der eine LED ausschalten soll. Nachdem ich dachte ich habe das Programm von Elegoo verstanden habe ich mich dran gesetzt und das ganze selbst geschrieben. Nun habe ich nach langer Fehlersuche herausgefunden, dass ich den Pin (hier im Bsp. 2) schon im Setup auf HIGH setzen muss. Durch einen Beitrag von mir im englischen Forum konnte man mir zumindest sagen, dass dies am Pull Up bzw Pull Down läge. Jetzt habe ich versucht mich darüber etwas zu informieren, allerding bin ich da noch nicht dahinter gestiegen. Kann mir hier jemand weiterhelfen und das mit dem Pull Up bzw Pull down möglichst einfach erklären ? Vielen Dank schonmal Liebe Grüße

unten noch mein selbst geschriebes Programm...

int LED = 13;
int Schalter = 2;

void setup() 
{
 pinMode (LED,OUTPUT);
 pinMode (Schalter,INPUT);
 digitalWrite (Schalter,HIGH); // warum wird hier der Schalter HIGH gesetzt ?
}

void loop()
{
 if(digitalRead(Schalter) == HIGH)
 {
   digitalWrite (LED,LOW);
 }
 else
 {
   digitalWrite (LED,HIGH);
 }
}

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).

Das Problem ist, dass offene Eingänge wie Antennen wirken und alles (un)mögliche einfangen.
Du hast folgende Möglichkeiten:

Entweder HIGH-aktiv (PullDown-Widerstand):
5V - Schalter - A2 - 10kOhm - GND

pinMode(A2,INPUT);
...
if (digitalRead(A2) == HIGH) {
  // tu etwas
}

oder LOW-aktiv (PullUp-Widerstand):
5V - 10 kOhm - A2 - Schalter - GND

pinMode(A2,INPUT);
...
if (digitalRead(A2) == LOW) {
  // tu etwas
}

oder interner Pullup:
A2 - Schalter - GND

pinMode(A2,INPUT_PULLUP);
...
if (digitalRead(A2) == LOW) {
  // tu etwas
}

Somit hast Du bei einem offenen Schalter immer eine definierte Spannung am Eingang.

Gruß Tommy

Hallo, herzlichen Dank für die schnell Antwort. ich werde es nun versuchen ....

Entschuldigung für die vergessenen Tags, das wusste ich nicht.

Gruß

Hi

Du kannst auch ‘INPUT_PULLUP’ schreiben.
Das schaltet den internen PullUp-Widerstand an diesem Beinchen ein.
In den Innereien des µC wird diese Information in genau dem gleichem Register gespeichert, wie das HIGH für den Ausgang (Wenn der Pin als OUTPUT eingestellt ist).

Du hast Deinen Schalter also zwischen Pin und GND platziert - da der Schalter nur nach GND schalten kann, brauchst Du für die Ruhelage eine ‘andere’ definierte Spannung - HIGH (über den PullUp) bietet sich förmlich an.

Du könntest auch den Taster zwischen Pin und Vdd anklemmen, müsstest dann aber einen PullDn-Widerstand zwischen Pin und GND einbauen.

PullUp sind im µC bereits fertig eingebaut - ein Grund, warum viele Taster am µC nach GND abgefragt werden (also gedrückt LOW sind).

MfG

PS: … pöh … :wink:
(zu langsam schnüff)

das

 pinMode (Schalter,INPUT);
 digitalWrite (Schalter,HIGH); // warum wird hier der Schalter HIGH gesetzt ?

ist das gleiche wie

pinMode(Schalter,INPUT_PULLUP);

INPUT_PULLUP funkioniert bei allen Controllern. Alles andere ist ein Hack, der nur auf ganz bestimmten Controllern funktioniert.

BHE105: ... Kann mir hier jemand weiterhelfen und das mit dem Pull Up bzw Pull down möglichst einfach erklären ? ...

Ich nehme an, dass Du nach Infos zu Grundlagen/Verständnis fragst.

Bei einem Pull-up- oder Pull-down-Widerstand geht es lediglich darum, einem Eingangspin einen „Default-Wert“ zu verpassen, weil vollkommen unbeschaltete Eingänge im Grunde jeden möglichen Wert annehmen können. Ein Pull-up-Widerstand wird zum Beispiel dann benutzt, wenn man einen Pin mit einem Schalter oder Taster verbinden möchte. Der Pull-up-Widerstand verbindet den Pin mit z. B. 5 V, der Schalter bzw. Taster wird zwischen Pin und GND geschaltet: Wenn der Taster gedrückt wird, ist der Eingang LOW, sonst HIGH (und zwar zweifelsfrei).

HTH

Gregor