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.
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).
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")
}
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.
@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.
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.