// กำหนดขาที่ต่อกับ LED
int ledPins[] = {15, 2, 4, 16, 17, 5, 18, 19};
int numLeds = sizeof(ledPins) / sizeof(ledPins[0]); // จำนวน LED ที่ใช้
void setup() {
// ตั้งค่าขา LED ทั้งหมดให้เป็นขาออก (OUTPUT)
for (int i = 0; i < numLeds; i++) {
pinMode(ledPins[i], OUTPUT);
digitalWrite(ledPins[i], LOW); // ปิด LED ทั้งหมดในตอนเริ่มต้น
}
}
void loop() {
// วนลูปเปิด LED ทีละดวงและปิดทีละดวง (วิ่งไปข้างหน้า)
for (int i = 0; i < numLeds; i++) {
digitalWrite(ledPins[i], HIGH); // เปิด LED ที่ตำแหน่ง i
delay(200); // หน่วงเวลา 200ms เพื่อให้เห็นการเปลี่ยนแปลง
digitalWrite(ledPins[i], LOW); // ปิด LED ที่ตำแหน่ง i
}
// วนลูปเปิด LED ทีละดวงและปิดทีละดวง (วิ่งกลับ)
for (int i = numLeds - 1; i >= 0; i--) {
digitalWrite(ledPins[i], HIGH); // เปิด LED ที่ตำแหน่ง i
delay(200); // หน่วงเวลา 200ms เพื่อให้เห็นการเปลี่ยนแปลง
digitalWrite(ledPins[i], LOW); // ปิด LED ที่ตำแหน่ง i
}
// รูปแบบที่ 3: วิ่งสวนกัน (จากข้างนอกเข้าหากัน)
for (int i = 0; i < numLeds / 2; i++) {
digitalWrite(ledPins[i], HIGH); // เปิด LED ที่ตำแหน่งจากด้านซ้าย
digitalWrite(ledPins[numLeds - 1 - i], HIGH); // เปิด LED ที่ตำแหน่งจากด้านขวา
delay(200); // หน่วงเวลา 200ms
digitalWrite(ledPins[i], LOW); // ปิด LED ที่ตำแหน่งจากด้านซ้าย
digitalWrite(ledPins[numLeds - 1 - i], LOW); // ปิด LED ที่ตำแหน่งจากด้านขวา
}
}
/*เพื่อเพิ่มรูปแบบที่ 3 ซึ่งทำให้ LED วิ่งสวนกันได้ (คือ LED ที่ขาแรกและขาสุดท้ายวิ่งเข้าหากันจนเจอกลาง) คุณสามารถเพิ่มลูปที่ทำให้ LED สองข้างเปิดพร้อมกันโดยวิ่งเข้าหากัน
อธิบายเพิ่มเติม
วิ่งไปข้างหน้า (เช่นเดียวกับโค้ดเดิม)
ใช้ลูป for (int i = 0; i < numLeds; i++) เพื่อเปิด LED ทีละดวงจากซ้ายไปขวา
วิ่งกลับ
ใช้ลูป for (int i = numLeds - 1; i >= 0; i--) เพื่อเปิด LED ทีละดวงจากขวากลับซ้าย
วิ่งสวนกัน
เพิ่มลูปที่ทำงานจากด้านนอกเข้าหากัน โดย for (int i = 0; i < numLeds / 2; i++) ใช้คู่ขา LED จากซ้ายและขวาพร้อมกัน
digitalWrite(ledPins[i], HIGH) จะเปิด LED ที่ตำแหน่งซ้าย และ digitalWrite(ledPins[numLeds - 1 - i], HIGH) จะเปิด LED ที่ตำแหน่งขวา
LED ทั้งสองข้างจะเปิดพร้อมกันและค่อย ๆ เข้าหากันตรงกลาง
เมื่อใช้โค้ดนี้ คุณจะเห็นการทำงานของ LED ใน 3 รูปแบบ:
วิ่งจากซ้ายไปขวา
วิ่งจากขวากลับซ้าย
วิ่งสวนกันจากข้างนอกเข้าหากัน
*/