DS 1307

Bonjour, je suis nouveau par ici,

j'ai un peu crawlé le forum sur le sujet sans trouver de réponse satisfaisante sur mon problème : je passe brièvement sur le contexte je bricole un système de pompe pour mon potager. j'aimerai fait des taches à heure fixe, et prendre en compte certains événement passés ... bla bla bla ce qui m'ammene a la puce DS 1307 qui semble répondre parfaitement a mes besoins : une horloge et une memoire . mon probleme je n'arive pas a l'utiliser apparemment, et après 3 nuits a chercher des réponse, je dépose ce tread ici avant de détruire mon PC, mes cartes Arduino, et la p***** de puce sus mentionnée.

je précise que j'ai viré les éléments relatif a mon projet j'ai gardé ci dessous que ce qui plante : l'horloge ça va : c'est utiliser la RAM annexe qui me pose problème

dans la partie en rouge je set des valeurs a "42" apres la date dans partie mémoire , puis plus tard je voudrais récupérer cette meme valeur, mais non je recupere autre chose (165)

//Arduino 1.0+ Only
//Arduino 1.0+ Only

#include "Wire.h"
#define DS1307_ADDRESS 0x68
byte zero = 0x00;
int pin_relay = 2;

void setup(){
Wire.begin();
Serial.begin(9600);
pinMode(pin_relay, OUTPUT);
digitalWrite(pin_relay,LOW ); 
}

void loop(){
printDate();
delay(1*1000);
}

void set_RTC(){
int DT_list[] = {00,37,23,2,18,04,17,[color=red]42,42,42,42[/color]};// seconde ; minute ; hour ; day of week ; day of month ; month ; year 
 Wire.beginTransmission(DS1307_ADDRESS);
//T(00-59)(00-59)(00-23)(1-7)(01-31)(01-12)(00-99) 
 Wire.write((byte)0x00); 
 for (int j=0 ; j <10 ; j++){
  Wire.write(decToBcd(DT_list[j])); 
 }
 Wire.endTransmission();  
}

void printDate(){ 

Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero);                   // Reset the register pointer
Wire.endTransmission();

Wire.requestFrom(DS1307_ADDRESS, 7);

int second = bcdToDec(Wire.read());
int minute = bcdToDec(Wire.read());
int hour = bcdToDec(Wire.read() & 0b111111); //24 hour time
int weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
int monthDay = bcdToDec(Wire.read());
int month = bcdToDec(Wire.read());
int year = bcdToDec(Wire.read());
[color=red]int next_1 = bcdToDec(Wire.read());
  int next_2 = bcdToDec(Wire.read());
  int next_3 = bcdToDec(Wire.read());
  int next_4 = bcdToDec(Wire.read());[/color]
String date_string = String(month) + "/" + String(monthDay) + "/"+ String(year) + " " + String(hour) + ":" + String(minute)+ ":" + String(second)  + "    " +  String(next_1);  
Serial.println (date_string);

}



byte bcdToDec(byte val)  {  return ( (val/16*10) + (val%16) );}

byte decToBcd(byte decimal) { return (decimal / 10 * 16) + (decimal % 10);}

avez vous une idée de ce qui manque ?

hello :slight_smile:
voici un prg fait par Bricollo ( merci à lui)

je l'ai retrouvé dans mes archives et je l'avais noté "ok" donc testé positivement.

tu devrais t'en sortir

RTC_ext_UNO_ok.zip (2.57 KB)

merci Beaucoup , je teste ça.

et vous dit quoi ...

j'essaierai aussi de faire une synthèse sur pourquoi mon code ne marche pas !

Salut,

J'avais eu un soucis similaire et il s'est avéré que ma puce n'était pas "lancée".
Est ce que tu obtiens aussi 165 pour les heures-minutes-secondes ?

Si tu veux, tu peux aussi télécharger une librairie toute faite et parfaitement fonctionnelle ci-dessous.

Il te suffit de l'installer dans l'IDE arduino et de jeter un coup d'oeil dans les exemples pour comprendre comment ça marche :wink:

EDIT : comme l'upload n'a pas l'air de marcher je l'ai mis sur ma dropbox :slight_smile: