วิธีการหนึ่งที่ฉันใช้ใช้ประโยชน์จากธรรมชาติของ capacitive ของอินพุต CMOS
จำลองวงจรนี้ - แผนผังที่สร้างโดยใช้CircuitLab
ในวงจรด้านบนสวิตช์เมื่อปิดจะช่วยให้ตัวต้านทานแบบดึงลงเพื่อชาร์จ / คายประจุความจุอินพุตของ GPIO ลงไปที่ระดับพื้นดิน
เคล็ดลับที่มีวงจรนี้คือการใช้ลักษณะสองทิศทางของ GPIO เพื่อให้การป้อนข้อมูลค่าใช้จ่ายในระดับสูงตรรกะเมื่อสวิตช์เปิด
รูทีนการควบคุมจะเปิดพินออกเป็นระยะ ๆ เป็นระดับสูงหรือเปิดใช้งานการดึงในเวลาสั้น ๆ นานพอที่จะรักษาประจุของแคป จากนั้นขาอินพุตจะทำหน้าที่เหมือนบิตหน่วยความจำแบบไดนามิกซึ่งอุปกรณ์ส่วนใหญ่จะเก็บประจุนั้นไว้เป็นระยะเวลานานพอสมควร
เมื่อกำหนดค่าอย่างเหมาะสมหากกดปุ่มการชาร์จบนพินจะคายประจุเร็วกว่าอัตราการรีเฟรช เงื่อนไขนั้นสามารถตรวจพบได้ในฐานะเป็นส่วนหนึ่งของอัลกอริทึมการรีเฟรชเหมือนอ่านก่อนการดำเนินการรีเฟรชหรือใช้เพื่อผลักดันการขัดจังหวะ
พลังงานจะใช้ช่วงสั้น ๆ ระหว่างพัลส์รีเฟรชทั้งเพื่อชาร์จตัวเก็บประจุและผ่านตัวต้านทานและสวิตช์หากปิด อย่างไรก็ตามความยาวของพัลส์รีเฟรชนั้นสั้นและความถี่ในการทำโพลจะส่งผลให้กระแสรีเฟรชนั้นไม่มีนัยสำคัญ
เห็นได้ชัดว่าวิธีนี้เป็นวิธีการที่ใช้งานอยู่ หากไมโครถูกสลีปโหมดสวิทช์จะไม่สามารถทำงานได้ รอบการรีเฟรชครั้งแรกหลังจากตื่นขึ้นต้องละเว้นการอ่านพิน นอกจากนี้วิธีนี้ไม่ควรใช้ในการปลุกไมโคร ก่อนเข้านอนก็ควรที่จะเปิดใช้งานพินเป็นเอาต์พุตต่ำเพื่อจอดไว้ในสถานะศูนย์เป็นศูนย์
สำหรับการอ่านสวิตช์แบบคงที่มากขึ้นเช่นการตั้งค่าสวิตช์ dip สามารถใช้รูทีนเฉพาะงานแทนวงจรการรีเฟรชอย่างต่อเนื่อง หลังจากอ่านแล้วหมุด GPIO ควร "จอดอยู่" ในสถานะเอาต์พุตต่ำที่ใช้งาน (ปัจจุบันเป็นศูนย์) เพื่อหลีกเลี่ยงปัญหาอินพุตแบบลอยตัว
หมายเหตุ: เทคนิคนี้จะได้รับความไวของเสียงเล็กน้อยหากความยาวการติดตามยาวและเคลื่อนที่ผ่านบริเวณที่มีเสียงดัง เช่น R1 ควรอยู่ใกล้กับขาอินพุต อย่างไรก็ตามฉันไม่แนะนำให้ใช้สวิทช์ในระยะห่างจากแผงด้านหน้าที่ไหนสักแห่งเว้นแต่คุณจะเพิ่มความจุพิเศษใกล้กับพิน