ตัวอย่างโปรแกรม:

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.

Simulate: https://www.tinkercad.com/things/i0Z4kTUCZBd/viewel?sharecode=nlPiSXbCrzx2q10g-CWTWcG50bqXIPNvvHBPF7I7afk