Go Down

Topic: plusieurs librairies RTC1307 ? avec des syntaxes <> ?  (Read 588 times) previous topic - next topic

gosselien

Bonjour,
Question de débutant:

Je tente de mettre l'heure sur ma RTC et j'ai sur le faire (l'heure s'affiche bien dans le moniteur) mais je vois différents codes de personnes qui en aident d'autres, mais aucun ne me permet de récupérer l'heure de la RTC avec un code simple.
Il me semble que suivant les aides, la manière de récupérer l'heure est différente.
D'autre part, quel type de variable pour l'heure et les minutes dois-je utiliser ? int ou autre ?

Voilà mon code:
Code: [Select]

#include <Wire.h>
#include <TimeLib.h>
#include <DS1307RTC.h>

void setup() {
  Serial.begin(9600);
  while (!Serial) ; // wait for serial
  delay(200);
  Serial.println("DS1307RTC Read Test");
  Serial.println("-------------------");
}
// vidéo ici:  https://www.youtube.com/watch?v=lyvoOEO-Ncg&feature=youtu.be
void loop() {
  tmElements_t tm;
  if (RTC.read(tm)) {
    Serial.print("Time = "); // affichage de la date et heure
    print2digits(tm.Hour);
    Serial.write(':');
    print2digits(tm.Minute);
    Serial.write(':');
    print2digits(tm.Second);
    Serial.print(", Date (D/M/Y) = ");
    Serial.print(tm.Day);
    Serial.write('/');
    Serial.print(tm.Month);
    Serial.write('/');
    Serial.print(tmYearToCalendar(tm.Year));
    Serial.println();
  } else {
    if (RTC.chipPresent()) {
      Serial.println("The DS1307 is stopped.  Please run the SetTime");
      Serial.println("example to initialize the time and begin running.");
      Serial.println();
    } else {
      Serial.println("DS1307 read error!  Please check the circuitry.");
      Serial.println();
    }
    delay(9000);
  }
  delay(1000);
  ///////////////////////////////////////////////////////////////////////////
  int heure = RTC.get(DS1307RTC,true);  // ESSAI1 Erreur sur HEURE !!!
  int heure = (tm.hour);             // ESSAI2 Erreur sur
  // si je sais récupérer, j'irai ensuite comparer mais ça ne fonctionne pas
  // un peu l'impression que les lib RTC sont nombreuses
  Serial.print(heure); // Affichage de l'heure récupérée avant de tester si elle est = à 8:00
  //
}
// si le chiffre est < 2 digits, on affiche un zéro avant !
void print2digits(int number) {
  if (number >= 0 && number < 10) {
    Serial.write('0');
  }
  Serial.print(number);
}

void ComparerHeure() {  
//  int heure = (tm.hour);
//  Serial.print(heure);
}


J-M-L

J'utilise la RTCLib de adafruit; elle a une version pour 1307. Chaque librairie peut avoir ses propres façons de fonctionner. Pour les types allez voir le code source de votre librairie, par exemple la classe DateTime de la librairie RTCLib utilisera des uint16_t pour l'année et des uint8_t pour le reste
Code: [Select]
    uint16_t year() const       { return 2000 + yOff; }
    uint8_t month() const       { return m; }
    uint8_t day() const         { return d; }
    uint8_t hour() const        { return hh; }
    uint8_t minute() const      { return mm; }
    uint8_t second() const      { return ss; }
    uint8_t dayOfTheWeek() const;


Notez qu'une 1307 perd très vite en précision il vaut mieux acheter une DS3231 par exemple
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

gosselien

J'utilise la RTCLib de adafruit; elle a une version pour 1307. Chaque librairie peut avoir ses propres façons de fonctionner. Pour les types allez voir le code source de votre librairie, par exemple la classe DateTime de la librairie RTCLib utilisera des uint16_t pour l'année et des uint8_t pour le reste
Code: [Select]
    uint16_t year() const       { return 2000 + yOff; }
    uint8_t month() const       { return m; }
    uint8_t day() const         { return d; }
    uint8_t hour() const        { return hh; }
    uint8_t minute() const      { return mm; }
    uint8_t second() const      { return ss; }
    uint8_t dayOfTheWeek() const;


Notez qu'une 1307 perd très vite en précision il vaut mieux acheter une DS3231 par exemple
Merci , mais la précision de 8:00 n'est pas absolument nécessaire mais j'avais besoin d'une RTC.
La précision sera pour le temps que va tourner un moteur à 3 horaires dans la journés, et pour ça je vais utiliser millis()

Merci !

J-M-L

Elle peut perdre 4 à 5 secondes par jour... sur 6 mois ça fait plus d'un quart d'heure
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

gosselien

Ok

en effet ça peut faire beaucoup :)

Je vais regarder ça de plus près

Merci !!!

dbrion06

A noter que la RTClib de lady Ada permet de gèrer aussi bien ... une absence de RTC (le resonnateur d'Arduino a une précision de 10 -4/10-5: ca 10 s /jour de dérive) qu'un DS1307 ou un 3231: si on change d'horlage, pas besoin de faire des adaptations lourdes au code.

gosselien

utilisera des uint16_t pour l'année et des uint8_t pour le reste
Code: [Select]
    uint16_t year() const       { return 2000 + yOff; }
    uint8_t month() const       { return m; }
    uint8_t day() const         { return d; }
    uint8_t hour() const        { return hh; }
    uint8_t minute() const      { return mm; }
    uint8_t second() const      { return ss; }
    uint8_t dayOfTheWeek() const;


Notez qu'une 1307 perd très vite en précision il vaut mieux acheter une DS3231 par exemple
Je suis allé chercher  RTCLib de adafruit.
Je dois me tromper quelque part car j'ai ceci:

2165/165/165 (Thursday) 165:165:85
 since midnight 1/1/1970 = 1560383185s = 18059d

Quelle est la syntaxe pour avoir heure-minute-seconde actuelles pour les comparer  des heures encodées en début de programme ?
Pour l'instant je tente simplement à obtenir h-m-s et je n'y arrive pas .. Quand j'aurai compris , je mettrai mes heures en haut , c'est à dire 8:00:02 - 13:00:02

La RTC de la carte UNO a une pile, mais je ne comprends pas   

merci de votre aide !

Go Up