Piszę odtwarzacz mp3, który zapisuje informacje na wyświetlaczu LCD, chciałbym przekonwertować je z klawiatury na przyciski, ale ciągle otrzymuję zbyt wiele naciśnięć klawiszy. Próbowałem podciągać i opadać / rosnąć, ale wciąż otrzymuję ten sam wynik. Czy ktoś wie od razu, czy jest to znany problem, czy po prostu robię coś złego? Och, robię to również całkowicie w C przy użyciu wiringPi.
12
if(digitalRead(data) && millis()-startTime > 10){
i ustaw startTime za każdym razem, gdy wejdzie w pętlę.Odpowiedzi:
Mechaniczne przyciski i przełączniki mogą podlegać odbiciu od przełącznika, w którym szybko przełączają się między otwarciem a zamknięciem przez kilka milisekund.
Możesz spróbować ogłosić przycisk / przełącznik w oprogramowaniu lub sprzęcie.
Prawdopodobnie najprostsze w oprogramowaniu.
Jeśli poziom się zmienia (z włączonego na wyłączony lub z wyłączonego na włączony), poczekaj x milisekund i ponownie przeczytaj gpio. Jeśli nadal jest w nowym stanie, załóż, że jest to prawdziwe przejście. Wartość x może wynosić około 20.
Rozwiązania sprzętowe szukaj tego rodzaju postów
źródło
Poświęć trochę czasu na przeczytanie przewodnika po ogłoszeniach Jacka Ganssle'a . Pierwsza strona bardzo szczegółowo ilustruje problem, a druga, jak sobie z nim poradzić w sprzęcie lub oprogramowaniu. Nie ma „idealnej” metody usuwania, ale jest wiele złych!
Jest to problem, na który często będziesz się natrafiał, jeśli łączysz oprogramowanie z przełącznikami, więc warto poświęcić czas na jego zrozumienie, a artykuł Jacka jest najbardziej zwięzłym sposobem, w jaki to zrobiłem.
źródło
W aplikacjach, które mają systemowy pasek, zwykle wdrażam rejestr zmian.
Oczywiście, powinieneś wykonać zdarzenie naciśnięcia przycisku tylko na zboczu narastającym.
źródło