surement encore un topic sur horloge 1307

Nouvelle version, j'ai amélioré mon programme dans le train ce matin, il est bien plus simple à utiliser maintenant (message explicatif, nettoyage du code, ajout de commentaires plus clairs) :

/*Sketch de lecture et programmation pour horloge RTC I2C DS1307
 * utilise la librairie DS1307 disponible sur le forum arduino,et basé sur l'exemple fourni
 * avec la lib.
 * Librairie DS1307 fournie par mattt et D. Sjunnesson
 * 
 * Programme sous licence GNU GPL
 * 
 * (c) bricofoy 2012
 */

#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h> 

void setup() {
  Serial.begin(9600);
  usage();
  lecture_RTC();
}

int valeur=0;
int commande=0;
char truc[2];	//buffer de lecture des valeurs
int i=0;

// explication de l'utilisation
void usage() {
  Serial.println("\nUSAGE : u U h[00-23]m[00-59]s[00-59]j0[1-7]D[01-31]M[01-12]A[00-49]");
  Serial.println("\nEXEMPLE : h09m35j03 regle l'heure sur 09h35 et jour de la semaine 3 (mardi).");
  Serial.println("\nListe des commandes : h** : heure, m** : minutes, s** : secondes, j0* : jour de la semaine");
  Serial.println("  D** : jour de la date, M** : mois, A** : annee.");
  Serial.println("  u ou U affichent ce message, tout autre caractere affiche l'heure.");
}

// fonction de lecture de l'heure dans le DS1307
void lecture_RTC() { 
	  Serial.print("\nHeure actuelle : ");
	  Serial.print(RTC.get(DS1307_HR,true)); //read the hour and also update all the values by pushing in true
	  Serial.print(":");
	  Serial.print(RTC.get(DS1307_MIN,false));//read minutes without update (false)
	  Serial.print(":");
	  Serial.print(RTC.get(DS1307_SEC,false));//read seconds
	  Serial.print(" ");                 // some space for a more happy life
	  Serial.print(RTC.get(DS1307_DOW,false));
	  Serial.print(" ");
	  Serial.print(RTC.get(DS1307_DATE,false));//read date
	  Serial.print("/");
	  Serial.print(RTC.get(DS1307_MTH,false));//read month
	  Serial.print("/");
	  Serial.println(RTC.get(DS1307_YR,false)); //read year 	  
}

// paramétrage de l'horloge
void ecriture_RTC() {
      commande = Serial.read();
      Serial.print("   "); //ici on envoie 3 espaces sur le terminal, sans ça la lecture suivante est fausse
			   //sinon il faut envoyer un seul espace avec println et ça marche aussi
      for (i=0;i<2;i++) {
	truc[i]=Serial.read();
	Serial.print(" "); //idem que plus haut : un espace à envoyer sinon ça foire. Ici un seul suffit.
      }
 
      valeur = byte((truc[0]-48)*10 + (truc[1]-48)); //-48 car la valeur ascii des chiffres =48 pour le 0, =49 pour le 1, etc 

      switch (commande) {
	case 'h' :
	  RTC.set(DS1307_HR,valeur);
	  Serial.print("champ heures regle sur ");
	  Serial.println(valeur,DEC);
	  break;
	case 'm' :     
	  RTC.set(DS1307_MIN,valeur);
	  Serial.print("champ minutes regle sur ");
	  Serial.println(valeur,DEC);
	  break;
	case 's' :     
	  RTC.set(DS1307_SEC,valeur);
	  Serial.print("champ secondes regle sur ");
	  Serial.println(valeur,DEC);
	  break;	 
	case 'D' :     
	  RTC.set(DS1307_DATE,valeur);
	  Serial.print("champ date regle sur ");
	  Serial.println(valeur,DEC);
	  break;  
	case 'j' :     
	  RTC.set(DS1307_DOW,valeur);
	  Serial.print("champ jour regle sur ");
	  Serial.println(valeur,DEC);
	  break;  
	case 'M' :     
	  RTC.set(DS1307_MTH,valeur);
	  Serial.print("champ mois regle sur ");
	  Serial.println(valeur,DEC);
	  break;  
	case 'A' :     
	  RTC.set(DS1307_YR,valeur);
	  Serial.print("champ annee regle sur ");
	  Serial.println(valeur,DEC);
	  break;  
	case 'u' :
	case 'U' :
	  usage();
	  break;
	default :
	  break;
      }
      lecture_RTC();
}

void loop() {
   if (Serial.available()) {
     ecriture_RTC();
    }
}

concernant ton soucis de DS1307 qui se remet à 0:0:0, attention j'ai remarqué que ça arrive quand utilise les fonctions RTC.start() et RTC.stop() de la lib DS1307

les utilises-tu dans ton programme ?

essayes avec mon code, au boot il envoie l'heure, sinon pour afficher l'heure sans rien programmer il suffit d'envoyer un caractère autre que ceux des commandes.

J'ai essayé mon module aujourd'hui et j'en ai profité pour tester ton code.
Pas de problème il fonctionne.

Il arrive parfois que je recoive des trames eronnées :

Heure actuelle : 17:56:13 4 20/2/2012
Heure actuelle : 25:52:8 7 165/45/2165 (???)

Problème de parasite, un delay à mettre qq part ?
J'ai le même problème avec d'autres codes par moment.

A+

Curieux. Est-ce juste une erreur de lecture, où est-ce que c'est le DS1307 qui a perdu l'heure ? (la trame suivante est Ok même sans reréglage de l'heure ou pas ? )

la trame suivante est Ok même sans reréglage de l'heure ou pas ?

Oui

ok donc c'est juste un soucis de lecture. Là comme ça je ne sais pas d'où ça peut venir, peut-être la librairie DS1307 qui déconne.
Je suis en train de corriger la librairie pour la faire marcher sur l'IDE 1.0, je verrai à l'occasion si je trouve une erreur.

Merci pour l'info en tout cas :slight_smile:

J'ai ce code sous 1.0

/*
  RealTimeClockDS1307 - library to control a DS1307 RTC module
  Copyright (c) 2011 David H. Brown. All rights reserved
  
  Much thanks to John Waters and Maurice Ribble for their
  earlier and very helpful work (even if I didn't wind up
  using any of their code):
   - http://combustory.com/wiki/index.php/RTC1307_-_Real_Time_Clock
   - http://www.glacialwanderer.com/hobbyrobotics/?p=12

  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.

  This library is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.

  You should have received a copy of the GNU Lesser General Public
  License along with this library; if not, write to the Free Software
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/


#include <Wire.h>
#include <RealTimeClockDS1307.h>

//RealTimeClock RTC;//=new RealTimeClock();

#define Display_Clock_Every_N_Seconds 1
#define Display_ShortHelp_Every_N_Seconds 25
//#define TEST_Squarewave
//#define TEST_StopStart
//#define TEST_1224Switch

int count=0;
char formatted[] = "00-00-00 00:00:00x";

void setup() {
//  Wire.begin();
  Serial.begin(9600);
}
 
void loop() {
  if(Serial.available())
  {
    processCommand();
  }
  delay(1000);
  RTC.readClock();
  count++;
  if(count % Display_Clock_Every_N_Seconds == 0){
    Serial.print(count);
    Serial.print(": ");
    RTC.getFormatted(formatted);
    Serial.print(formatted);
    Serial.println();
  }
  
  if(count % Display_ShortHelp_Every_N_Seconds == 0) {
    Serial.println("Send ? for a list of commands.");
  }
#ifdef TEST_Squarewave
if(count%10 == 0)
{
  switch(count/10 % 6)
  {
    case 0:
    Serial.print("Squarewave disabled (low impedance): ");
    RTC.sqwDisable(0);
    Serial.println((int) RTC.readData(7));
    break;
    case 1:
    Serial.print("Squarewave disabled (high impedance): ");
    RTC.sqwDisable(1);
    Serial.println((int) RTC.readData(7));
    break;
    case 2:
    Serial.println("Squarewave enabled at 1 Hz");
    RTC.sqwEnable(RTC.SQW_1Hz);
    break;
    case 3:
    Serial.println("Squarewave enabled at 4.096 kHz");
    RTC.sqwEnable(RTC.SQW_4kHz);
    break;
    case 4:
    Serial.println("Squarewave enabled at 8.192 kHz");
    RTC.sqwEnable(RTC.SQW_8kHz);
    break;
    case 5:
    Serial.println("Squarewave enabled at 32.768 kHz");
    RTC.sqwEnable(RTC.SQW_32kHz);
    break;
    default:
    Serial.println("Squarewave test not defined");
  }//switch
}
#endif

#ifdef TEST_StopStart
if(count%10 == 0)
{
  if(!RTC.isStopped()) 
  {
    if(RTC.getSeconds() < 45) 
    {
      Serial.println("Stopping clock for 10 seconds");
      RTC.stop();
    }//if we have enough time
  } else {
    RTC.setSeconds(RTC.getSeconds()+11);
    RTC.start();
    Serial.println("Adding 11 seconds and restarting clock");
  }
}//if on a multiple of 10 counts
#endif

#ifdef TEST_1224Switch  
  if(count%10 == 0)
  {
    if(count %20 == 0)
    {
      Serial.println("switching to 12-hour time");
      RTC.switchTo12h();
      RTC.setClock();
    }
    else
    {
      Serial.println("switching to 24-hour time");
      RTC.switchTo24h();
      RTC.setClock();
    }
  }
#endif
}

void processCommand() {
  if(!Serial.available()) { return; }
  char command = Serial.read();
  int in,in2;
  switch(command)
  {
    case 'H':
    case 'h':
    in=SerialReadPosInt();
    RTC.setHours(in);
    RTC.setClock();
    Serial.print("Setting hours to ");
    Serial.println(in);
    break;
    case 'I':
    case 'i':
    in=SerialReadPosInt();
    RTC.setMinutes(in);
    RTC.setClock();
    Serial.print("Setting minutes to ");
    Serial.println(in);
    break;
    case 'S':
    case 's':
    in=SerialReadPosInt();
    RTC.setSeconds(in);
    RTC.setClock();
    Serial.print("Setting seconds to ");
    Serial.println(in);
    break;
    case 'Y':
    case 'y':
    in=SerialReadPosInt();
    RTC.setYear(in);
    RTC.setClock();
    Serial.print("Setting year to ");
    Serial.println(in);
    break;
    case 'M':
    case 'm':
    in=SerialReadPosInt();
    RTC.setMonth(in);
    RTC.setClock();
    Serial.print("Setting month to ");
    Serial.println(in);
    break;
    case 'D':
    case 'd':
    in=SerialReadPosInt();
    RTC.setDate(in);
    RTC.setClock();
    Serial.print("Setting date to ");
    Serial.println(in);
    break;
    case 'W':
    Serial.print("Day of week is ");
    Serial.println((int) RTC.getDayOfWeek());
    break;
    case 'w':
    in=SerialReadPosInt();
    RTC.setDayOfWeek(in);
    RTC.setClock();
    Serial.print("Setting day of week to ");
    Serial.println(in);
    break;
    
    case 't':
    case 'T':
    if(RTC.is12hour()) {
      RTC.switchTo24h();
      Serial.println("Switching to 24-hour clock.");
    } else {
      RTC.switchTo12h();
      Serial.println("Switching to 12-hour clock.");
    }
    RTC.setClock();
    break;
    
    case 'A':
    case 'a':
    if(RTC.is12hour()) {
      RTC.setAM();
      RTC.setClock();
      Serial.println("Set AM.");
    } else {
      Serial.println("(Set hours only in 24-hour mode.)");
    }
    break;
    
    case 'P':
    case 'p':
    if(RTC.is12hour()) {
      RTC.setPM();
      RTC.setClock();
      Serial.println("Set PM.");
    } else {
      Serial.println("(Set hours only in 24-hour mode.)");
    }
    break;

    case 'q':
    RTC.sqwEnable(RTC.SQW_1Hz);
    Serial.println("Square wave output set to 1Hz");
    break;
    case 'Q':
    RTC.sqwDisable(0);
    Serial.println("Square wave output disabled (low)");
    break;
    
    case 'z':
    RTC.start();
    Serial.println("Clock oscillator started.");
    break;
    case 'Z':
    RTC.stop();
    Serial.println("Clock oscillator stopped.");
    break;
    
    case '>':
    in=SerialReadPosInt();
    in2=SerialReadPosInt();
    RTC.writeData(in, in2);
    Serial.print("Write to register ");
    Serial.print(in);
    Serial.print(" the value ");
    Serial.println(in2);
    break;    
    case '<':
    in=SerialReadPosInt();
    in2=RTC.readData(in);
    Serial.print("Read from register ");
    Serial.print(in);
    Serial.print(" the value ");
    Serial.println(in2);
    break;

    default:
    Serial.println("Unknown command. Try these:");
    Serial.println(" h## - set Hours       d## - set Date");
    Serial.println(" i## - set mInutes     m## - set Month");
    Serial.println(" s## - set Seconds     y## - set Year");
    Serial.println(" w## - set arbitrary day of Week");
    Serial.println(" t   - toggle 24-hour mode");
    Serial.println(" a   - set AM          p   - set PM");
    Serial.println();
    Serial.println(" z   - start clock     Z   - stop clock");
    Serial.println(" q   - SQW/OUT = 1Hz   Q   - stop SQW/OUT");
    Serial.println();
    Serial.println(" >##,###  - write to register ## the value ###");
    Serial.println(" <##      - read the value in register ##");
    
  }//switch on command
  
}

//read in numeric characters until something else
//or no more data is available on serial.
int SerialReadPosInt() {
  int i = 0;
  boolean done=false;
  while(Serial.available() && !done)
  {
    char c = Serial.read();
    if (c >= '0' && c <='9')
    {
      i = i * 10 + (c-'0');
    }
    else 
    {
      done = true;
    }
  }
  return i;
}

Et avec celui-çi j'ai également des erreurs :

1: FF-1F-3F 1F:73:32P
2: 12-02-20 21:39:33
3: 12-02-20 21:39:34
4: 12-02-20 21:39:35
5: 1F-02-20 21:39:36
6: 12-02-20 21:39:37
7: FF-02-20 21:39:38
8: 12-02-20 21:39:39
9: FF-03-20 21:39:40
10: 12-02-20 21:39:41
11: 12-02-20 21:39:42
12: FF-1F-3F 1F:3F:43P
13: 1F-02-20 21:39:44
14: 12-02-20 21:39:45
15: 12-02-20 21:39:46
16: 12-02-20 21:39:47
17: 12-02-20 21:39:48
18: 12-02-20 21:39:49
19: 12-02-20 21:39:50
20: 12-02-20 21:39:51
21: FF-1F-3F 21:39:52
22: 12-02-20 21:39:53
23: 12-02-20 21:39:54
24: 12-02-20 21:39:55
25: 12-02-20 21:39:56

ok, donc si avec une lib totalement différente il y a le même problème, je penche plutot pour une erreur de communication au niveau de l'I2C. Tes résistance de pull-up ont des valeurs normales ? Tu n'as pas par exemple deux dispositifs I2C incluant les résistance de pull-up ? (un seul des éléments du bus I2C doit les avoir normalement, sinon les résistances se divisent et donnent au final une valeur trop faible)

/*Sketch de lecture et programmation pour horloge RTC I2C DS1307
 * utilise la librairie DS1307 disponible sur le forum arduino,et basé sur l'exemple fourni
 * avec la lib.
 * Librairie DS1307 fournie par mattt et D. Sjunnesson
 * 
 * Programme sous licence GNU GPL
 * 
 * (c) bricofoy 2012
 */

#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h> 

#include <LiquidCrystal.h> // librairy du lcd

uint8_t rw = 25; // broche du read/wrtie du lcd
LiquidCrystal lcd(23,27,29,31,33,35);  / le brochage sur la mega

void setup() {
  Serial.begin(9600);
   if (rw != 255) {  //
		pinMode(rw,OUTPUT);
		digitalWrite(rw,LOW);
	}
  lcd.begin(20, 4);
  lcd.clear();
  usage();
  lecture_RTC();

}
int jour=1;
int valeur=0;
int commande=0;
char truc[2];	//buffer de lecture des valeurs
int i=0;

// explication de l'utilisation
void usage() {
  Serial.println("\nUSAGE : u U h[00-23]m[00-59]s[00-59]j0[1-7]D[01-31]M[01-12]A[00-49]");
  Serial.println("\nEXEMPLE : h09m35j03 regle l'heure sur 09h35 et jour de la semaine 3 (mardi).");
  Serial.println("\nListe des commandes : h** : heure, m** : minutes, s** : secondes, j0* : jour de la semaine");
  Serial.println("  D** : jour de la date, M** : mois, A** : annee.");
  Serial.println("  u ou U affichent ce message, tout autre caractere affiche l'heure.");
}

// fonction de lecture de l'heure dans le DS1307
void lecture_RTC() { 
	  Serial.print("\nHeure actuelle : ");
	  Serial.print(RTC.get(DS1307_HR,true)); //read the hour and also update all the values by pushing in true
	  Serial.print(":");
	  Serial.print(RTC.get(DS1307_MIN,false));//read minutes without update (false)
	  Serial.print(":");
	  Serial.print(RTC.get(DS1307_SEC,false));//read seconds
	  Serial.print(" ");                 // some space for a more happy life
	  Serial.print(RTC.get(DS1307_DOW,false));
          
	  Serial.print(" ");
	  Serial.print(RTC.get(DS1307_DATE,false));//read date
	  Serial.print("/");
	  Serial.print(RTC.get(DS1307_MTH,false));//read month
	  Serial.print("/");
	  Serial.println(RTC.get(DS1307_YR,false)); //read year 	  
}

// paramétrage de l'horloge
void ecriture_RTC() {
      commande = Serial.read();
      Serial.print("   "); //ici on envoie 3 espaces sur le terminal, sans ça la lecture suivante est fausse
			   //sinon il faut envoyer un seul espace avec println et ça marche aussi
      for (i=0;i<2;i++) {
	truc[i]=Serial.read();
	Serial.print(" "); //idem que plus haut : un espace à envoyer sinon ça foire. Ici un seul suffit.
      }
 
      valeur = byte((truc[0]-48)*10 + (truc[1]-48)); //-48 car la valeur ascii des chiffres =48 pour le 0, =49 pour le 1, etc 

      switch (commande) {
	case 'h' :
	  RTC.set(DS1307_HR,valeur);
	  Serial.print("champ heures regle sur ");
	  Serial.println(valeur,DEC);
	  break;
	case 'm' :     
	  RTC.set(DS1307_MIN,valeur);
	  Serial.print("champ minutes regle sur ");
	  Serial.println(valeur,DEC);
	  break;
	case 's' :     
	  RTC.set(DS1307_SEC,valeur);
	  Serial.print("champ secondes regle sur ");
	  Serial.println(valeur,DEC);
	  break;	 
	case 'D' :     
	  RTC.set(DS1307_DATE,valeur);
	  Serial.print("champ date regle sur ");
	  Serial.println(valeur,DEC);
	  break;  
	case 'j' :     
	  RTC.set(DS1307_DOW,valeur);
	  Serial.print("champ jour regle sur ");
	  Serial.println(valeur,DEC);
	  break;  
	case 'M' :     
	  RTC.set(DS1307_MTH,valeur);
	  Serial.print("champ mois regle sur ");
	  Serial.println(valeur,DEC);
	  break;  
	case 'A' :     
	  RTC.set(DS1307_YR,valeur);
	  Serial.print("champ annee regle sur ");
	  Serial.println(valeur,DEC);
	  break;  
	case 'u' :
	case 'U' :
	  usage();
	  break;
	default :
	  break;
      }
      lecture_RTC();
}


void loop() {
   if (Serial.available()) {
     ecriture_RTC();
   }
     
     lcd.setCursor(0, 0);  
  lcd.print(RTC.get(DS1307_HR,true)); //read the hour and also update all the values by pushing in true
   lcd.print(":");
   lcd.print(RTC.get(DS1307_MIN,false));//read minutes without update (false)
   lcd.print(":");
   lcd.print(RTC.get(DS1307_SEC,false));//read seconds
   lcd.setCursor(0,1);                
   jour=RTC.get(DS1307_DOW,false);
    switch(jour) { // Affiche sur 3 lettres le jour en cours
	  case 1:
	    lcd.print("LUN ");
	    break;
	 
	  case 2:
	    lcd.print("MAR ");
	    break;
	 
	  case 3:
	    lcd.print("MER ");
	    break;
	 
	  case 4:
	    lcd.print("JEU ");
	    break;
	 
	  case 5:
	    lcd.print("VEN ");
	    break;
	 
	  case 6:
	    lcd.print("SAM ");
	    break;
	 
	  case 7:
	    lcd.print("DIM ");
	    break;
	  }
lcd.setCursor(5,1);
   lcd.print(RTC.get(DS1307_DATE,false));//read date
   lcd.print("/");
   lcd.print(RTC.get(DS1307_MTH,false));//read month
   lcd.print("/");
   lcd.print(RTC.get(DS1307_YR,false));
     
     
     
    
}

j'ai toujours mon probleme de 0:0:0 mais pas tout le temps
mais surtout toujours pas d'incrémentation des secondes
mise a l'heure a 20:11:11 , il est 22:00 et toujours sur mon afficheur 20:11:11

J'ai ce code sous 1.0

ou as tu trouve la librairy RealTimeClockDS1307.h

complicyte1:
j'ai toujours mon probleme de 0:0:0 mais pas tout le temps
mais surtout toujours pas d'incrémentation des secondes
mise a l'heure a 20:11:11 , il est 22:00 et toujours sur mon afficheur 20:11:11

Curieux.

Avec mon code, essayes de rajouter RTC.start(); à la fin de la fonction setup() pour s'assurer du démarrage de l'horloge.

ATTENTION avec mon code il y a une erreur possible lors de la lecure du port série pour la mise à l'heure (c'était mon premier essai de lecture du port série... :stuck_out_tongue: ). Je suis en train de le corriger, ainsi que de corriger la lib DS1307.h que j'ai employé pour la faire fonctionner sur arduino1.0

Je posterai demain le code et la lib corrigée, pour le moment, dodo !

ou as tu trouve la librairy RealTimeClockDS1307.h

Ici : GitHub - davidhbrown/RealTimeClockDS1307: Yet another DS1307 Real-Time Clock library for Arduino (obsolete)

@ Bricofoy

Je regarderais demain les soudures et resistances. C'est le seul dispositif connecté sur ma mega,j'ai justement enlevé le reste.

J'utilise ce module :

Voila la version qui marche de mon code.

Il y a deux problèmes connus (je suis en train de corriger la lib) : lors du démarrage de l'horloge les secondes sont remises à 0, et lors de la modif d'une valeur sans avoir fait une lecture avant, toutes les valeurs sont re-écrites à celles de la dernière lecture... c'est un peu gênant :confused:

Je posterai la lib corrigée et modifiée pour arduino1.0 (pour le moment je l'ai modifiée pour 1.0 mais les deux bugs ne sont pas corrigés)

/*Sketch de lecture et programmation pour horloge RTC I2C DS1307
 * utilise la librairie DS1307 disponible sur le forum arduino,et basé sur l'exemple fourni
 * avec la lib.
 * Librairie DS1307 fournie par mattt et D. Sjunnesson
 * 
 * Programme sous licence GNU GPL
 * 
 * (c) bricofoy 2012
 */


// This is for compatibility with both arduino 1.0 and previous versions
#if defined(ARDUINO) && ARDUINO >= 100  
#include "Arduino.h"
#else
#include "WProgram.h"
#endif

#include <Wire.h>
#include <DS1307.h> 

void setup() {
  Serial.begin(9600);
  usage();
  lecture_RTC();
}


// explication de l'utilisation
void usage() {
  Serial.println("\nUSAGE : u U r R h[00-23]m[00-59]s[00-59]j0[1-7]D[01-31]M[01-12]A[00-49]");
  Serial.println("\nEXEMPLE : h09m35j03 regle l'heure sur 09h35 et jour de la semaine 3 (mardi).");
  Serial.println("\nCommandes : h** : heure, m** : minutes, s** : secondes, j0* : jour de la semaine");
  Serial.println("            M** : mois,  A** : annee,   D** : jour de la date.");
  Serial.println("            r stoppe l'horloge, R la demarre. Attention au demarrage les secondes sont remises à 0");
  Serial.println("            u ou U affichent ce message, tout autre caractere affiche l'heure.");
}

// fonction de lecture de l'heure dans le DS1307
void lecture_RTC() { 
	  Serial.print("\nHeure actuelle : ");
	  Serial.print(RTC.get(DS1307_HR,true)); //read the hour and also update all the values by pushing in true
	  Serial.print(":");
	  Serial.print(RTC.get(DS1307_MIN,false));//read minutes without update (false)
	  Serial.print(":");
	  Serial.print(RTC.get(DS1307_SEC,false));//read seconds
	  Serial.print(" ");                 // some space for a more happy life
	  Serial.print(RTC.get(DS1307_DOW,false));
	  Serial.print(" ");
	  Serial.print(RTC.get(DS1307_DATE,false));//read date
	  Serial.print("/");
	  Serial.print(RTC.get(DS1307_MTH,false));//read month
	  Serial.print("/");
	  Serial.println(RTC.get(DS1307_YR,false)); //read year 	  
}

// paramétrage de l'horloge
void ecriture_RTC() {
      char valeur=0;
      char commande=0;
  
      commande = Serial.read();
      delay(50);				//delai pour permettre la bonne lecture du port série.
      valeur=byte((Serial.read()-48)*10); 	//-48 car la valeur ascii du 0 est 48, celle du 1 est 49, etc. 
      delay(50);					//et*10 car on lit d'abord les dizaines
      valeur+=byte((Serial.read()-48));		//lecture des unités
	
      switch (commande) {
	case 'h' :
	  RTC.set(DS1307_HR,valeur);
	  Serial.print("champ heures regle sur ");
	  Serial.println(valeur,DEC);
	  break;
	case 'm' :     
	  RTC.set(DS1307_MIN,valeur);
	  Serial.print("champ minutes regle sur ");
	  Serial.println(valeur,DEC);
	  break;
	case 's' :     
	  RTC.set(DS1307_SEC,valeur);
	  Serial.print("champ secondes regle sur ");
	  Serial.println(valeur,DEC);
	  break;	 
	case 'D' :     
	  RTC.set(DS1307_DATE,valeur);
	  Serial.print("champ date regle sur ");
	  Serial.println(valeur,DEC);
	  break;  
	case 'j' :     
	  RTC.set(DS1307_DOW,valeur);
	  Serial.print("champ jour regle sur ");
	  Serial.println(valeur,DEC);
	  break;  
	case 'M' :     
	  RTC.set(DS1307_MTH,valeur);
	  Serial.print("champ mois regle sur ");
	  Serial.println(valeur,DEC);
	  break;  
	case 'A' :     
	  RTC.set(DS1307_YR,valeur);
	  Serial.print("champ annee regle sur ");
	  Serial.println(valeur,DEC);
	  break;  
	case 'u' :
	case 'U' :
	  usage();
	  break;
	case 'r' :
	  RTC.stop();
	  Serial.println("Horloge stoppee");
	  break;
	case 'R' :
	  RTC.start();
	  Serial.println("Horloge lancee");
	  break;
	default :
	  break;
      }
      lecture_RTC();
}

void loop() {
   if (Serial.available()) {
     ecriture_RTC();
    }
}

http://bricofoy.free.fr/forums/arduino/DS1307.zip

voila la nouvelle version de la lib DS1307 corrigée pour fonctionner avec arduino 1.0 ou les anciennes versions.

Correction de bugs :
-arret/mise en route de l'horloge ne remet plus les secondes à zéro
-modification de l'horloge est effectuée correctement même si l'horloge est en route

pour moi tout est ok

un très grand merci à vous tous !!!!! :slight_smile:

Merci pour ta mise à jour :slight_smile:

Une question, comment peut on stocker la valeur des minutes dans une variable pour déclencher un evenement à h+15 par exemple ?
Je ne trouve pas la syntaxe.

++

int valeur=0;
int seuil=15;

void loop()
{
valeur=RTC.get(DS1307_HR,true); //rafraichi le buffer et lit l'heure
if(valeur>seuil)
{
fais_des_trucs();
}
}

voila un truc dans le genre doit marcher.

j'ai pas testé j'ai écrit ça en live en passant, mais dans l'idée c'est ça.

Merci

C'est presque ce que j'avais fait sauf que j'avais mis :

if(valeur=seuil)
{
fais_des_trucs();
}
else
{........

Et je viens de voir qu'avec = ce n'est pas la bonne syntaxe car "valeur" prends la valeur de "seuil"
et du coup la condition est toujours vraie.

(Je vais chercher comment faire l'équivalent de égal, je vais bien trouver ça qq part...)

@+

P.S Je viens de cabler mon LCD 4x20 et tout fonctionne (pour une fois :D)

ça serait == mais il vaut mieux faire >= car sinon ça ne sera vrai qu'au moment exact, mais pas à la minute suivante.

enfin je sais pas ce que tu veux faire exactement.

Maintenant que tu le dis cela me revient, mais entre arduino php Mysql et vb mon cerveau encaisse un peu trop d'infos à la fois :smiley:

enfin je sais pas ce que tu veux faire exactement.

En fait à chaque heure arduino va ouvrir un fichier sur mon serveur qui remplira une base de donnée avec la température mesurée dans la pièce.
Je faisait cela avec la fonction delay pour me depanner mais avec le rtc c'est quand même plus propre :wink:

Bonne soirée.

ok, donc c'est plutot == qu'il te faut.