Salah satu metode yang saya gunakan mengambil keuntungan dari sifat kapasitif input CMOS.
mensimulasikan rangkaian ini - Skema dibuat menggunakan CircuitLab
Pada sirkuit di atas sakelar, ketika ditutup, memungkinkan resistor pull-down untuk mengisi / melepaskan kapasitansi input GPIO ke permukaan tanah.
Trik dengan sirkuit ini adalah menggunakan sifat dua arah dari GPIO untuk menjaga input dibebankan pada level logika yang tinggi ketika sakelar terbuka.
Kontrol rutin secara berkala mengubah pin keluar sebagai level tinggi, atau secara singkat memungkinkan pull-up, cukup lama untuk mempertahankan muatan penutup. Pin input kemudian bertindak seperti bit memori dinamis dan akan, dengan sebagian besar perangkat, menahan muatan itu untuk waktu yang cukup lama dan dapat digunakan.
Ketika dikonfigurasikan dengan benar, jika tombol ditekan, muatan pada pin akan mengeluarkan lebih cepat daripada kecepatan refresh. Kondisi itu kemudian dapat dideteksi sebagai bagian dari algoritma penyegaran sebagai pembacaan sebelum operasi penyegaran, atau digunakan untuk menggerakkan interupsi.
Daya sebentar digunakan selama pulsa refresh, baik untuk mengisi ulang kapasitor dan melalui resistor dan beralih jika ditutup. Namun, panjang pulsa refresh pendek dan frekuensi polling menghasilkan arus refresh relatif tidak signifikan.
Jelas metode ini aktif. Jika mikro dimatikan, status sakelar akan tak tentu saat bangun. Siklus refresh pertama setelah bangun harus mengabaikan pin yang dibaca. Selain itu, metode ini tidak boleh digunakan untuk membangunkan mikro. Sebelum tidur, sebaiknya pin diaktifkan sebagai output rendah untuk memarkirnya dalam keadaan nol saat ini.
Untuk membaca lebih banyak sakelar statis, seperti sakelar celup set-up, rutin khusus dapat digunakan alih-alih siklus penyegaran berkelanjutan. Setelah membaca, pin GPIO kemudian harus "diparkir" dalam keadaan output rendah aktif (nol saat ini) untuk menghindari masalah input mengambang.
CATATAN: Teknik ini memang sedikit menderita dari sensitivitas kebisingan jika panjang jejaknya panjang dan melewati daerah yang bising. Karena itu R1 harus dekat dengan pin input. Namun, saya tidak akan merekomendasikan hal ini untuk memasang saklar jarak jauh pada panel depan di suatu tempat kecuali Anda menambahkan kapasitansi tambahan dekat dengan pin.