#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
//RTC_DS1307 rtc;
RTC_DS1307 rtc(0x57);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Adresse I2C de l'afficheur, 16 colonnes et 2 lignes
const int buttonPlusPin = 2; // Broche pour le bouton "+"
const int buttonMinusPin = 3; // Broche pour le bouton "-"
const int buttonChangePin = 4; // Broche pour le bouton "changement"
const int longPressDuration = 2000; // Durée du maintien enfoncé pour basculer en mode réglage (en millisecondes)
bool isInAdjustmentMode = false; // Variable pour indiquer si nous sommes en mode de réglage ou non
unsigned long buttonChangePressStartTime = 0; // Stocke le temps auquel le bouton "changement" a été enfoncé
void setup() {
pinMode(buttonPlusPin, INPUT_PULLUP);
pinMode(buttonMinusPin, INPUT_PULLUP);
pinMode(buttonChangePin, INPUT_PULLUP);
lcd.init(); // Initialise l'afficheur
lcd.backlight(); // Allume le rétroéclairage
lcd.setCursor(0, 0);
if (!rtc.begin()) {
lcd.print("RTC introuvable !");
while (1);
}
// Si l'horloge RTC DS1307 a été réinitialisée, ajuste l'heure à la date/heure de compilation
if (rtc.now().year() < 2000) {
lcd.print("RTC a perdu l'heure !");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop() {
// Vérifie si le bouton "changement" est enfoncé pour basculer entre l'affichage normal et le mode réglage
if (digitalRead(buttonChangePin) == LOW) {
if (millis() - buttonChangePressStartTime >= longPressDuration) {
// Si le bouton est maintenu enfoncé pendant la durée spécifiée, bascule en mode de réglage
isInAdjustmentMode = true;
}
} else {
// Si le bouton "changement" est relâché, réinitialise le temps de maintien enfoncé
buttonChangePressStartTime = millis();
}
if (isInAdjustmentMode) {
// Si nous sommes en mode de réglage, appelle la fonction de réglage
adjustmentMode();
} else {
// Sinon, affiche la date et l'heure actuelles
displayDateTime();
}
}
// Fonction pour basculer entre l'affichage normal et le mode de réglage
void adjustmentMode() {
// Affiche "Réglage" sur l'afficheur
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Reglage");
// Exemple de logique de réglage à implémenter ici
// Cette fonction est appelée lorsque le bouton "changement" est maintenu enfoncé
// Utilise les boutons "+" et "-" pour incrémenter et décrémenter les valeurs (jour, mois, année, heure, minute, seconde)
// Une fois les ajustements terminés, appuie sur le bouton "changement" pour enregistrer les modifications et quitter le mode de réglage
}
// Fonction pour afficher la date et l'heure actuelles
void displayDateTime() {
DateTime now = rtc.now();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Date: ");
lcd.print(now.day(), DEC);
lcd.print('/');
lcd.print(now.month(), DEC);
lcd.print('/');
lcd.print(now.year(), DEC);
lcd.setCursor(0, 1);
lcd.print("Heure: ");
lcd.print(now.hour(), DEC);
lcd.print(':');
lcd.print(now.minute(), DEC);
lcd.print(':');
lcd.print(now.second(), DEC);
delay(1000);
}