Besoin aide programmateur RTC DC1302

bonsoir a tous et toute,

voila j'ai un Pb avec mon code

  1. sur le serial il m'affiche une fois sur deux la bonne date et heure et un fois la mauvaise

  2. je n'arrive pas a faire une fonction if qui pilote mon module relais en fonction de l'heure

auriez vous une idée de code et pourquoi le mien fonctionne pas

(mauvaise librairie, mauvais code je suis perdu avec se module rtc)

voici mon code

#include <DS1302.h>
#include <Wire.h>

DS1302 rtc(2, 3, 4);

const int RELAIS = 8; //declaration broche 8 output

boolean etatRelais = 0; // Etat du relais (on / off)

void setup()
{

// rtc.halt(false); // utiliser juste une fois pour mettre RTC a l'heure si pas la bonne
// rtc.writeProtect(false); // utiliser juste une fois pour mettre RTC a l'heure si pas la bonne

Serial.begin(9600);

pinMode(RELAIS, OUTPUT); //Configure la broche RELAIS en sortie

// rtc.setDOW(TUESDAY); // enlever les // pour mettre le module a jour
// rtc.setTime(22, 40, 0); // enlever les // pour mettre le module a l'heure 22:40:00 (Formato 24hr)
// rtc.setDate(28, 8, 2018); // enlever les // pour mettre le module a l'heure 28 aout 2018
}

void loop()
{

// Serial.print(rtc.getDOWStr());// renvoi le jour de la semaine
// Serial.print(" ");

// Serial.print(rtc.getDateStr()); // renvoi la date 28/02/2018
// Serial.print(" -- ");

Serial.println(rtc.getTimeStr()); // renvoi l'heure

delay (1000);
///////////////////////////////////////////////

if (now.minute() > 50 && now.minute() < 55) {

etatRelais=!etatRelais; // inverse l'état du relais
digitalWrite(RELAIS,etatRelais); // met la broche de commande dans l'état voulu
Serial.println(etatRelais); //Affichage dans le serial monitor pour contrôle

delay(10000); // pause
}
else {

}
}

merci a vous pour votre aide

hello
dans les exemple tu as "set_clock.ino" ou ICI

Il utilise cette bibliothèque : ArduinoAquariumController. Il vaut mieux utiliser l'exemple ICI

Ca donnerait :

#include <DS1302.h>

// Init the DS1302
DS1302 rtc(2, 3, 4);

// Init a Time-data structure
Time t;

// Relais
const int RELAIS = 8; //declaration broche 8 output
boolean etatRelais = false; // Etat du relais (on / off)

void setup()
{
  // Set the clock to run-mode, and disable the write protection
  rtc.halt(false);
  rtc.writeProtect(false);
  
  // Setup Serial connection
  Serial.begin(9600);

  pinMode(RELAIS, OUTPUT); //Configure la broche RELAIS en sortie 
}

void loop()
{
  // Get data from the DS1302
  t = rtc.getTime();
  
  // Send date over serial connection
  Serial.print("Today is the ");
  Serial.print(t.date, DEC);
  Serial.print(". day of ");
  Serial.print(rtc.getMonthStr());
  Serial.print(" in the year ");
  Serial.print(t.year, DEC);
  Serial.println(".");
  
  // Send Day-of-Week and time
  Serial.print("It is the ");
  Serial.print(t.dow, DEC);
  Serial.print(". day of the week (counting monday as the 1th), and it has passed ");
  Serial.print(t.hour, DEC);
  Serial.print(" hour(s), ");
  Serial.print(t.min, DEC);
  Serial.print(" minute(s) and ");
  Serial.print(t.sec, DEC);
  Serial.println(" second(s) since midnight.");

  // Send a divider for readability
  Serial.println("  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -");
  
  // Wait one second before repeating :)
  delay (1000);

  if (t.min > 50  && t.min < 55) {
   etatRelais=!etatRelais; // inverse l'état du relais
   digitalWrite(RELAIS,etatRelais); // met la broche de commande dans l'état voulu
   Serial.println(etatRelais); //Affichage dans le serial monitor pour contrôle
   delay(10000); // pause
 }
 else {
 
 }

}

Toute la partie avec les Serial.print est juste pour afficher des infos mais ne sert à rien pour ton application. Une fois que tu as vu qu'elle fonctionne tu peux ôter ces lignes si tu n'en as pas besoin.

Bonjour,

Lesept je viens de copier ton code dans l'arduino et voila ce qu'on peux lire dans le serial print

Today is the 3. day of April in the year 2012.
It is the 2. day of the week (counting monday as the 1th), and it has passed 11 hour(s), 24 minute(s) and 8 second(s) since midnight.


Today is the 7. day of September in the year 2018.
It is the 5. day of the week (counting monday as the 1th), and it has passed 17 hour(s), 48 minute(s) and 11 second(s) since midnight.


quelqu'un a une idée pourquoi une fois sur deux j'ai la bonne date et heure et l'autre non

c'est un truc de fou je vais voir du coté du message de dfgh en attendant vos lumière

merci de votre aide

spyderpaint:
c'est un truc de fou je vais voir du coté du message de dfgh en attendant vos lumière

est-ce que cet exemple fonctionne pour vous ?

la librairie a 5 ans, date d'une version de l'IDE d'ancienne génération et n'a pas eu bcp de maintenance entre temps...

spyderpaint:
Today is the 7. day of September in the year 2018.
It is the 5. day of the week (counting monday as the 1th), and it has passed 17 hour(s), 48 minute(s) and 11 second(s) since midnight.


quelqu'un a une idée pourquoi une fois sur deux j'ai la bonne date et heure et l'autre non

La seconde date / heure est correcte, que se passe-t-il après ? Ça reste correct ou non ?

La seconde date / heure est correcte, que se passe-t-il après ? Ça reste correct ou non ?

non une fois sur deux a chaque boucle ca change comme il y a une pause d'une second

ba une second sur deux j'ai pas la bonne heure, et quand je change le temps de pause

delay (500) ba c'est plus une fois sur deux des fois deux fois bon puis deux fois faux.

ca n'a pas l'ai sistematique

peux etre une défaillance carte ( ca me fais pense que j'en ai une autre identique
et une autre en I2c je vais tester les deux et je reviens vers vous

j'irai lire le lien de JML aussi

merci a vous si d'autre on des idée au déjà eu le PB

merci

bon j'ai essayer avec le module tiny i2c ca fonctionne (avec une autre code bien entendu)

et j'ai essayer une autre module DS1302 idem j'ai la bonne heure une fois sur 2

C'est vraiment bizarre. Moi je n'ai pas de DS1302 donc je ne peux pas tester.
J'ai souvent lu sur le forum que les DS3231 sont plus précises que les DS1302 (une histoire de quartz au lieu d'un circuit oscillant) qui dérivent dans le temps; mais jamais ce genre de problème.

Ça pourrait venir de la bibliothèque que tu utilises.
Lis ce post le message #4 indique 2 bibliothèques et le #8 donne un code que tu peux tester.

L'exemple SetSerial de la bibli DS1302RTC affiche l'heure toutes les secondes. S'il ne fonctionne pas c'est que tu as un problème hardware.

Mais je te conseille d'investir dans un DS231...

J'ai souvent lu sur le forum que les DS3231 sont plus précises que les DS1302 (une histoire de quartz au lieu d'un circuit oscillant) qui dérivent dans le temps; mais jamais ce genre de problème.

Le DS3231 possède surtout un oscillateur interne calibré et surtout compensé en température.

@+