Ich schreibe einen MP3-Player, der Informationen auf ein LCD-Display schreibt. Ich würde ihn gerne von der Tastatur auf die Verwendung von Drucktasten umstellen, aber ich erhalte ständig zu viele Tastendrücke. Ich habe versucht, nach oben zu ziehen und die Flanke zu fallen / zu steigen, aber ich erhalte immer noch das gleiche Ergebnis. Weiß jemand, ob dies ein bekanntes Problem ist oder mache ich einfach etwas falsch? Oh, ich mache das auch komplett in C mit WiringPi.
12
if(digitalRead(data) && millis()-startTime > 10){
und setze startTime immer dann, wenn es in die for-Schleife eintritt.Antworten:
Mechanische Tasten und Schalter können unter einem Sprung des Schalters leiden, wenn sie für einige Millisekunden schnell zwischen offen und geschlossen wechseln.
Sie können versuchen, die Taste / den Schalter in Software oder Hardware zu entprellen.
Wahrscheinlich am einfachsten in der Software.
Wenn sich der Pegel ändert (Ein zu Aus oder Aus zu Ein), warten Sie x Millisekunden und lesen Sie den gpio erneut. Wenn es sich noch im neuen Zustand befindet, wird davon ausgegangen, dass es sich um einen echten Übergang handelt. Der Wert von x könnte etwa 20 sein.
Suchen Sie nach Hardware-Lösungen für diese Art von Post
quelle
Nehmen Sie sich Zeit, um Jack Ganssles Debouncing-Handbuch zu lesen . Auf der ersten Seite wird das Problem ausführlich erläutert, auf der zweiten Seite wird der Umgang mit Hardware oder Software erläutert. Es gibt keine "perfekte" Entprellmethode, aber viele schlechte!
Dies ist ein Problem, auf das Sie wiederholt stoßen, wenn Sie Software mit Switches verbinden. Es lohnt sich also, sich die Zeit zu nehmen, um es zu verstehen.
quelle
In Anwendungen, die einen System-Ticker haben, implementiere ich normalerweise ein Schieberegister.
Natürlich sollten Sie das Tastendruckereignis nur bei einer steigenden Flanke ausführen.
quelle