const int buttonPin = 2; // Pin ที่ใช้สำหรับปุ่มกด
const int ledPins[] = {6, 7, 8, 9, 10, 11, 12, 13}; // Pin ที่ใช้สำหรับ LED
const int numLeds = 8; // จำนวน LED
int buttonState = 0; // สถานะปุ่มกด
int lastButtonState = 0;
int pattern = 0; // Pattern ที่กำลังทำงานอยู่
unsigned long lastMillis = 0; // เก็บเวลาสำหรับการควบคุม LED
unsigned long interval = 50; // ระยะเวลาในการควบคุม LED (ปรับได้ตามความเหมาะสม)
void setup() {
for (int i = 0; i < numLeds; i++) {
pinMode(ledPins[i], OUTPUT); // กำหนด LED pins เป็น output
}
pinMode(buttonPin, INPUT_PULLUP); // กำหนด pin ปุ่มเป็น input พร้อม pull-up
}
void loop() {
unsigned long currentMillis = millis();
buttonState = digitalRead(buttonPin);
// ตรวจสอบการกดปุ่มเพื่อเปลี่ยน Pattern
if (buttonState == LOW && lastButtonState == HIGH) {
pattern = (pattern + 1) % 5; // เปลี่ยน Pattern โดยวนจาก 0 ถึง 4
}
lastButtonState = buttonState;
switch (pattern) {
case 0:
pattern1(currentMillis);
break;
case 1:
pattern2(currentMillis);
break;
case 2:
pattern3(currentMillis);
break;
case 3:
pattern4(currentMillis);
break;
case 4:
pattern5(currentMillis);
break;
}
}
void pattern1(unsigned long currentMillis) {
if (currentMillis - lastMillis >= interval) {
lastMillis = currentMillis;
static int ledIndex = 0;
// ปิด LED ก่อนหน้า
if (ledIndex > 0) {
digitalWrite(ledPins[ledIndex - 1], LOW);
}
// ติด LED ปัจจุบัน
digitalWrite(ledPins[ledIndex], HIGH);
ledIndex++;
if (ledIndex >= numLeds) {
ledIndex = 0;
}
}
}
void pattern2(unsigned long currentMillis) {
if (currentMillis - lastMillis >= interval) {
lastMillis = currentMillis;
static int ledIndex = numLeds - 1;
// ปิด LED ก่อนหน้า
if (ledIndex < numLeds - 1) {
digitalWrite(ledPins[ledIndex + 1], LOW);
}
// ติด LED ปัจจุบัน
digitalWrite(ledPins[ledIndex], HIGH);
ledIndex--;
if (ledIndex < 0) {
ledIndex = numLeds - 1;
}
}
}
void pattern3(unsigned long currentMillis) {
if (currentMillis - lastMillis >= interval) {
lastMillis = currentMillis;
static int ledIndexLeft = 0;
static int ledIndexRight = numLeds - 1;
// ปิด LED ก่อนหน้า
if (ledIndexLeft > 0) {
digitalWrite(ledPins[ledIndexLeft - 1], LOW);
}
if (ledIndexRight < numLeds - 1) {
digitalWrite(ledPins[ledIndexRight + 1], LOW);
}
// ติด LED ปัจจุบัน
digitalWrite(ledPins[ledIndexLeft], HIGH);
digitalWrite(ledPins[ledIndexRight], HIGH);
ledIndexLeft++;
ledIndexRight--;
if (ledIndexLeft >= numLeds || ledIndexRight < 0) {
ledIndexLeft = 0;
ledIndexRight = numLeds - 1;
}
}
}
void pattern4(unsigned long currentMillis) {
if (currentMillis - lastMillis >= interval) {
lastMillis = currentMillis;
static int ledIndexUp = 0;
static int ledIndexDown = numLeds - 1;
// ติด LED ขึ้น
if (ledIndexUp < numLeds) {
digitalWrite(ledPins[ledIndexUp], HIGH);
ledIndexUp++;
}
// ปิด LED ลง
if (ledIndexDown >= 0 && ledIndexUp == numLeds) {
digitalWrite(ledPins[ledIndexDown], LOW);
ledIndexDown--;
}
if (ledIndexDown < 0) {
ledIndexUp = 0;
ledIndexDown = numLeds - 1;
}
}
}
void pattern5(unsigned long currentMillis) {
if (currentMillis - lastMillis >= interval) {
lastMillis = currentMillis;
static bool state = false;
// สลับสถานะ LED ทั้งหมด
for (int i = 0; i < numLeds; i++) {
digitalWrite(ledPins[i], state ? HIGH : LOW);
}
state = !state;
}
}