Kabel haben keinen richtigen Kontakt/stören

Ich möchte Tastendrücke über ein Python-Programm registrieren, das ich mit einem Raspberry Pi 3 geschrieben habe. Meine Tasten sind sowohl mit Masse als auch mit den GPIO-Pins 22 und 27 verbunden. Wenn die Tasten jedoch gedrückt werden, gibt es kein konstantes Wahres aber es ändert sich sehr schnell, also bekomme ich so etwas wie 'Wahr, Falsch, Wahr, Wahr, Falsch, Falsch, Falsch, Wahr, Wahr', obwohl alles wahr sein sollte.

Wenn die Taste jedoch nicht gedrückt wird, gibt sie ein konstantes False aus. Ich habe alle Drähte überprüft und es mit und ohne Widerstände (10k und 4,7k) versucht, aber sie liefern das gleiche Ergebnis.

Gibt es eine Möglichkeit, dieses Problem zu beheben? Ich habe es auch mit verschiedenen Schaltern versucht, aber alle geben das gleiche Ergebnis. Sie sind mit Standard-Überbrückungsdrähten verdrahtet.

Zeigen Sie ein Schema, wie genau Sie sie verdrahtet haben und wie (Klimmzüge?) Sie die Pins konfiguriert haben.
Verwenden Sie "gedrückt" als Verb, und wir sprechen über die springenden 10 ms von Olins Antwort, oder als Substantiv, den Zustand des Niederhaltens, und wir sprechen über die Sekunden, die nach dem Springen wahr sein sollten hat angehalten?
Intermittierendes und unzuverlässiges Kontaktprellen ist für jeden schlechten Schalter normal. Das Hinzufügen von C-Shunt über den Schalter, so dass RC > Polling-Intervall , entprellt die Schalterspannung durch Laden und Halten. Die Abklingzeit RC kann durch 1M=R gesteuert werden. Unter der Annahme, dass der Schalter <100 Ohm Kohlenstoff ist und R Pullup auf Vdd (max) 1 M beträgt, kann C 10 nF betragen. für 10 mS = T, was die Prellzeit überschreiten sollte.

Antworten (2)

Das nennt man Bouncen . Sie sollten davon ausgehen, dass jeder mechanische Schalter dies für bis zu einige 10 ms beim Ein- und Ausschalten tut.

Um damit umzugehen, führen Sie eine Entprellung in der Software durch. Normalerweise bedeutet dies, dass Sie einen neuen Schaltflächenstatus nicht als gültig betrachten, bis Sie diesen Status kontinuierlich für etwa 50 ms gesehen haben.

Wenn das Prellen anhält, während Sie die Taste gedrückt halten, dann ist die Taste defekt. Ersetze es.

Wer auch immer das abgelehnt hat, was genau ist Ihrer Meinung nach falsch?
Danke für deine Antwort! Es springt nicht , denn selbst wenn ich jede 1/10 Sekunde teste, bleibt das Problem bestehen. Wenn kein Draht angeschlossen ist, ist es eine Konstante 0, was es sollte. Wenn ein Kabel mit dem GPIO-Pin verbunden ist, wechselt es zwischen 1 und 0, also erhalten Sie ungefähr Folgendes: 0000001111111000001111110000000000000111111 Wenn dieses Kabel mit Masse verbunden ist (der Knopf gedrückt wird), ergibt es eine Konstante 0, was ich ein bisschen finde etwas seltsam.
@its: Etwas stimmt nicht. Es hört sich so an, als ob dieser Eingang eine hohe Impedanz hat und mit nur einem angeschlossenen Kabel Rauschen aufnimmt. Das stimmt aber nicht mit dem überein, was Sie in der Frage gesagt haben. Zeigen Sie ein Schema und erklären Sie genau, was passiert, wenn die Taste gedrückt wird und wann nicht. Der Teil mit dem Draht macht keinen Sinn.
Ich schätze deine Mühe sehr! Ich habe es behoben, indem ich einen Pulldown-Widerstand (korrigiere mich, wenn ich falsch liege) an Masse angefügt habe, und anstatt den Knopf an Masse anzuschließen, habe ich ihn an 3,3 V angeschlossen. Jetzt funktioniert es (noch) ohne Probleme. Danke für die schnellen Antworten und einen schönen Tag!

Die meisten Tutorials sagen, dass Sie nur zwei Drähte mit der Taste verbinden müssen: eine vom GPIO-Pin zur Taste und eine von der Taste zur Masse. Das hat bei mir nicht so funktioniert wie es sollte. Ich habe immer noch das 'GPIO-Kabel' mit der Taste verbunden, aber daneben geht ein 10k-Widerstand auf Masse. Der andere Ton der Taste, die ich an 3,3 V angeschlossen habe. Stellen Sie sicher, dass Sie nichts über 3,3 V verwenden, da die GPIO-Pins nichts über 3,3 V verarbeiten können!