#define LED_1_PIN 13
#define LED_2_PIN 12
#define LED_3_PIN 11
#define LED_4_PIN 10
#define LED_5_PIN 9 //เพิ่มมา
#define BUTTON_PIN 5
class Led {
private:
byte pin;
public:
Led(byte pin) {
// ใช้ 'this->' เพื่อแยกความแตกต่างระหว่าง
// 'pin' ที่เป็นแอตทริบิวต์ของคลาสและ
// ตัวแปร 'pin' ที่ถูกสร้างขึ้นจากพารามิเตอร์
this->pin = pin;
init();
}
void init() {
pinMode(pin, OUTPUT);
// พยายามหลีกเลี่ยงการเขียนโค้ดซ้ำ
// แทนที่การเขียน digitalWrite(pin, LOW) ที่นี่
// เรียกใช้ฟังก์ชัน off() ซึ่งทำเช่นนั้นแล้ว
off();
}
void on() {
digitalWrite(pin, HIGH);
}
void off() {
digitalWrite(pin, LOW);
}
}; // อย่าลืมเครื่องหมายจุลภาคที่สิ้นสุดคลาส
class Button {
private:
byte pin;
byte state;
byte lastReading;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
public:
Button(byte pin) {
this->pin = pin;
lastReading = LOW;
init();
}
void init() {
pinMode(pin, INPUT);
update();
}
void update() {
// คุณสามารถจัดการปัญหา debounce ของปุ่มได้โดยตรง
// ในคลาสเพื่อไม่ต้องคิดถึงมัน
// ที่อื่นในโค้ดของคุณ
byte newReading = digitalRead(pin);
if (newReading != lastReading) {
lastDebounceTime = millis();
}
if (millis() - lastDebounceTime > debounceDelay) {
// อัพเดตแอตทริบิวต์ 'state' เฉพาะเมื่อตรวจสอบการ debounce
state = newReading;
}
lastReading = newReading;
}
byte getState() {
update();
return state;
}
bool isPressed() {
return (getState() == HIGH);
}
}; // อย่าลืมเครื่องหมายจุลภาคที่สิ้นสุดคลาส
class LedController {
private:
Led led1;
Led led2;
Led led3;
Led led4;
Led led5;
Button& button;
public:
LedController(Led& l1, Led& l2, Led& l3, Led& l4, Led& l5, Button& btn) :
led1(l1), led2(l2), led3(l3), led4(l4), led5(l5), button(btn) {
}
void checkButtonAndControl() {
led1.on();
led2.on();
led5.off();
delay(1000);
led3.on();
led1.off();
delay(1000);
led4.on();
led2.off();
delay(1000);
led5.on();
led3.off();
delay(1000);
led1.on();
led4.off();
delay(1000);
}
void ledoff(){
led1.off();
led2.off();
led3.off();
led4.off();
led5.off();
}
};
// สร้างวัตถุในขอบเขตโกลบอลเพื่อให้คุณสามารถ
// เข้าถึงได้ในฟังก์ชัน setup() และ loop() functions
Led led1(LED_1_PIN);
Led led2(LED_2_PIN);
Led led3(LED_3_PIN);
Led led4(LED_4_PIN);
Led led5(LED_5_PIN);
Button button1(BUTTON_PIN);
LedController ledController(led1, led2, led3, led4, led5, button1);
void setup() { }
void loop() {
if (button1.isPressed()) {
ledController.checkButtonAndControl();
} else {
ledController.ledoff();
}
}