[Resolu ]Problème RTClib

Bonsoir à tous,
Je viens de découvrir un bug dans des sketchs qui fonctionnaient normalement avec entre autres la lib RTClib.
Ces sketchs ne m'affichent plus la date et l'heure correctement. (Deuligne ou Série)
J'ai donc recherché et suis arrivé sur deux sketchs d'exemples fournis avec cette lib.

Le premier fonctionne normalement ce qui prouve que le hard n'est pas en cause.

// Date and time functions using just software, based on millis() & timer

#include <Wire.h>
#include "RTClib.h"

RTC_Millis RTC;

void setup () {
    Serial.begin(57600);
    
    if (! RTC.isrunning()) {
      Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    RTC.begin(DateTime(__DATE__, __TIME__));
    }
}

void loop () {
    DateTime now = RTC.now();
    
    Serial.print(now.year(), DEC);
    Serial.print('/');
etc... etc...

Si j'utilise cet exemple les dates et heures ne correspondent plus à rien.

// Date and time functions using a DS1307 RTC connected via I2C and Wire lib

#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 RTC;

void setup () {
    Serial.begin(57600);
   // Wire.begin();
    RTC.begin();

  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
}

void loop () {
    DateTime now = RTC.now();
    
    Serial.print(now.year(), DEC);
// etc...

La différence pour moi est dans la déclaration de l'objet horloge.
"RTC_Millis RTC;" fonctionne
et "RTC_DS1307 RTC;" ne fonctionne plus dans tous mes sketchs utilisant cette déclaration.
Quelqu'un peut il m'orienter SVP. J'ai passé l'AM là dessus et je patauge.
Merci.
L'image dont l'url suit montre mon deuligne le 7/4 à 14h43


En dessous copie du LCD aujourd'hui à 17h48 ce qui ne correspond à rien car le monit série affiche 2041/4/6 23:46:55

Qu'est-ce que tu cherches à faire ?

Je cherche à retrouver mes billes càd afficher date et heure correctement comme sur l'écran du haut de la photo.

Pour ajuster la date et l'heure :

cette ligne de code doit être commenté et décommenté après initialisation pour ajuster l'heure :

RTC.adjust(DateTime(__DATE__, __TIME__));

Moi je l'ai fait et j'ai pas eu de problème à part léger décalage.

bonjour,
normal si je me trompe pas

    RTC.adjust(DateTime(__DATE__, __TIME__));

devait être un truc comme ca si tu veux ajuster la date et heure

  RTC.adjust(DateTime("APR 12 2014","18:45:00")); // Setting the time to a fixed value. If you want to use the system time comment this line and use the option below

J'ai déjà appliqué
RTC.adjust(DateTime("APR 12 2014","18:45:00"))

Ca donne ça :
2165/165/165 165:165:85
since midnight 1/1/1970 = 2248299985s = 26021d
now + 7d + 30s: 2041/4/6 23:46:55

Comme j'ai peut-être mal expliqué, je sais mettre l'horloge à l'heure mais depuis ce matin elle déraille complètement si j'utilise la
déclaration : RTC_DS1307 RTC;

changement ide arduino?

La pile a-t-elle été enlevé accidentellement ?

La pile de sauvegarde du ds1307 est bonne?

edit: zut grillé par Uzuma

Je suis sur la dernière version 1.0.5 mais j'ai lancé des sketchs en .pde qui se sont affichés sur l'ide 1.0.5
Mais comme c'est visible sur la photo ça fonctionnait très bien il y a quelques jours, et le fait d'être passé à d'autres sketchs nottament une étude de l'encodeur visible aussi sur la photo, quand je suis revenu sur l'appli altimètre l'horloge ne fonctionnait plus correctement.

Pas de problème de pile, je n'ai pas débranché l'usb entre les différents tests.

Dans la procédure que j'utilise pour mettre à l'heure mon horloge, j'utilise cette déclacration : RTC_DS1307 RTC; et tout ce passe très bien. Mon horloge est mit à l'heure.

Pour le lien que je t'ai laissé, j'espère que tu à lu les explications ?!

  • il faut d'abord enlevé la pile, attendre 3 secondes puis la remettre à sa place

  • ensuite téléverser le scketch avec la parti "RTC.adjust(DateTime(DATE, TIME));" laissé en commentaire.
    -Après tout cela, tu téléverses à nouveau le code avec cette fois ci la partie "RTC.adjust(DateTime(DATE, TIME));" décommenté c'est-à-dire sans les "//"

  • Attendre quelques minutes et ton horloge se met à l'heure tout seul.

jpjcb66:
...
En dessous copie du LCD aujourd'hui à 17h48 ce qui ne correspond à rien car le monit série affiche 2041/4/6 23:46:55

Bonsoir
Je reprend là, mais lu les reponses suivantes
Tu explique là, que l'affichage d'une lecture des registres du DS1307 (à jour ou pas)
ne renvoie pas la meme chose sur ton LCD et le serial monitor ?

Je crois que sur ce problème je m'exprime mal car il me semble que le message ne passe pas.
Salut Artouste.
En effet l'affichage serial monir et LCD ne renvoient pas la même chose mais ça c'est une question de formatage.
Ce que j'essaie d'expliquer c'est que tout allait bien sur toutes mes applis (au niveau RTC) que ce soit moni serie ou LCD.
La photo met ce fait en évidence puisque sur un sketch déjà chargé : RTC+ Tempé + Pression + encodeur tout allait bien.
Je suis repassé à autre chose en terme de sketch et quand je suis revenu sur cette appli alti qui fonctionnait , j'ai été confronté à ce problème d'horloge.
J'ai donc chargé différents exemples des Lib RTC et j'ai constaté que celles où l'on déclare RTC_DS1307 RTC; ne voulait plus rien savoir alors que le même exemple (voir en début de fil) avec la déclaration RTC_Millis RTC; fonctionne.
J'en suis là et viens de recharger une lib au cas où mais c'est pareil.

jpjcb66:
...
En effet l'affichage serial monir et LCD ne renvoient pas la même chose mais ça c'est une question de formatage.
Ce que j'essaie d'expliquer c'est que tout allait bien sur toutes mes applis (au niveau RTC) que ce soit moni serie ou LCD.
...

oui , je comprend bien, mais formatage ou pas , il n'y a aucune raison pour qu'un simple affichage LCD etSERIAL soit different ne serait ce déjà que pour simplement les minutes et secondes , quel que soit le top zero et à ? près

Bien d'accord, je viens de faire le ménage dans mon dossier library.
J'ai ressayé les exemples de RTClib : ds1307.pde et softrtc.pde
Le premier (ds1307.pde)me sort :

2036/2/12 8:44:51
since midnight 1/1/1970 = 2086418691s = 24148d
now + 7d + 30s: 2036/2/19 8:45:21

et le second (softrtc.pde ) :

2014/4/12 21:35:50
seconds since 1970: 1397338550
now + 7d + 30s: 2014/4/19 21:36:20
Ce qui est déjà plus raisonable !!!
Comprenne qui peut. Le problème est là. Ca c'est essayé avec juste le shield "mémoire" Donc version lisse comme on dit.

Comme tu l'as dit, le message a du mal à passer.
Je ne comprends pas pourquoi tu ne remets pas et en toute simplicité ton horloge à l'heure.

Uzuma ; T'as lu qq lignes au dessus ?

jpjcb66:
Comprenne qui peut. Le problème est là. Ca c'est essayé avec juste le shield "mémoire" Donc version lisse comme on dit.

expose ici tes 2 "sketchs" (complets et compilables )
je pense que la sequence d'initialisation... , n'est pas initialisée de la meme maniere pour les deux

si tu veux tester en "version/configuration lisse" :grin:
preoccupe toi là pour l'instant de la seule gestion de la RTC/LCD/SERIAL
au delta près quelle que soit la version RTC , une fois initialisée tu devrais lire de l'evolution de minutes et secondes de temps sans derive à l'identique sur les 2 vecteurs d'affichage

Quand je parle de version lisse c'est l'arduino seul avec le shield mémoire donc sans deuligne et le reste.
Je poste donc les codes des deux sketchs offerts avec la lib RTC

// Date and time functions using a DS1307 RTC connected via I2C and Wire lib

#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 rtc;

void setup () {
  Serial.begin(57600);
#ifdef AVR
  Wire.begin();
#else
  Wire1.begin(); // Shield I2C pins connect to alt I2C bus on Arduino Due
#endif
  rtc.begin();

  if (! rtc.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(__DATE__, __TIME__));
  }
}

void loop () {
    DateTime now = rtc.now();
    
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
    
    Serial.print(" since midnight 1/1/1970 = ");
    Serial.print(now.unixtime());
    Serial.print("s = ");
    Serial.print(now.unixtime() / 86400L);
    Serial.println("d");
    
    // calculate a date which is 7 days and 30 seconds into the future
    DateTime future (now.unixtime() + 7 * 86400L + 30);
    
    Serial.print(" now + 7d + 30s: ");
    Serial.print(future.year(), DEC);
    Serial.print('/');
    Serial.print(future.month(), DEC);
    Serial.print('/');
    Serial.print(future.day(), DEC);
    Serial.print(' ');
    Serial.print(future.hour(), DEC);
    Serial.print(':');
    Serial.print(future.minute(), DEC);
    Serial.print(':');
    Serial.print(future.second(), DEC);
    Serial.println();
    
    Serial.println();
    delay(3000);
}

Et softrtc

// Date and time functions using just software, based on millis() & timer

#include <Wire.h>
#include "RTClib.h"

RTC_Millis rtc;

void setup () {
    Serial.begin(57600);
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.begin(DateTime(__DATE__, __TIME__));
}

void loop () {
    DateTime now = rtc.now();
    
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
    
    Serial.print(" seconds since 1970: ");
    Serial.println(now.unixtime());
    
    // calculate a date which is 7 days and 30 seconds into the future
    DateTime future (now.unixtime() + 7 * 86400L + 30);
    
    Serial.print(" now + 7d + 30s: ");
    Serial.print(future.year(), DEC);
    Serial.print('/');
    Serial.print(future.month(), DEC);
    Serial.print('/');
    Serial.print(future.day(), DEC);
    Serial.print(' ');
    Serial.print(future.hour(), DEC);
    Serial.print(':');
    Serial.print(future.minute(), DEC);
    Serial.print(':');
    Serial.print(future.second(), DEC);
    Serial.println();
    
    Serial.println();
    delay(3000);
}