// LED class
class Flasher {
int ledPin; // หมายเลขขาของ LED
long OnTime; // เวลาที่ LED ติด (มิลลิวินาที)
long OffTime; // เวลาที่ LED ดับ (มิลลิวินาที)
int ledState; // สถานะปัจจุบันของ LED (HIGH หรือ LOW)
unsigned long previousMillis; // เวลาที่บันทึกการเปลี่ยนสถานะล่าสุด
public:
// Constructor
Flasher(int pin, long on, long off) {
ledPin = pin;
pinMode(ledPin, OUTPUT); // กำหนดขา LED เป็นขา OUTPUT
OnTime = on;
OffTime = off;
ledState = LOW;
previousMillis = 0;
}
// ฟังก์ชันอัปเดตสถานะของ LED
void Update() {
unsigned long currentMillis = millis(); // อ่านเวลาปัจจุบัน
// ตรวจสอบว่าถึงเวลาที่ต้องเปลี่ยนสถานะหรือไม่
if ((ledState == HIGH) && (currentMillis - previousMillis >= OnTime)) {
ledState = LOW; // ปิด LED
previousMillis = currentMillis; // บันทึกเวลาปัจจุบัน
digitalWrite(ledPin, ledState); // อัปเดตสถานะของ LED จริง ๆ
}
else if ((ledState == LOW) && (currentMillis - previousMillis >= OffTime)) {
ledState = HIGH; // เปิด LED
previousMillis = currentMillis; // บันทึกเวลาปัจจุบัน
digitalWrite(ledPin, ledState); // อัปเดตสถานะของ LED จริง ๆ
}
}
};
// กำหนดอ็อบเจ็กต์ Flasher สำหรับ LED 2 ตัว
Flasher led1(5, 100, 400);
Flasher led2(6, 350, 350);
Flasher led3(7, 400, 450);
Flasher led4(8, 500, 500);
void setup() {
// ไม่มีการตั้งค่าเพิ่มเติมใน setup
}
void loop() {
led1.Update(); // อัปเดตสถานะของ LED 1
led2.Update(); // อัปเดตสถานะของ LED 2
led3.Update(); // อัปเดตสถานะของ LED 1
led4.Update(); // อัปเดตสถานะของ LED 2
}