[Résolu]Probleme avec Shield Snootlab RTC DS1307

Slt a tous,

un petit soucis avec le shield memoire,

les exemples pour tester l’ horloge fonctionnes, mais pas celui avec l’ horodatage !!

voila le code:

    /*
        SNOOTLAB
        Application N°1 Shield Mémoire : Stockage des valeurs de temperature dans un fichier texte
        avec fonction d'horodatage
    */

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

    // Declaration des pin utilisées
    const char pin_chipSelect = 10;                            //10 est la pin utilisée par le shield mémoire pour le signal ChipSelect
    const char pin_capteur = 0;                                //Numéro de la pin où est relié le capteur en question

    // Declaration des variables générales
    const unsigned long F_refresh = 5000;                      //Entrez ici la fréquence de rafraichissement du capteur, en millisecondes
    DateTime moment;                                           //Création d'un objet contenant les données temporelles
    String datastring;                                         //Création d'un objet type string pour les données à écrire
    RTC_DS1307 RTC;
    File fichier;


    void setup()
    {
     
      Serial.begin(57600);                                     //Initialisation de la liaison série
      Serial.print("Initialisation de la SD card...");
     
      pinMode(pin_chipSelect, OUTPUT);                         // Mettre la pin en output
     
       RTC.begin();                            
       if (! RTC.isrunning()) 
   {
     // Si la RTC n'est pas configurée, le faire avec les valeurs de l'ordinateur au moment de la compilation
     RTC.adjust(DateTime(__DATE__, __TIME__));
   }
     
      if (!SD.begin(pin_chipSelect))                           // Vérification de la présence de la SD card
        {                         
          Serial.println("Carte fausse ou absente");
          return;                                              // Si problème, sortir et bloquer l'exécution
        }
     
      Serial.println("Carte OK.");
     
      datastring = "\nReleve et horodatage des valeurs du capteur, selon horloge RTC\n---------\n ";
     
      fichier = SD.open("log1.txt", FILE_WRITE);               // Ouverture du fichier en mode Ecriture.
     
      if (fichier)                                             // Si le fichier existe déja, on écrira à la suite des données présentes.
        {
          fichier.println(datastring);
          fichier.close();
          Serial.println(datastring);                          // dupliquer la donnée sur port série
        } 
       
      else                                                     //Si problème à l'ouvertre, alors signaler l'erreur
        {                                                       
            Serial.println("erreur d'ouverture du fichier durant la configuration");
        }
     
    }

    void loop()
    {
       
      delay(F_refresh);
     
     
      moment = RTC.now();                                      //Init de l'objet temporel
     
      datastring=String(moment.day(),DEC)+'/'+String(moment.month(),DEC)+'/'+String(moment.year(),DEC)
      +' '+String(moment.hour(),DEC)+':'+String(moment.minute(),DEC)+':'+String(moment.second(),DEC);

      int sensor = analogRead(pin_capteur);                    // lire la valeur du capteur et la mettre dans la chaine de caractères
      datastring += String("\t Valeur capteur = ");            // préalablement remplie avec les données temporelles
      datastring += String(sensor);
       
      fichier = SD.open("log1.txt", FILE_WRITE);

      if (fichier)
        {
          fichier.println(datastring);
          fichier.close();
          Serial.println(datastring);                           // dupliquer la donnée sur port série
        } 
      else {
            Serial.println("erreur d'ouverture du fichier");
            }
     
      datastring =0; 
    }

Voila le resultat:

Initialisation de la SD card…Carte OK.

Releve et horodatage des valeurs du capteur, selon horloge RTC

165/165/2165 165:165:85 Valeur capteur = 718
165/165/2165 165:165:85 Valeur capteur = 550
165/165/2165 165:165:85 Valeur capteur = 556
165/165/2165 165:165:85 Valeur capteur = 560
165/165/2165 165:165:85 Valeur capteur = 546
165/165/2165 165:165:85 Valeur capteur = 558
165/165/2165 165:165:85 Valeur capteur = 569

La valeur du capteur est OK, mais la date et l’ heure !!!

et je retrouve la meme chose dans le fichier sur la carte

qui aurais une idée ???

Salut,

Quel est ton environnement : Uno, Mega ? Quelle version d'Arduino ?

Slt,

Arduino Uno R3, ide 1.0, que dire de plus ?

Slt,

Personne pour m' aider...

a+++

Bonjour,

christianc:
Personne pour m' aider...

C'est le WE on est pas tous sur le forum h24 :wink:

Ton probléme doit venir de l'initialisation de l'horloge.

RTC.begin();                            
if (! RTC.isrunning()) {
  // Si la RTC n'est pas configurée, le faire avec les valeurs de l'ordinateur au moment de la compilation
  RTC.adjust(DateTime(__DATE__, __TIME__));
}

Essaye de mettre :

RTC.adjust(DateTime(2012, 07, 01, 10, 30, 0));

Débranche l'alimentation de ton montage et du DS1307 puis remet l'alimentation, cela forcera la mise à jour de l'heure et tu devrais retrouver des valeurs cohérentes.

Bonjour :slight_smile:

ça y est, problème résolu !
une ligne avait sautée lors d’une mise à jour précédente de ce sketch entre celui-ci et sa copie sur le forum lors de la mise en page …

J’en ai profité pour réécrire de manière plus lisible ce sketch. Have fun :slight_smile:

lien


Stéphane.

Slt,

Programme chargé et testé, tout est ok, encore merci,

je n' aurais jamais trouvé seul

Merci