Initialisation d'une horloge RTC DS 1302

Bonjour,

Pour mon projet domotique j'ai besoin d'une horloge temps réelle.
Mon matériel
Arduino uno
DS1302

J'ai chargé le programme trouvé sur ce site

#include "Wire.h"
#include "LiquidCrystal_I2C.h"
LiquidCrystal_I2C LCD(0x27,16,2);
 
#include "iarduino_RTC.h"
iarduino_RTC time (RTC_DS1302,7,5,6);  // pour module DS1302

void setup() {
   Serial.begin(9600);
   LCD.init();
   LCD.backlight();
   time.begin();
   // 0  sec, 30 min, 18 hour, 2 date, january, 2022, wed
   time.settime(0, 30, 18, 2, 1, 22, 0);
}

void loop() {
   // si 1 seconde s'est écoulée affiche l'heure
   if (millis() % 1000 == 0) {
      Serial.println(time.gettime("d-m-Y, H:i:s, D"));

      LCD.setCursor(0,0);
      LCD.print(time.gettime("d M Y, D"));
      LCD.setCursor(4,1);
      LCD.print(time.gettime("H:i:s"));
   }
}

Et j'obtiens le résultat suivant :
00-00-2000, 00:00:00, Dec

Ce qui n'est pas logique puisque normalement je devrai obtenir
02-01-2022 18-30-00 Wenesday

Si quelqu'un pouvait me conseiller sur la procédure à suivre ...

Merci d'avance

hello
tu as posté dans la mauvaise rubrique.
attendons la patrouille

la patrouille l'a mis dans le bon forum pour cette fois ci... :slight_smile:

pourquoi prendre une bibliothèque russe...

hello
voici le code de l'exemple "set time" de ta librairie

#include <iarduino_RTC.h>
iarduino_RTC time(RTC_DS1307);
void setup() {
    delay(300);
    Serial.begin(9600);
    time.begin();
    time.settime(0,51,21,27,10,15,2);  // 0  сек, 51 мин, 21 час, 27, октября, 2015 года, вторник
}
void loop(){
    if(millis()%1000==0){ // если прошла 1 секунда
      Serial.println(time.gettime("d-m-Y, H:i:s, D")); // выводим время
      delay(1); // приостанавливаем на 1 мс, чтоб не выводить время несколько раз за 1мс
    }
}

ça c'est pour une DS1307, il a une DS1302

7 5 et 6 sont bien connectés aux pins RST CLK et DAT?

Effectivement j'avais interverti CLK et DAT
Maintenant j'obtiens les bonnes valeurs
Merci pour votre aide

"pourquoi prendre une bibliothèque russe..." source https://arduino-france.site/rtc-arduino/

:wink:

bonne continuation

Merci aussi de me dire dans quelle section je dois poster ce type de message ? :wink:
J'ai l'habitude des forums mais la j'ai 3 choix
Tutoriels et cours
Réalisations et projets finis
Le bar

Il me semblait avoir posté dans "Réalisations et projets finis"...

Peut-être un lien vers les règles de ce forum ?

Merci d'avance

il y a un forum englobant qui est le forum francophone, c'est là où il faut poster (ce fil est au bon endroit)
les 3 autres sont des sous catégories de la catégorie "Français"

cf les recommandations listées dans "Les bonnes pratiques du Forum Francophone” (post épinglé en haut du forum francophone)

Ok merci et bonne soirée :wink:

Bonjour,

Je continu mon programme avec comme premier objectif est d'activer une sortie à des plages horaires.

Je bloque sur comment récupérer l'heure sous forme de variable (uniquement les heures)

Mon embryon de programme :wink:

saisissez ou collez du code ici

<
#include "Wire.h"
#include "LiquidCrystal_I2C.h"
LiquidCrystal_I2C LCD(0x27,16,2);
 
#include "iarduino_RTC.h"
iarduino_RTC time (RTC_DS1302,7,5,6);  // pour module DS1302



void setup() {
   Serial.begin(9600);
   LCD.init();
   LCD.backlight();
   time.begin();
   // 0  sec, 30 min, 18 hour, 2 date, january, 2022, wed
   time.settime(0, 18, 19, 28, 10, 23, 6);

   int relay = 12; //declaration sortie relais
   pinMode(relay, OUTPUT); 
   digitalWrite(relay, HIGH);
   delay(1000);
   digitalWrite(relay, LOW);
   delay(1000);
   
}

void loop() {
   // si 1 seconde s'est écoulée affiche l'heure
   if (millis() % 1000 == 0) {
      Serial.println(time.gettime("d-m-Y, H:i:s, D"));

      LCD.setCursor(0,0);
      LCD.print(time.gettime("d M Y, D"));
      LCD.setCursor(4,1);
      LCD.print(time.gettime("H:i:s"));

      int departPompe;
      int heureActuelle;
      int arretPompe;

      // On lit l'heure
      heureActuelle = time();``
/>

Pour mettre l'horloge à l'heure, je te conseille de faire un programme séparé, qui ne fait que ça.
En l'état, ton programme remet toujours la m^me heure à chaque fois qu'il redémarre, ce n'est pas ce qu'on veut en général avec une RTC.
La RTC, on la met à l'heure une fois, puis on "l'oublie" : tant que la pile est bonne, on peut lire l'heure. D'ou l'idée d'un programme spécialisé pour la mise à l'heure.

Bonjour,

Pour commencer, merci pour votre conseil.
Pour être certain de bien comprendre, un programme Arduino comporte :

Une première partie ou je déclare les bibliothèques utilisées dans le programme.

Une seconde void setup()
la première fonction à être exécutée qui n'est exécutée qu'une seule fois. . Celle-ci contient les instructions qui définissent l'adressage des E/S de l'Arduino.

Une dernière void loop()
Gère les taches en temps réel.

Comme la mise à jour de l'heure n'est effectuée que dans void setup() celle-ci n'est effective uniquement lorsque je charge le programme dans l'Arduino.

Ou bien est-il possible d'empiler plusieurs programmes soit :

void setup()

void loop()

Je suis débutant sous Arduino donc mes questions peuvent sembler stupides, mais j'apprends de mes erreurs :wink:

Ca n'a rien à voir avec l'organisation des fonctions (setup, loop) dans un prog Arduino.
Une RTC est un circuit électronique avec un quartz qui permet de connaître l'heure et la date.
Pour cela il faut:
1 - initialiser la date et l'heure dans la RTC. Ceci doit être fait 1 seule fois, quand la RTC est neuve.
2 - avoir une pile pour que la RTC ne perde pas la date et l'heure quand l'Arduino sur laquelle elle est branchée n'est plus alimenté (ou subit un reset). En l'absence de pile, la RTC perd la date et l'heure, qui sont mis à ... + ou - n'importe quoi.

Donc, quand tu achètes un RTC, tu la montes sur un Arduino, et tu lances un petit prog qui ne fait qu'une chose : mettre la RTC à la bonne date et heure. Evidemment tu as installé une pile neuve dans la RTC ! Tant que la pile est chargée, TU N'AS PLUS BESOIN DE TE SOUCIER DE LA MISE à L'HEURE !! Le RTC marche toute seule avec sa pile, et maintient la date et l'heure.

Ensuite tu peux charger un autre programme dans l'Arduino. Cet autre programme n'a pas à se soucier de mettre la bonne heure : c'est déjà fait ! Par contre il doit se soucier de savoir si la RTC fonctionne correctement (un jour ou l'autre la pile va défaillir...), donc il interroge la RTC "Tu vas bien ?", si KO, passer en mode dégradé, ou afficher une message KO et bloquer...
Si OK, surtout ne pas se préoccuper de changer l'heure !!! Car à chaque redémarrage, le prog mettrait toujours la même heure !

Regarder cet exemple

Merci , j’analyse et je teste dès que possible :wink:

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