Rtc reste pas a l'heure après coupure

bonjour je viens vers vous au sujet d'un problème avec ma rtc 3231 avec la lib rct.lib.
quand je prend le programme rtc lib et que je mais la rtc l'heure et que je simule une coupe la rtc garde l'heure .
Mais quand je le fait avec mon programme la rtc redémarre a 00:00:00 et je comprend pas pourquoi si vous pourriez m'aider merci . voila ce que j'ai fait dans mon programme ,j'ai juste fait un copier colle des fonction pour la rtc car mon programme est trop long.


#include <UTFT.h>
#include <URTouch.h>
#include <UTFT_SdRaw.h>
#include <UTFT_Buttons.h>
#include <SPI.h>
#include <SdFat.h>
#include <DHT.h>  
#include <Wire.h>         //http://arduino.cc/en/Reference/Wire (included with Arduino IDE)
#include <OneWire.h>
 #include "RTClib.h"
#include <EEPROM.h>
#include <Adafruit_Sensor.h>

RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

// déclaration de la typo
extern uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];

void setup()                
{
   Wire.begin(); 
    //HORLOGE
  #ifndef ESP8266
  while (!Serial); // for Leonardo/Micro/Zero
#endif

  Serial.begin(9600);

  

  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }

  if (rtc.lostPower()) {
    Serial.println("RTC lost power, lets set the time!");
    // following line sets the RTC to the date & time this sketch was compiled
   // rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
     //rtc.adjust(DateTime(2021, 9, 19, 10, 26, 0));
  }
void Home(){
    switch(affichage){

  case 0: 
   
    // arriere plan, bouton, intitulé de variable , etc
 
    myFiles.load(0, 0, 320, 240, "MENU.RAW");
   
    
    affichage=true;// on passe a true pour ignoré ces instruction a la prochaine boucle
    break;
  
    /* jusque la pas de souci*/
  case 1:



    
  //AFFICHAGE DE L HEURE
      //HORLOGE
 
       myGLCD.setFont(BigFont);
     DateTime now = rtc.now();
            if (now.hour()<10){myGLCD.print("0",100,0);myGLCD.printNumI(now.hour(),118,0);} else {myGLCD.printNumI(now.hour(),100,0);}
            myGLCD.print(":",130,0);
            if (now.minute()<10){myGLCD.print("0",140,0);myGLCD.printNumI(now.minute(),158,0);} else {myGLCD.printNumI(now.minute(),140,0);}
            myGLCD.print(":",170,0);
            if (now.second()<10){myGLCD.print("0",180,0);myGLCD.printNumI(now.second(),198,0);} else {myGLCD.printNumI(now.second(),180,0);}
                    
  myGLCD.setFont(SmallFont);
  myGLCD.setColor(0,0,0);
      myGLCD.setBackColor(255,255,255);
    
      if (now.day()<10){myGLCD.print("0",0,220);myGLCD.printNumI(now.day(),18,220);} else {myGLCD.printNumI(now.day(),0,220);}
            myGLCD.print("/",15,220);
            if (now.month()<10){myGLCD.print("0",25,220);myGLCD.printNumI(now.month(),35,220);} else {myGLCD.printNumI(now.month(),25,220);}
            myGLCD.print("/",45,220);
            if (now.year()<10){myGLCD.print("0",55,220);myGLCD.printNumI(now.year(),73,220);} else {myGLCD.printNumI(now.year(),55,220);}

  
    break;
  }

}
  

Il y a de nombreuses librairies RTC.
Merci de donner un lien vers celle que tu utilises.

Le DS3231 nécessite de positionner un bit dans un registres de la RTC pour activer la batterie. Est-ce que cela a été fait au moins une fois?

la lib et celle la GitHub - adafruit/RTClib: A fork of Jeelab's fantastic RTC Arduino library . pour la batterie j'ai juste fait une mise a l'heure mis la pile et fait une reset .

Salut.
Je ne sais pas si ce rtc a déjà été réglé sur l'heure.
Avez-vous déjà compilé votre code en décommentant l'une des lignes suivantes ? :

   // rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // Temps de compilation 
   //rtc.adjust(DateTime(2021, 9, 19, 10, 26, 0)); //January 21, 2014 at 3am Par exemple

Les salutations.
PS : il n'est pas du tout nécessaire de retirer la batterie.

Bonjour

!!!
Oui, il faut déconnecter l'Arduino de toute alimentation, enlever et remettre la batterie, sinon la condition

n'est jamais vraie, donc pas de mise à jour sur l'heure du système.

Cordialement
jpbbricole

C'est vrai @jpbbricole , je n'avais pas réalisé, je n'ai pas ces lignes à l'intérieur de ce If. @dark17 devez les sortir de là.
Salutations.

Bonjour

L'astuce pour ne pas faire toute cette "gymnastique" et d'inverser la condition

if (!rtc.lostPower())

et télécharger le programme, puis, remettre la condition dans son état initial et retélécharger.
Si on oublie de remettre la condition, chaque fois que l'Arduino redémarra, la RTC sera toujours à la même heure.

Cordialement
jpbbricole

Oui, c'est un moyen de le faire fonctionner. Je n'utilise cette condition que pour afficher le message à l'écran.
J'ai hors de condition la phrase :

// rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // Temps de compilation 

Je décommente la ligne et compile pour régler l'heure, puis la commente immédiatement et compile à nouveau pour que l'heure ne change pas à chaque redémarrage de l'arduino.
Salutations.

salut oui ca a était fait avec l'exemple de la lib et sans mettre la pile, après j'ai mis la pile débranché rebranche et le moniteur série me donne l'heure exacte .J'ai recompile en remettant les // et ca marche nickel . Mais dans mon programme ca marche pas après une coupure le rtc repart a :00:00:00

Voilà ce que je fait je règle l'heure avec le pc sans la pile ,une fois fait je remets la pile


La j'ai l'heure
Apres je recommante la ligne
Et je televerse je suis toujours à l'heure . Je simule une coupe et la ça donne ça

J'ai oublié de préciser que j'utilise une pile rechargeable esque cela peut posé un problème ?

J'ai trouvé mon problème on m'a passé un nouvelle rtc et ça marche ,mon rtc eeprom est HS voilà le problème merci de vos réponse et a l'avenir je commanderai en double les pièce pour pouvoir testé si ça viens pas d'une pièce

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.