3.9. สวิตช์และตัวต้านทานดึง

GPIO output ขับเคลื่อนฮาร์ดแวร์ภายนอก GPIO input คือสิ่งตรงข้าม: กล้องอ่านแรงดันไฟฟ้าบนพินและรายงานเป็น 0 หรือ 1 อุปกรณ์ input ที่ง่ายที่สุดคือสวิตช์ -- และการทำให้สามารถอ่านได้อย่างน่าเชื่อถือต้องการอิเล็กทรอนิกส์หนึ่งชิ้นเพิ่มเติมนอกจากตัวสวิตช์เอง

3.9.1. สวิตช์และ input ที่ลอยตัว

สวิตช์คือหน้าสัมผัสทางกล: โลหะสองชิ้นที่สัมผัสกันเมื่อสวิตช์ปิดและแยกออกเมื่อเปิด ในทางไฟฟ้าคืออุปกรณ์ทั้งหมด ไม่มีแหล่งแรงดันไฟฟ้าอยู่ภายใน สวิตช์เพียงอย่างเดียวให้เพียง "เชื่อมต่อ" หรือ "ตัดการเชื่อมต่อ"

การต่อสายสวิตช์โดยตรงระหว่างพิน GPIO และกราวด์หมายความว่าพินนั้น:

  • ที่ 0 V เมื่อสวิตช์ปิด (ถูกต่อสายกับกราวด์แล้ว)

  • ลอยตัว เมื่อสวิตช์เปิด (ถูกต่อกับอะไรก็ไม่ได้)

พินที่ลอยตัวไม่มีแรงดันไฟฟ้าที่กำหนด การอ่าน input จะอ่านค่าใดก็ตามที่อยู่ใกล้เคียง -- การรบกวนจากสัญญาณใกล้เคียง สัญญาณรบกวนจากแหล่งจ่ายไฟ แม้แต่ไฟฟ้าสถิตจากนิ้วมือที่อยู่ใกล้สาย value() ส่งคืนการผสมของ 0 และ 1 ที่คาดเดาไม่ได้หลายครั้งต่อวินาที

3.9.2. ตัวต้านทานดึงขึ้นและดึงลง

วิธีแก้ไขคือตัวต้านทานดึง: ตัวต้านทานที่มีค่าสูง (10 kΩ ถึง 100 kΩ เป็นค่าทั่วไป) ที่ยึด input กับราวที่รู้จักเมื่อสวิตช์เปิด

Two circuit diagrams side by side. Left: a pull-up circuit with a resistor from the input pin up to the supply and a switch from the input pin down to GND. Right: a pull-down circuit with a resistor from the input pin down to GND and a switch from the input pin up to the supply.

การกำหนดค่าดึงขึ้น (ซ้าย) และดึงลง (ขวา) สำหรับการ input ของสวิตช์

  • ดึงขึ้น. ตัวต้านทานยึด input กับราวแหล่งจ่ายไฟ เมื่อสวิตช์เปิด กระแสเล็กน้อยจะไหลผ่านตัวต้านทานและพินอ่านค่าสูง เมื่อสวิตช์ปิด มันจะลัดวงจรพินไปยังกราวด์; พินอ่านค่าต่ำ ตัวต้านทานจำกัดกระแสที่จะไหลจากแหล่งจ่ายไฟไปยังกราวด์ผ่านสวิตช์ที่ปิด

  • ดึงลง. ภาพสะท้อน: ตัวต้านทานยึด input กับกราวด์ และสวิตช์เชื่อมต่อกับแหล่งจ่ายไฟ เปิดอ่านค่าต่ำ ปิดอ่านค่าสูง

การดึงขึ้นเป็นแนวทางที่พบบ่อยกว่า -- ปุ่ม "active low" MCU เองมีตัวต้านทานดึงขึ้นและดึงลงในตัวที่สามารถเปิดใช้งานได้ด้วย Pin.PULL_UP หรือ Pin.PULL_DOWN ซึ่งลบตัวต้านทานภายนอกออกทั้งหมด