วิธีอ่านค่าสวิตซ์ด้วย digitalRead() บน Arduino
วิธีอ่านค่าสวิตซ์ด้วย digitalRead() บน Arduino
บทเรียนนี้จะสอนวิธีต่อสวิตซ์เข้ากับ Arduino และเขียนโค้ดให้ตรวจจับว่าสวิตซ์ถูกกดหรือไม่ ฝึกใช้คำสั่ง digitalRead() ซึ่งเป็นพื้นฐานสำคัญในการทำโปรเจกต์ Arduino เกือบทุกตัว
หลักการของ digitalRead()
Arduino มีขาดิจิทัลที่สามารถตั้งค่าเป็นอินพุตหรือเอาต์พุตได้ เมื่อตั้งค่าเป็นอินพุต จะใช้คำสั่ง digitalRead(ชื่อขา) เพื่อตรวจสอบว่าขานั้นมีไฟหรือไม่
ค่าที่ได้กลับมามี 2 แบบ:
- HIGH → มีไฟ (แรงดันประมาณ 5V)
- LOW → ไม่มีไฟ (แรงดัน 0V)
วงจร Pull-down พื้นฐาน
สวิตซ์แบบปกติเปิด (Normally Open) จะไม่ยืนยันสถานะเมื่อไม่ถูกกด ทำให้ขาอินพุตลอยไม่มีค่าชัดเจน วิธีแก้คือต่อ Pull-down Resistor ดังนี้
วิธีต่อ:
- ขาหนึ่งของสวิตซ์ต่อกับไฟ 5V
- ขาอีกขาหนึ่งต่อกับขา Arduino (เช่น D2)
- ต่อ Resistor 10kΩ ระหว่างขา Arduino กับ GND (เป็น Pull-down)
การทำงาน:
- ไม่กดสวิตซ์ → กระแสไหลผ่าน Resistor ลงกราวด์ → อ่านได้ LOW
- กดสวิตซ์ → ไฟ 5V ไหลเข้าขา Arduino → อ่านได้ HIGH
โค้ดอ่านค่าสวิตซ์ควบคุม LED
// กำหนดขาที่ใช้
const int buttonPin = 2; // ขาต่อสวิตซ์
const int ledPin = 9; // ขาต่อ LED
// ตัวแปรเก็บสถานะสวิตซ์
int buttonState = 0;
void setup() {
// เริ่ม Serial Monitor สำหรับดูผลลัพธ์
Serial.begin(9600);
// ตั้งค่าขา LED เป็นเอาต์พุต
pinMode(ledPin, OUTPUT);
// ตั้งค่าขาสวิตซ์เป็นอินพุต
pinMode(buttonPin, INPUT);
}
void loop() {
// อ่านค่าจากขาสวิตซ์
buttonState = digitalRead(buttonPin);
// ตรวจสอบว่าสถานะเป็น HIGH หรือไม่
if (buttonState == HIGH) {
// เมื่อกดสวิตซ์ → LED ติด
Serial.println("LED ON");
digitalWrite(ledPin, HIGH);
} else {
// เมื่อปล่อยสวิตซ์ → LED ดับ
Serial.println("LED OFF");
digitalWrite(ledPin, LOW);
}
}
สิ่งที่โค้ดทำ:
- อ่านค่าจากขา D2 ตลอดเวลาด้วย
digitalRead() - ถ้าได้ค่า HIGH (กดสวิตซ์) → สั่ง LED ติด
- ถ้าได้ค่า LOW (ปล่อยสวิตซ์) → สั่ง LED ดับ
- พิมพ์สถานะออก Serial Monitor เพื่อตรวจสอบ
จุดที่ต้องปรับตามโปรเจกต์จริง
| จุดปรับ | ค่าเดิม | ปรับได้ตามต้องการ |
|---|---|---|
| ขาสวิตซ์ | 2 | เปลี่ยนเป็นขาอื่นที่ว่าง |
| ขา LED | 9 | ต่อ LED ขาอื่นหรือเปลี่ยนเป็น Relay, Buzzer |
| ขั้วต่อสวิตซ์ | Pull-down | เปลี่ยนเป็น Pull-up ถ้าต้องการ logic ตรงข้าม |
ทดสอบด้วย Serial Monitor
หลังอัพโค้ดขึ้นบอร์ดแล้ว เปิด Serial Monitor (115200 baud) จะเห็นข้อความเปลี่ยนทุกครั้งที่กดหรือปล่อยสวิตซ์ ใช้ตรวจสอบว่า Arduino อ่านค่าถูกต้อง
สรุป
digitalRead() เป็นคำสั่งพื้นฐานที่ต้องเข้าใจก่อนทำโปรเจกต์ Arduino ที่ต้องรับอินพุตจากสวิตซ์ เซ็นเซอร์ หรือสวิตช์อื่น ๆ จำหลักการ Pull-down/Pull-up และวิธีใช้งานในโค้ดได้ ก็นำไปต่อยอดโปรเจกต์ได้หลายแบบ
วิดีโออ้างอิง
อยากทำโปรเจคแบบนี้?
รับทำโปรเจค Arduino / IoT จบงานไว ส่งงานครบ พร้อมสอน
หากต้องการ รับทำโปรเจคอาดูโน่ หรือระบบ IoT แบบเร่งด่วน สามารถดูรายละเอียดบริการได้ที่หน้าแรก
จ้างทำโปรเจคเลย