Pin Mode "NPUT_PULLUP"

Hallo

Ich wollte nur sicher gehen und hier noch mal nachfragen.
Zwischen Pin 23 und Masse vom Arduino habe ich einen Taster.
Wenn ich das alles richtig verstanden habe, brauche ich auch keinen Widerstand,
weil durch den Pin Mode "INPUT_PULLUP", der Interne Widerstand vom Arduino benutzt wird.

Wenn ich jetzt mit "digitalRead(Pin23)" den Pin abfrage, muss ich wenn der Taster gedrückt wird, fragen ob sein Status LOW ist. Kann mir einer erklären wieso das so ist? Also ist der zustand des Pins HIGH wenn der Taster nicht gedrückt ist, Irgendwie verstehe ich das nicht.

Gruss Sascha

Der Zustand HIGH wird durch den internen Widerstand erreicht, den du mit "INPUT_PULLUP" definiert hast.

Weil der PULLUP - wie der Name schon sagt - den Pin auf HIGH (5V) zieht.
Drückst du den Taster (den du ja mit Masse verbunden hast) wird der Pin auf LOW (0V) gezogen.

Pullups (oder auch Pulldowns) sind notwendig damit der unbeschaltete Pin einen Definierte Wert hat.
Sonst "floatet" er und du bekommst Zufallswerte. Man kann ihn jetzt auch nicht ohne Widerstand einfach
auf die 5V legen weil du sonst wenn du den Taster drückst eine Kurzschluss kriegen würdest.
Deine ganze Schaltung würde abstürzen (und Schlimmeres).

Ulli

Low aktive Pins sind in der Elektronik übrigens völlig normal

Hallo,
Mit dem "in der Elektronik völlig normal" ist das so eine Sache. Im Elektonikbereich für Automatisierung , das betrifft den Bereich für Sensorik und SPS Bereich wird positive Schaltlogik verwendet.

Leider ist das nun so das das menschliche Gehirn mit dem LOW aktiv schon mal Probleme hat. Ich gehe eigentlich immer so vor das ich mit den Eingang auf eine bool Variable lege die ich invertiert einlesen. Dann stimmt es wieder. Taster gedrückt -> Variable true.

in Etwa so (code so nicht lauffähig)

const byte btnpin=2;
bool btnstate; 

// in Setup
pinMode(btnpin,INPUT_PULLUP);
.
// und im loop
btnstate = !digitalRead(btnpin); // invertiert eingelesen ab nun mit btnstate arbeiten

if(btnstate){   // abfrage auf true 
Serial.print("Taster ist jetzt gerückt")
}

Heinz

Mit dem "in der Elektronik völlig normal" ist das so eine Sache. Im Elektonikbereich für Automatisierung , das betrifft den Bereich für Sensorik und SPS Bereich wird positive Schaltlogik verwendet.

Natürlich nicht.

Grundsätzlich, bei Sicherheiten, werden Öffner verwendet.
Um Kabelbrüche zu erkennen.
Also NC Kontakte.

Bei sonstigen Sensoren eher NO/Schließer

Das heißt, der Anlagenbau kennt durchaus auch die Inverse Logik.


Ich gehe eigentlich immer so vor das ich mit den Eingang auf eine bool Variable lege die ich invertiert einlesen.

Das mache ich über Klassen!

Da gibt es z.B. den InputPin und den InvInputPin.
Die sind sich sehr ähnlich, haben nur eben eine inverse Logik.
Für Outputs, ebenso.

Hallo,

@Combie ich denke wir reden aneinander vorbei. Ich habe mich da etwas unglücklich ausgedrückt. Mit ging es darum das es in dem Industriebereich üblicherweise die Sensorik plus schaltend ist PNP. Digitale Eingänge werden mit 24 V + als H erkannt. Ein Schalten nach minus ist da ehr selten.

mir sind da eigendlich nur japanische SPS Steuerungen bekannt die früher NPN Logik verwendeten.

Gruß Heinz

Es gibt auch mehr Elektronik als nur SPS. Das ist schon wieder was spezielles.

Bei grundlegenden ICs und digitalen Schaltungen kommt Low-aktive Logik ständig vor. Und wenn man das von da gewöhnt ist ist es auch nicht verwirrend

Wenn ich jetzt mit "digitalRead(Pin23)" den Pin abfrage, muss ich wenn der Taster gedrückt wird, fragen ob sein Status LOW ist. Kann mir einer erklären wieso das so ist? Also ist der zustand des Pins HIGH wenn der Taster nicht gedrückt ist, Irgendwie verstehe ich das nicht.

nimm ein Breadboard und teste es aus.
Das ist wirklich sehr wichtig, dass du diese Erfahrung selber machst.

Versuch 1:
GPIO mit externem Pulldown Widerstand von etwa 10K (Widerstand GPIO -> GND)
Button schließt GPIO gegen 5V
Pinmode INPUT
Also so - wie du es aktuell verstehst.

Versuch 2:
GPIO mit externem Pullup Widerstand von etwa 10K (Widerstand GPIO -> VCC)
Button schließt GPIO gegen GND
Pinmode INPUT

Versuch 3:
GPIO ohne Widerstand
Schalten schließt gegen GND
Pinmode INPUT_PULLUP

Gib dir einfach den Wert mit digitalRead auf der seriellen Schnittstelle aus.

Angenehmer Nebeneffekt beim Ausprobieren: du siehst wie sehr dein Taster prellt.

Hallo,

Vielen dank.

Hier ist es auch sehr gut beschrieben, mit Schaltbild, ist zwar für ein Raspberry, sollte aber den
gleichen Effekt haben.