#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // กำหนดที่อยู่ LCD
const int buttonPin = 2; // พินสำหรับสวิตช์
const int relayPin = 3; // พินสำหรับรีเลย์
unsigned long countdownTime = 0;
unsigned long startTime = 0;
unsigned long elapsedTime = 0;
bool running = false;
bool paused = false;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
pinMode(relayPin, OUTPUT);
lcd.init();
lcd.backlight();
lcd.print("Press button");
lcd.setCursor(4, 1);
lcd.print("Relay OFF");
}
void loop() {
static unsigned long lastButtonPress = 0;
static unsigned long previousTime = 0; // ตัวแปรเก็บเวลาเดิมที่จะแสดงบน LCD เพื่อป้องกันการรีเฟรชซ้ำ
if (digitalRead(buttonPin) == LOW) {
unsigned long currentTime = millis();
if (currentTime - lastButtonPress > 300) {
lastButtonPress = currentTime;
if (!running) {
// เริ่มนับถอยหลัง
countdownTime = 10 * 60000; // ตั้งค่าเวลา 5 นาที (5*60*1000 ms)
startTime = millis();
running = true;
paused = false;
digitalWrite(relayPin, HIGH);
lcd.clear();
lcd.setCursor(4, 1);
lcd.print("Relay ON ");
} else if (running && !paused) {
// หยุดนับเวลา
paused = true;
elapsedTime = millis() - startTime;
digitalWrite(relayPin, LOW);
lcd.setCursor(4, 1);
lcd.print("Relay OFF");
} else if (running && paused) {
// นับถอยหลังต่อ
paused = false;
startTime = millis() - elapsedTime;
digitalWrite(relayPin, HIGH);
lcd.setCursor(4, 1);
lcd.print("Relay ON ");
}
}
}
if (running && !paused) {
unsigned long remainingTime = countdownTime - (millis() - startTime);
// เช็คหากเวลาหมด
if (remainingTime <= 0) {
digitalWrite(relayPin, LOW);
running = false;
lcd.clear();
lcd.setCursor(6, 0);
lcd.print("00:00");
lcd.setCursor(4, 1);
lcd.print("Relay OFF"); // แสดงข้อความเมื่อเวลาหมดTime's up!
lcd.setCursor(0, 0);
lcd.print("Press button");
} else {
// แสดงผลเวลาที่เหลือเฉพาะเมื่อเวลามีการเปลี่ยนแปลง
if (remainingTime / 1000 != previousTime) {
previousTime = remainingTime / 1000; // อัปเดตค่าเวลาเดิม
displayTime(remainingTime / 1000);
}
}
}
}
void displayTime(unsigned long seconds) {
int minutes = seconds / 60;
seconds = seconds % 60;
lcd.setCursor(0, 0);
lcd.print("Time: ");
if (minutes < 10) lcd.print("0");
lcd.print(minutes);
lcd.print(":");
if (seconds < 10) lcd.print("0");
lcd.print(seconds);
}