#include <Arduino.h>
int LED0_Pin = 15;
int LED1_Pin = 14;
int LED2_Pin = 13;
int SW0_Pin = 12;
int led_state = 0; // 0 = ระบบเริ่มต้น, 1 = LED1 กำลังทำงาน, 2 = LED2 กำลังทำงาน
int dutyCycle0 = 0; // duty cycle สำหรับ LED0
int dutyCycle1_2 = 0; // duty cycle สำหรับ LED1 และ LED2
bool increasing0 = true; // ควบคุมทิศทางการกระพริบของ LED0
bool increasing1_2 = true; // ควบคุมทิศทางการกระพริบของ LED1 และ LED2
bool sw0_pressed = false;
void setup() {
pinMode(LED0_Pin, OUTPUT);
pinMode(LED1_Pin, OUTPUT);
pinMode(LED2_Pin, OUTPUT);
pinMode(SW0_Pin, INPUT_PULLUP);
Serial1.begin(115200); // สำหรับการดีบั๊ก
}
void loop() {
int sw0_state = digitalRead(SW0_Pin);
// ตรวจสอบการกดสวิตช์ SW0 เพื่อเปลี่ยนสถานะ LED
if (sw0_state == LOW && !sw0_pressed) {
delay(50); // ดีเลย์ป้องกันการกดปุ่มซ้ำ
sw0_pressed = true;
led_state++;
if (led_state > 2) {
led_state = 0; // รีเซ็ตสถานะเมื่อ LED2 เสร็จสิ้น
dutyCycle1_2 = 0;
increasing1_2 = true;
Serial1.println("System reset to LED1");
}
}
if (sw0_state == HIGH) {
sw0_pressed = false;
}
// การทำงานของ LED0 ที่กระพริบตลอดเวลา
if (increasing0) {
dutyCycle0 += 1; // เพิ่มค่า duty cycle ขึ้นทีละ 10
if (dutyCycle0 >= 255) {
increasing0 = false;
}
} else {
dutyCycle0 -= 1; // ลดค่า duty cycle ลงทีละ 10
if (dutyCycle0 <= 0) {
increasing0 = true;
}
}
analogWrite(LED0_Pin, dutyCycle0);
Serial1.print("LED0 dutyCycle: ");
Serial1.println(dutyCycle0);
// การทำงานของ LED1
if (led_state == 1) {
if (increasing1_2) {
dutyCycle1_2 += 5; // เพิ่มค่า duty cycle ขึ้นทีละ 5
if (dutyCycle1_2 >= 255) {
increasing1_2 = false;
}
} else {
dutyCycle1_2 -= 255; // ลดค่า duty cycle ลงทีละ 5
if (dutyCycle1_2 <= 0) {
increasing1_2 = true;
led_state = 2; // ย้ายไปยังสถานะถัดไปเมื่อ LED1 เสร็จสิ้น
dutyCycle1_2 = 0; // รีเซ็ตค่า dutyCycle สำหรับ LED2
Serial.println("LED1 completed, starting LED2");
}
}
analogWrite(LED1_Pin, dutyCycle1_2);
Serial1.print("LED1 dutyCycle: ");
Serial1.println(dutyCycle1_2);
} else {
analogWrite(LED1_Pin, 0); // ปิด LED1 เมื่อไม่ใช้งาน
}
// การทำงานของ LED2
if (led_state == 2) {
if (increasing1_2) {
dutyCycle1_2 += 5; // เพิ่มค่า duty cycle ขึ้นทีละ 5
if (dutyCycle1_2 >= 255) {
increasing1_2 = false;
}
} else {
dutyCycle1_2 -= 5; // ลดค่า duty cycle ลงทีละ 5 255 จะดับเลย
if (dutyCycle1_2 <= 0) {
led_state = 0; // รีเซ็ตกลับไปที่ LED0 หลังจาก LED2 เสร็จสิ้น
dutyCycle1_2 = 0; // รีเซ็ตค่า dutyCycle สำหรับ LED0
increasing1_2 = true;
Serial1.println("LED2 completed, resetting system");
}
}
analogWrite(LED2_Pin, dutyCycle1_2);
Serial1.print("LED2 dutyCycle: ");
Serial1.println(dutyCycle1_2);
} else {
analogWrite(LED2_Pin, 0); // ปิด LED2 เมื่อไม่ใช้งาน
}
delay(10); // ลดดีเลย์เพื่อให้การกระพริบเร็วขึ้น
}