Kami telah melihat menghubungkan tombol ke Arduino dan menyentuh masalah kontak "memantul". Ini adalah fenomena yang sangat mengganggu yang menyebabkan penekanan tombol berulang dan menyulitkan penanganan klik tombol secara terprogram. Mari kita bicara tentang cara menghilangkan pantulan kontak.
Diperlukan
- -Arduino;
- - tombol kebijaksanaan;
- - resistor dengan nilai nominal 10 kOhm;
- - Dioda pemancar cahaya;
- - kabel penghubung.
instruksi
Langkah 1
Kontak bouncing adalah fenomena umum di sakelar mekanis, tombol tekan, sakelar sakelar, dan relai. Karena fakta bahwa kontak biasanya terbuat dari logam dan paduan yang memiliki elastisitas, ketika ditutup secara fisik, mereka tidak segera membuat koneksi yang andal. Dalam waktu singkat, kontak menutup beberapa kali dan saling tolak. Akibatnya, arus listrik mengambil nilai kondisi mapan tidak secara instan, tetapi setelah serangkaian pasang surut. Durasi efek transien ini tergantung pada bahan kontak, ukuran dan desain. Ilustrasi menunjukkan osilogram tipikal ketika kontak tombol tact ditutup. Dapat dilihat bahwa waktu dari saat beralih ke kondisi mapan adalah beberapa milidetik. Ini disebut "pantulan".
Efek ini tidak terlihat di sirkuit listrik untuk mengontrol pencahayaan, motor, atau sensor dan perangkat inersia lainnya. Tetapi di sirkuit di mana ada pembacaan dan pemrosesan informasi yang cepat (di mana frekuensinya memiliki urutan yang sama dengan pulsa "pantulan", atau lebih tinggi), ini adalah masalah. Secara khusus, Arduino UNO, yang beroperasi pada 16 MHz, sangat baik dalam menangkap pantulan kontak dengan menerima urutan satu dan nol alih-alih satu sakelar 0 ke 1.
Langkah 2
Mari kita lihat bagaimana pantulan kontak memengaruhi pengoperasian sirkuit yang benar. Mari kita sambungkan tombol jam ke Arduino menggunakan rangkaian resistor pull-down. Dengan menekan tombol, kita akan menyalakan LED dan membiarkannya sampai tombol ditekan lagi. Untuk kejelasan, kami menghubungkan LED eksternal ke pin digital 13, meskipun yang built-in dapat dihilangkan.
Langkah 3
Untuk menyelesaikan tugas ini, hal pertama yang terlintas dalam pikiran:
- ingat status tombol sebelumnya;
- bandingkan dengan keadaan saat ini;
- jika status telah berubah, maka kami mengubah status LED.
Mari kita menulis sketsa seperti itu dan memuatnya ke dalam memori Arduino.
Saat sirkuit dihidupkan, efek pantulan kontak langsung terlihat. Ini memanifestasikan dirinya dalam kenyataan bahwa LED tidak langsung menyala setelah menekan tombol, atau menyala dan kemudian padam, atau tidak langsung mati setelah menekan tombol, tetapi tetap menyala. Secara umum, sirkuit tidak bekerja secara stabil. Dan jika untuk tugas menyalakan LED ini tidak begitu penting, maka untuk tugas lain yang lebih serius, itu tidak dapat diterima.
Langkah 4
Kami akan mencoba untuk memperbaiki situasi. Kami tahu bahwa pemantulan kontak terjadi dalam beberapa milidetik setelah penutupan kontak. Mari kita tunggu, katakanlah, 5 ms setelah mengubah status tombol. Waktu ini untuk seseorang hampir seketika, dan menekan tombol oleh seseorang biasanya memakan waktu lebih lama - beberapa puluh milidetik. Dan Arduino bekerja sangat baik dengan periode waktu yang singkat, dan 5ms ini akan memungkinkannya untuk memotong pantulan kontak dari menekan tombol.
Dalam sketsa ini, kami akan mendeklarasikan prosedur debounce () ("bounce" dalam bahasa Inggris hanya "bounce", awalan "de" berarti proses sebaliknya), ke input yang kami berikan status tombol sebelumnya. Jika penekanan tombol berlangsung lebih dari 5 mdtk, maka itu benar-benar menekan.
Dengan mendeteksi pers, kami mengubah status LED.
Unggah sketsa ke papan Arduino. Semuanya jauh lebih baik sekarang! Tombol berfungsi tanpa gagal, saat ditekan, LED berubah status, seperti yang kita inginkan.
Langkah 5
Fungsi serupa disediakan oleh perpustakaan khusus seperti perpustakaan Bounce2. Anda dapat mengunduhnya dari tautan di bagian "Sumber" atau di situs web https://github.com/thomasfredericks/Bounce2. Untuk menginstal perpustakaan, letakkan di direktori perpustakaan lingkungan pengembangan Arduino dan mulai ulang IDE.
Pustaka "Bounce2" berisi metode berikut:
Bounce () - inisialisasi objek "Bounce";
void interval (ms) - mengatur waktu tunda dalam milidetik;
void attach (nomor pin) - mengatur pin yang terhubung dengan tombol;
int update () - memperbarui objek dan mengembalikan true jika status pin telah berubah, dan false sebaliknya;
int read() - membaca status baru pin.
Mari kita menulis ulang sketsa kita menggunakan perpustakaan. Anda juga dapat mengingat dan membandingkan status tombol sebelumnya dengan yang sekarang, tetapi mari kita sederhanakan algoritmenya. Saat tombol ditekan, kita akan menghitung penekanan, dan setiap penekanan ganjil akan menyalakan LED, dan setiap penekanan genap akan mematikannya. Sketsa ini terlihat ringkas, mudah dibaca dan mudah digunakan.