Bonjour à tous.
Je suis nouveau sur le forum.
Je travaille sur un programme qui va permettre de gérer en température et hygrométrie un terrarium . J'utilise un Arduino UNO
Le programme est bien avancé, mais il me reste un point qui me bloque, c'est la gestion de l'heure.
J'ai un module DS1307 avec un afficheur 1602A (j'attend un 2004A), je fais bien apparaitre la date et l'heure sur l'afficheur, mais l'heure est bloquée sur celle du téléchargement.
Avez-vous une idée du problème?
Je suis cablé en I2C.
Merci de prendre quelques minutes pour lire les bonnes pratiques du forum francophone et de les appliquer.
Mets ton code dans le message.
Mais on peut supposer que tu as laissé dans le setup() la ligne qui initialise le DS1307 avec l'heure de la compilation du code.
A noter, on encourage pas trop l'usage du DS1307 qui dérive pas mal dans le temps, on conseille plutôt d'utiliser le DS3231 qui est très stable.
En effet, voici le code en question.
Je suis d'accord avec toi, mais je n'arrive pas à voir la ligne en question
#include <Wire.h> // Bibliothèque pour l'I2C
#include "RTClib.h" // Bibliothèque pour le module RTC
#include <LiquidCrystal_I2C.h> // Bibliothèque pour l'écran
RTC_DS1307 RTC; // Instance du module RTC de type DS1307
LiquidCrystal_I2C lcd(0x27, 16,2); ////Instance d'écran
void setup(void) {
//Initialisation de l'écran
lcd.begin(16,2);
lcd.clear();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.setCursor(0, 1);
// Initialise la liaison I2C
Wire.begin();
// Initialise le module RTC
RTC.begin();
//Initialise la date et le jour au moment de la compilation
// /!\ /!\ Les lignes qui suivent sert à définir la date et l'heure afin de régler le module,
// pour les montages suivant il ne faut surtout PAS la mettre, sans à chaque démarrage
// le module se réinitialisera à la date et heure de compilation
DateTime dt = DateTime(__DATE__, __TIME__);
RTC.adjust(dt);
// /!\
////////////////////////////////////////////////////////////////////////////////////////////
}
void loop()
{
DateTime now=RTC.now(); //Récupère l'heure et le date courante
affiche_date_heure(now); //Converti la date en langue humaine
delay(2000); // delais de 1 seconde
}
//Converti le numéro de jour en jour /!\ la semaine commence un dimanche
String donne_jour_semaine(uint8_t j)
{
switch(j)
{
case 0: return "DIM";
case 1: return "LUN";
case 2: return "MAR";
case 3: return "MER";
case 4: return "JEU";
case 5: return "VEN";
case 6: return "SAM";
default: return " ";
}
}
// affiche la date et l'heure sur l'écran
void affiche_date_heure(DateTime datetime){
// Date
String jour = donne_jour_semaine(datetime.dayOfTheWeek()) + " " +
Vers2Chiffres(datetime.day())+ "/" +
Vers2Chiffres(datetime.month())+ "/" +
String(datetime.year(),DEC);
// heure
String heure = "";
heure = Vers2Chiffres(datetime.hour())+ ":" +
Vers2Chiffres(datetime.minute())+ ":" +
Vers2Chiffres(datetime.second());
//affichage sur l'écran
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(jour);
lcd.setCursor(0, 1);
lcd.print(heure);
}
//permet d'afficher les nombres sur deux chiffres
String Vers2Chiffres(byte nombre) {
String resultat = "";
if(nombre < 10)
resultat = "0";
return resultat += String(nombre,DEC);
}