
ตัวอย่างโปรแกรม:
C++
const int buttonPin[] = {2,3,4,5,6};
const int ledPin[] = {12,11,10,9,8};
void setup() {
Serial.begin(115200);
for (int i=0;i<5;i++){
pinMode(ledPin[i], OUTPUT);
pinMode(buttonPin[i], INPUT_PULLUP);
}
}
void loop() {
for (int i=0;i<5;i++){
int buttonState = digitalRead(buttonPin[i]);
if (buttonState == LOW) {
digitalWrite(ledPin[i], HIGH); // Turn LED on
} else {
digitalWrite(ledPin[i], LOW); // Turn LED off
}
}
}โปรแกรมนี้ทำงานโดยใช้ไมโครคอนโทรลเลอร์ Arduino หรือสามารถนำไปใช้กับบอร์ดที่รองรับ Arduino เช่น ESP32, Raspberry Pi Pico (ผ่าน Arduino IDE) ได้เช่นกัน. โปรแกรมจะควบคุม LED ทั้งหมด 5 ดวง ให้เชื่อมต่อกับปุ่มกด 5 ตัว โดยแต่ละปุ่มควบคุม LED ของตัวเอง โดยหลักการทำงานมีดังนี้
หลักการทำงาน
- กำหนดพินของปุ่มกดไว้ในอาร์เรย์
buttonPin[] = {2,3,4,5,6}และพินของ LED ไว้ในอาร์เรย์ledPin[] = {12,11,10,9,8}. - ฟังก์ชัน
setup()ทำงานแค่ครั้งเดียวตอนเริ่ม จะกำหนดพิน LED เป็น OUTPUT และพินของปุ่มกดเป็น INPUT_PULLUP. - ฟังก์ชัน
loop()จะวนซ้ำตลอด ในแต่ละรอบจะอ่านค่าสถานะของปุ่มทั้งหมด 5 ปุ่ม โดยใช้ลูป for - ถ้าปุ่มใดถูกกด (อ่านค่าเป็น LOW) จะเปิด LED ดวงที่สัมพันธ์กับปุ่มนั้น (digitalWrite(ledPin[i], HIGH)) ถ้าปุ่มไม่ได้กด (อ่านค่าเป็น HIGH) จะปิด LED ดวงนั้น (digitalWrite(ledPin[i], LOW)).
- มีคำสั่ง delay(100) เพื่อให้วนลูปใหม่ทุก 100 ms.
สรุปการทำงานแต่ละส่วน
| ส่วนของโปรแกรม | รายละเอียด |
|---|---|
| กำหนดพิน | ใช้แยกปุ่มกด (input) และ LED (output) ผ่านอาร์เรย์ |
| setup() | ตั้งโหมดพิน LED เป็น OUTPUT, ปุ่มเป็น INPUT_PULLUP |
| loop() | ตรวจสอบปุ่มทั้ง 5 ถ้ากดให้ LED ติด ไม่กด LED ดับ วนซ้ำตลอด |
| delay(100) | หน่วงเวลา 100 ms |
ข้อสังเกต
- ใช้ INPUT_PULLUP ทำให้ปุ่มกดเชื่อมกับ GND เมื่อกดจะมีค่าต่ำ (LOW) ช่วยลดการใช้ตัวต้านทานภายนอก
- ไฟ LED และปุ่มกดขนานกัน ทำงานสัมพันธ์กันแต่ละคู่
กล่าวโดยสรุป: โปรแกรมนี้ใช้ลูปตรวจเช็คสถานะปุ่ม ถ้ากดปุ่ม(LOW) จะเปิด LED ถ้าไม่กด(HIGH) จะปิด LED โดยใช้การวนรอบที่เรียบง่ายและโครงสร้าง Array กับ for loop.
