//arduivolet46 version 45 nettoyé
#include "LiquidCrystal.h" //ajout de la librairie
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
//Vérifier les broches !
LiquidCrystal lcd(43, 45, 47, 49, 51, 53); //liaison 4 bits de données
char message[16] = "";
int jour_semaine = 0;
int mois = 0;
int jours = 0;
int heures = 0; //variable pour modification des heures
int minutes = 0;
int secondes = 0; //variable pour modification des minutes
int ete = 0; //mettre a 1 si compilation en ete sinon 0
int hiver = 1; //mettre a 1 si compilation en hiver sinon 0
int premiereFoisETE;
int premiereFoisHIVER;
//******************************************* SETUP **********************************************************
//******************************************* SETUP **********************************************************
//******************************************* SETUP **********************************************************
void setup()
{
boolean premiereFoisETE = false;
boolean premiereFoisHIVER = false;
//******************************************* CODE HORLOGE *****************************************************
Wire.begin(); //Démarrage de la librairie wire.h
RTC.begin(); //Démarrage de la librairie RTClib.h
//Si RTC ne fonctionne pas
if (! RTC.isrunning())
{
lcd.write("RTC ne fonctionne pas !");
//Met à l'heure à date à laquelle le sketch est compilé
// RTC.adjust(DateTime(DATE, TIME));
}
//******************************************* FIN CODE HORLOGE **************************************************
lcd.begin(20, 4); //declaration des lignes du lcd écran 20 colonnes et 4 lignes
}
//******************************************* LOOP **********************************************************
//******************************************* LOOP **********************************************************
//******************************************* LOOP **********************************************************
void loop()
{
//RTC.adjust(DateTime(DATE, TIME)); // mise a l'heure du PC attention variable à definir: ete ou hiver 1 ou 0
AFFICHAGE_HEURE();
delay(100);
}
//*********************************** END LOOP **********************************************************************
//*********************************** END LOOP **********************************************************************
//*********************************** END LOOP **********************************************************************
void AFFICHAGE_HEURE() // lecture heure et affichage LCD
{
//******************************************* AFFICHAGE DE L'HEURE ***************************************
INTEGRATION_DE_LHEURE();
sprintf(message, "%2d:%2d:%2d", (heures), (minutes), (secondes));
lcd.home(); //met le curseur en position (0;0) sur l'écran
lcd.setCursor(12, 3); //place le curseur aux coordonnées
lcd.write(message); //envoi le message sur l'écran
DateTime now = RTC.now();
if (now.dayOfWeek() == 0)
{
lcd.setCursor(8, 3);
lcd.write("DIM");
}
if (now.dayOfWeek() == 1)
{
lcd.setCursor(8, 3);
lcd.write("LUN");
}
if (now.dayOfWeek() == 2)
{
lcd.setCursor(8, 3);
lcd.write("MAR");
}
if (now.dayOfWeek() == 3)
{
lcd.setCursor(8, 3);
lcd.write("MER");
}
if (now.dayOfWeek() == 4)
{
lcd.setCursor(8, 3);
lcd.write("JEU");
}
if (now.dayOfWeek() == 5)
{
lcd.setCursor(8, 3);
lcd.write("VEN");
}
if (now.dayOfWeek() == 6)
{
lcd.setCursor(8, 3);
lcd.write("SAM");
}
if ( ete == 1 && hiver == 0 ) //affichage de S ou W si été ou hiver
{
lcd.setCursor(19, 0);
lcd.write("S");
}
if ( ete == 0 && hiver == 1 )
{
lcd.setCursor(19, 0);
lcd.write("W");
}
//******************************************* FIN AFFICHAGE DE L'HEURE ***************************************
}
void INTEGRATION_DE_LHEURE()
{
DateTime now = RTC.now();
// ++++++++++ Gestion de l'heure d'été pour la France ++++++++++
// En France le changement d'heure fonctionne selon la règle suivante :
// Le dernier dimanche de mars à 3 heure on ajoute une heure,
// Le dernier dimanche d'octobre à 3 heure on retranche une heure
jour_semaine = (now.dayOfWeek());
mois = (now.month());
jours = (now.day());
heures = (now.hour());
minutes = (now.minute());
secondes = (now.second());
//passage a l heure d ete
if ((heures == 3) && (minutes == 0) && (secondes < 5) && (jour_semaine == 0) && (mois == 3) && (jours > 24) && (premiereFoisETE = false))
{
heures = (heures + 1);
ete = 1;
hiver = 0;
premiereFoisETE = true;
}
// passage à l'heure d'hiver -1 heure
if ((heures == 3) && (minutes == 0) && (secondes < 5) && (jour_semaine == 0) && (mois == 10) && (jours > 24) && (premiereFoisHIVER = false))
{
heures = (heures - 1);
ete = 0;
hiver = 1;
premiereFoisHIVER = true;
}
if ((heures == 5) && (minutes == 0) && (secondes < 5) && (jour_semaine == 0) && (mois == 3) && (jours > 24))
{
premiereFoisETE = false; //reset de la variable
}
if ((heures == 5) && (minutes == 0) && (secondes < 5) && (jour_semaine == 0) && (mois == 10) && (jours > 24))
{
premiereFoisHIVER = false; //reset de la variable
}
//rectification pour ne pas avoir minuit - 1h = -1H aulieu de 23h
if (heures == (-1))
{
heures = 23;
}
//rectification pour ne pas avoir minuit 24h aulieu de 00h
if (heures == 24)
{
heures = 0;
}
}