Saya menulis pemutar mp3 yang menulis info ke layar LCD, saya ingin mengonversinya dari menggunakan keyboard menjadi menggunakan tombol, tetapi saya terus-menerus mendapatkan terlalu banyak penekanan tombol. Saya sudah mencoba menarik ke atas dan jatuh / naik ujung tetapi saya masih mendapatkan hasil yang sama. Adakah yang tahu jika ini adalah masalah yang diketahui atau apakah saya hanya melakukan sesuatu yang salah? Oh, saya juga melakukan ini sepenuhnya dalam C menggunakan wiringPi.
12
if(digitalRead(data) && millis()-startTime > 10){
dan atur startTime kapan saja ia masuk untuk loop.Jawaban:
Tombol dan sakelar mekanis dapat mengalami bouncing sakelar di mana sakelar berganti dengan cepat antara buka dan tutup selama beberapa milidetik.
Anda dapat mencoba melepaskan tombol / sakelar dalam perangkat lunak atau perangkat keras.
Mungkin paling sederhana dalam perangkat lunak.
Jika level berubah (hidup ke mati, atau mati ke hidup) tunggu x milidetik dan baca lagi gpio. Jika masih dalam keadaan baru maka anggap itu adalah transisi yang nyata. Nilai x bisa sekitar 20.
Untuk solusi perangkat keras lihat pos semacam ini
sumber
Luangkan waktu untuk membaca panduan debouncing Jack Ganssle . Halaman pertama menggambarkan masalah dengan sangat rinci, dan yang kedua bagaimana mengatasinya dalam perangkat keras atau perangkat lunak. Tidak ada metode debounce 'sempurna', tetapi ada banyak yang buruk!
Ini adalah masalah yang akan Anda temui berulang kali jika menghubungkan perangkat lunak dengan sakelar, jadi ada baiknya meluangkan waktu untuk memahaminya, dan artikel Jack adalah cara paling ringkas yang pernah saya lakukan.
sumber
Dalam aplikasi yang memiliki ticker sistem saya biasanya menerapkan register geser.
Tentu saja, Anda harus menjalankan acara tekan tombol hanya di tepi yang menanjak.
sumber