// กำหนดพินสำหรับ LED และ Switch
const int led1Pin = 5; // LED1 ต่อที่ GPIO 5
const int led2Pin = 6; // LED2 ต่อที่ GPIO 6
const int sw1Pin = 7; // SW1 ต่อที่ GPIO 7
const int sw2Pin = 8; // SW2 ต่อที่ GPIO 8
volatile bool sw1Pressed = false; // ใช้กับ Interrupt ของ SW1
volatile bool sw2Pressed = false; // ใช้กับ Interrupt ของ SW2
int fadeStep = 5; // กำหนดความเร็วในการหรี่
int brightness1 = 255; // ความสว่างของ LED1 เริ่มที่ 100%
int brightness2 = 255; // ความสว่างของ LED2 เริ่มที่ 100%
int led1Rounds = 0; // ตัวนับรอบของ LED1
int led2Rounds = 0; // ตัวนับรอบของ LED2
bool fading1 = false; // สถานะการหรี่ของ LED1
bool fading2 = false; // สถานะการหรี่ของ LED2
void setup() {
// ตั้งค่าพินสำหรับ LED เป็น OUTPUT
pinMode(led1Pin, OUTPUT);
pinMode(led2Pin, OUTPUT);
// ตั้งค่าพินสำหรับสวิตช์เป็น INPUT_PULLUP
pinMode(sw1Pin, INPUT_PULLUP);
pinMode(sw2Pin, INPUT_PULLUP);
// เปิดการ Interrupt เมื่อกดสวิตช์
attachInterrupt(digitalPinToInterrupt(sw1Pin), handleSW1Press, FALLING);
attachInterrupt(digitalPinToInterrupt(sw2Pin), handleSW2Press, FALLING);
// ตั้งค่า LED ทั้งสองดวงให้สว่าง 100% (PWM 255)
analogWrite(led1Pin, 255);
analogWrite(led2Pin, 255);
}
void loop() {
// ตรวจสอบการหรี่ของ LED1
if (fading1) {
if (brightness1 > 0) {
brightness1 -= fadeStep;
if (brightness1 < 0) brightness1 = 0;
analogWrite(led1Pin, brightness1);
delay(30);
} else {
led1Rounds++;
if (led1Rounds >= 2) {
fading1 = false;
led1Rounds = 0;
brightness1 = 255; // ติดสว่าง 100% กลับมา
analogWrite(led1Pin, brightness1);
} else {
brightness1 = 255; // หรี่ใหม่อีกครั้ง
analogWrite(led1Pin, brightness1);
delay(100); // รอเล็กน้อยก่อนหรี่ใหม่
}
}
}
// ตรวจสอบการหรี่ของ LED2
if (fading2) {
if (brightness2 > 0) {
brightness2 -= fadeStep;
if (brightness2 < 0) brightness2 = 0;
analogWrite(led2Pin, brightness2);
delay(30);
} else {
led2Rounds++;
if (led2Rounds >= 3) {
fading2 = false;
led2Rounds = 0;
brightness2 = 255; // ติดสว่าง 100% กลับมา
analogWrite(led2Pin, brightness2);
} else {
brightness2 = 255; // หรี่ใหม่อีกครั้ง
analogWrite(led2Pin, brightness2);
delay(100); // รอเล็กน้อยก่อนหรี่ใหม่
}
}
}
}
// ฟังก์ชันจัดการการกด SW1
void handleSW1Press() {
if (!fading1) {
fading1 = true; // เริ่มหรี่ LED1
brightness1 = 255; // เริ่มต้นที่สว่าง 100%
led1Rounds = 0; // เริ่มนับรอบ
}
}
// ฟังก์ชันจัดการการกด SW2
void handleSW2Press() {
if (!fading2) {
fading2 = true; // เริ่มหรี่ LED2
brightness2 = 255; // เริ่มต้นที่สว่าง 100%
led2Rounds = 0; // เริ่มนับรอบ
}
}