#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal_I2C.h>
RTC_DS1307 rtc;
LiquidCrystal_I2C lcd(0x27, 20, 4); // Vérifie l'adresse si écran vide
const int buttonUp = 4;
const int buttonDown = 7;
const int buttonOK = 8;
const int ledPin = 13;
int timerSeconds = 10; // valeur initiale
bool timerRunning = false;
unsigned long timerStart = 0;
unsigned long timerDuration = 0;
void setup() {
//Serial.begin(9600);
Wire.begin();
rtc.begin();
lcd.init();
lcd.backlight();
if (!rtc.isrunning()) {
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
pinMode(ledPin, OUTPUT);
pinMode(buttonUp, INPUT_PULLUP);
pinMode(buttonDown, INPUT_PULLUP);
pinMode(buttonOK, INPUT_PULLUP);
lcd.setCursor(0, 0);
lcd.print("Regler minuterie:");
}
void loop() {
DateTime now = rtc.now();
// Afficher heure en temps réel
lcd.setCursor(0, 1);
lcd.print("Heure: ");
printTimeLCD(now);
if (!timerRunning) {
handleButtons();
lcd.setCursor(0, 2);
lcd.print("Duree: ");
lcd.print(timerSeconds);
lcd.print("s ");
}
if (timerRunning) {
unsigned long elapsed = millis() - timerStart;
long remaining = (timerDuration - elapsed) / 1000;
if (remaining < 0) remaining = 0;
lcd.setCursor(0, 3);
lcd.print("Reste: ");
lcd.print(remaining);
lcd.print("s ");
if (elapsed >= timerDuration) {
digitalWrite(ledPin, LOW);
timerRunning = false;
lcd.setCursor(0, 2);
lcd.print("Minuterie terminee ");
}
}
delay(200); // évite le rebond + clignotements
}
void handleButtons() {
static unsigned long lastPress = 0;
if (millis() - lastPress < 200) return; // debounce
if (digitalRead(buttonUp) == LOW) {
timerSeconds += 1;
if (timerSeconds > 600) timerSeconds = 600; // max 10 min
lastPress = millis();
}
if (digitalRead(buttonDown) == LOW) {
timerSeconds -= 1;
if (timerSeconds < 1) timerSeconds = 1;
lastPress = millis();
}
if (digitalRead(buttonOK) == LOW) {
timerDuration = timerSeconds * 1000UL;
timerStart = millis();
timerRunning = true;
digitalWrite(ledPin, HIGH);
lcd.setCursor(0, 2);
lcd.print("Minuterie demarree ");
lastPress = millis();
}
}
void printTimeLCD(DateTime t) {
if (t.hour() < 10) lcd.print('0');
lcd.print(t.hour());
lcd.print(':');
if (t.minute() < 10) lcd.print('0');
lcd.print(t.minute());
lcd.print(':');
if (t.second() < 10) lcd.print('0');
lcd.print(t.second());
}
Select
Save
Setting
Alarm
On/Off
Piezo
DHT22
RTC
DS1307
Alarm Off