Analog Multiplexing: 10 ปุ่มบน 1 พิน Interrupt
Arduino Uno มีพินดิจิทัลที่จำกัดอย่างมาก หากคุณต่อสายปุ่มกด 10 ปุ่มด้วยวิธีการมาตรฐาน คุณจะใช้สาย IO ทั้งหมด 10 เส้นจนหมดทันที ทำให้ไม่มีพื้นที่เหลือสำหรับ LCD, อุปกรณ์ SPI หรือ Relays เลย! เทคนิค 10 Buttons Using 1 Interrupt ใช้การมัลติเพล็กซ์แบบแอนะล็อก 'Resistor Ladder' ขั้นสูง ผสมผสานกับฮาร์ดแวร์เกตอันชาญฉลาด โดยบังคับให้ปุ่มทั้ง 10 ปุ่มทำงานผ่านพิน Analog Input เพียงเส้นเดียว (A0) ขณะเดียวกันก็ต่อสายทริกเกอร์หลักเข้ากับ Hardware Interrupt Pin 2 โดยตรง ทำให้การใช้พินลดลงจากสิบเส้นเหลือเพียงแค่ สอง เส้น!

Resistor Ladder Matrix (analogRead())
แทนที่จะให้แต่ละปุ่มรับแรงดัน 5V ปุ่มเหล่านี้จะถูกต่ออนุกรมผ่าน Resistors ที่มีค่าต่างกัน (เช่น 1K, 2K, 3K, 4K...)
- เมื่อกดปุ่ม 1 สัญญาณจะผ่าน Resistors ทั้งหมดไป ส่ง 5V
(Analog 1023)เข้าสู่พิน A0 โดยตรง - เมื่อกดปุ่ม 5 กระแสจะไหลผ่าน 4,000 โอห์ม ทำให้ส่ง 2.5V
(Analog 512)ไปยังพิน A0 อย่างแม่นยำ - Arduino จะเปรียบเทียบค่าแรงดันที่เข้ามากับอาร์เรย์ทางคณิตศาสตร์ที่กำหนดไว้ เพื่อระบุว่ากดปุ่มใดกันแน่ โดยใช้เพียงพินเดียว!
ทริกเกอร์ Hardware Interrupt ขั้นสูงสุด
หาก Arduino เพียงแค่รัน analogRead(A0) ใน loop() มันจะสิ้นเปลือง Clock Cycles จำนวนมากไปกับการ Poll ปุ่มที่ไม่ได้ใช้งาน
- มีการสร้างเมทริกซ์ลอจิก Diode OR Gate ขึ้น!
- เอาต์พุตของปุ่มทุกปุ่มยังถูกต่อผ่าน Diode (เพื่อป้องกัน Backfeed) ตรงไปยัง Digital Pin 2
- เมื่อ ใด ๆ กระแสจะไหลไปยัง Analog Pin เพื่อวัดค่า แต่ในขณะเดียวกันก็ทริกเกอร์ Hardware Interrupt บน Pin 2!
void setup() {
// รอจนกว่าฮาร์ดแวร์จะตรวจพบแรงดันที่พุ่งขึ้น!
attachInterrupt(digitalPinToInterrupt(2), buttonWakeISR, RISING);
}
void buttonWakeISR() {
int rawAnalog = analogRead(A0); // ดึงค่าแรงดันมาทันที!
if (rawAnalog > 950) targetButton = 1;
else if (rawAnalog > 800) targetButton = 2;
// ... การอนุมานค่าแรงดันเป็นลำดับขั้นขนาดใหญ่!
actionRequired = true; // ส่งสัญญาณให้ Loop ทำงานหลัก!
}
ฮาร์ดแวร์วงจรแบบบีบอัด
- Arduino Uno / Nano / Pro Mini
- ปุ่มกด Tactile จำนวน 10 ปุ่ม
- Resistors ที่มีความแม่นยำสูง 1% Tolerance จำนวนมาก (เช่น 1K โอห์ม) Resistors ทั่วไปที่มี 5% Tolerance อาจทำให้ค่าแรงดันคาบเกี่ยวกันอย่างมาก สร้างการชนกันของลอจิกที่เป็นไปไม่ได้ ซึ่งทำให้ปุ่ม 6 ดูเหมือนกับปุ่ม 7 ได้!
- Switching Diodes (1N4148) จำนวน 10 ตัว (มีความสำคัญอย่างยิ่งในการสร้าง Master Trigger Bus โดยไม่ทำให้ค่า Resistor Ladder ลัดวงจรเข้าด้วยกัน!)