Jeffrey Cross
Jeffrey Cross

Tanyakan JAWA: Debouncing switch

Tanyakan MEMBUAT adalah lajur mingguan di mana kami menjawab soalan pembaca, seperti anda. Tulis mereka ke [email dilindungi] atau jatuhkan kami di Twitter. Kami tidak sabar untuk mengatasi masalah anda!

Jen menulis:

Saya membuat litar untuk mengedipkan LED pada kelajuan yang berbeza, supaya saya dapat mengawal menggunakan suis butang.Ia tidak berfungsi sehingga saya menambah menambahkan kod 'debounce'. Apa maksudnya, dan mengapa saya perlu menambahnya?

Soalan yang baik! Suis lantunan adalah salah satu kesan elektronik langka yang sebenarnya disebabkan oleh kekurangan mekanikal. Isu ini adalah cara suis berfungsi. Apabila anda menghidupkan suis (atau tekan butang pada butang), anda benar-benar menolak sekeping logam terhadap yang lain. Sekiranya ini berlaku dengan daya yang mencukupi, satu atau kedua-dua keping akan berubah sedikit, dan kemudian kembali ke arah yang lain. Bergantung pada sejauh mana suis telah direka, ini dapat diteruskan beberapa kali sebelum kedua-dua bahagian berhenti bergerak. Sekarang, semua pemantul ini bermakna bahawa dari perspektif elektrik, suis kelihatan seperti ia membuka dan menutup dengan pantas sehingga melantun turun. Ia berlaku dengan cepat, namun elektronik digital cukup cepat untuk melihat ini sebagai sekumpulan suis menekan!

Terdapat tiga cara untuk menangani perkara ini: mekanik (membina suis yang lebih baik), elektrik (membina penapis daripada komponen elektrik diskret), atau secara digital (dengan perisian).

Dalam soalan anda, anda menyebut bahawa anda menggunakan beberapa kod debounce, yang mungkin merupakan penyelesaian terbaik untuk anda. Untuk penyelesaian ini, anda menulis rutin perisian yang berjalan apabila seseorang menekan butang, kemudian menunggu masa yang singkat (cukup lama untuk bouncing berhenti) sebelum membaca keadaan suis. Ini berkesan mengabaikan apa-apa isyarat palsu dari kenalan suis memantul tanpa sebarang perkakasan tambahan. Sekiranya anda menggunakan platform Arduino, cuba tutorial ini.

Sekiranya anda tidak menggunakan mikropengawal, perisian tidak akan membantu, dan anda perlu mencuba satu penyelesaian lain. Cara tradisional untuk mengendalikan suis lantunan pada papan seli adalah menggunakan penapis kapasitor (RC) dalam konfigurasi lulus yang rendah. Apa yang dilakukan ini menghalang output suis daripada terlalu cepat, yang secara berkesan menapis sebarang isyarat kelajuan tinggi. Lihat tutorial ini jika anda ingin mencuba kaedah ini.

Jadi, bagaimana anda boleh merangka semula suis untuk mengelakkan lantunan? Ternyata bahawa perkara yang paling biasa dilakukan adalah untuk membasuh hubungan dengan merkuri. Kerana merkuri adalah cecair pada suhu bilik, ketegangan permukaannya menyimpan hubungan yang terhubung walaupun mereka melantun. Satu-satunya masalah dengan ini ialah raksa adalah sangat toksik, jadi anda hanya perlu menggunakan ini jika anda benar-benar perlu, seperti ketika anda mengawal mesin berkuasa tinggi pada kelajuan cepat.

[foto oleh pengguna Flickr russ_j_taylor]

Kongsi

Meninggalkan Komen