Kullandığım bir yöntem, CMOS girişlerinin kapasitif doğasından faydalanıyor.
bu devreyi simüle et - CircuitLab kullanılarak oluşturulan şematik
Anahtarın üzerindeki devrede, kapalıyken, aşağı çekme direncinin GPIO'nun giriş kapasitanslarını toprak seviyesine kadar şarj etmesine / deşarj etmesine izin verir.
Bu devrenin püf noktası, anahtar açıkken girişin bir mantık yüksek seviyede tutulması için bir GPIO'nun çift yönlü yapısını kullanmaktır.
Kontrol rutini, pimi periyodik olarak yüksek bir seviye olarak açar veya kısa bir süre, kapakları şarj etmek için yeterince uzun bir şekilde çekmeye olanak sağlar. Giriş pimi daha sonra dinamik bir bellek biti gibi davranır ve çoğu cihazla bu şarjı önemli ve kullanılabilir bir süre boyunca tutar.
Düzgün yapılandırıldığında, düğmeye basıldığında pim üzerindeki şarj yenileme hızından daha hızlı boşalır. Bu durum daha sonra yenileme işleminden önce okunan bir yenileme algoritması parçası olarak algılanabilir veya bir kesme işlemini gerçekleştirmek için kullanılabilir.
Yenileme atımı sırasında güç, hem kapasitörleri hem de direnç aracılığıyla şarj etmek ve kapalıysa anahtarlamak için kısa bir süre kullanılır. Bununla birlikte, yenileme darbesinin uzunluğu kısadır ve yoklama frekansı, yenileme akımının nispeten önemsiz olmasına neden olur.
Açıkçası bu yöntem aktif bir yöntemdir. Mikro uykuya geçerse, şalterin durumu uyanma üzerinde belirsiz olacaktır. Uyandıktan sonraki ilk yenileme döngüsü, pim okumasını dikkate almamalıdır. Ayrıca, bu yöntem mikroyu uyandırmak için kullanılmamalıdır. Yatmadan önce, pimin sıfır akım durumunda park etmesini sağlamak için pimin alçak bir çıkış olarak etkinleştirilmesi akıllıca olacaktır.
Daha fazla statik şalter okumak için, kurulum dip şalterleri gibi, sürekli bir yenileme döngüsü yerine özel bir rutin kullanılabilir. Okuduktan sonra, GPIO pinleri değişken giriş sorununu önlemek için aktif düşük çıkış durumunda (sıfır akım) "park etmelidir".
NOT: İz uzunluğu uzunsa ve gürültülü bir alanda ilerliyorsa, bu teknik gürültü duyarlılığından biraz muzdariptir. Gibi R1 giriş pimine yakın olmalıdır. Bununla birlikte, pime yakın bir kapasitans eklemediğiniz sürece, ön paneldeki bir mesafeden uzaktaki bir düğmeyi bir yere asmak için tavsiye etmem.