DS3231 ... help

Bonjour

Dans ce sketch le nom du jour apparait clairement sous forme de Lundi etc à l'aide des deux lignes suivantes :
char NomJour[7][12] = {"Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"};
jour = NomJour[now.dayOfTheWeek()];

J'aimerais faire pareil pour les mois mais je ne trouve pas l'équivalent de "dayOfTheWeek()" pour les mois de l'année

Une idée?

Voici le skech :

#include<Wire.h>
#include "RTClib.h" //library DS3231

RTC_DS3231 rtc;
char NomJour[7][12] = {"Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"};
//char NomMois[12][12] = {"Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Decembre"};
String jour;
int date, mois, annee, heure, minute, seconde;
float temperature;

void setup () {
  Serial.begin(9600);
  if (! rtc.begin()) {
    Serial.println("recherche RTC");
    while (1);
  }

  //chargement de l'heure et date dans le DS3231
  //rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  //rtc.adjust(DateTime(2025,3,06,10,21,0));
}

void loop () {
  DateTime now = rtc.now();
  jour   = NomJour[now.dayOfTheWeek()];
  date = now.day();
  mois  = now.month();
  annee   = now.year();
  heure     = now.hour();
  minute   = now.minute();
  seconde   = now.second();

  Serial.println(String() +jour+"," +date+"-"+mois+"-"+annee);
  Serial.println(String() +heure+":" +minute);
  Serial.println();
  delay(3000);
}


Bonjour,

Extrait de RTCLib.h

  /*!
      @brief  Return the month.
      @return Month number (1--12).
  */
  uint8_t month() const { return m; }

J'ai écris ceci mais j'obtient dans le moniteur ceci :
month=304
Jeudi,6-304-2025
17:3

sketch

#include<Wire.h>
#include "RTClib.h" //library DS3231

RTC_DS3231 rtc;
char NomJour[7][12] = {"Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"};
char NomMois[12][16] = {"Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Decembre"};
String jour;
int date, mois, moiscor, annee, heure, minute, seconde;

void setup () {
  Serial.begin(9600);
  if (! rtc.begin()) {
    Serial.println("recherche RTC");
    while (1);
  }

  //chargement de l'heure et date dans le DS3231
  //rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  //rtc.adjust(DateTime(2025,3,06,10,21,0));
}

void loop () {
  DateTime now = rtc.now();
  jour   = NomJour[now.dayOfTheWeek()];
  date = now.day();
  moiscor  = NomMois[now.month()];
  annee   = now.year();
  heure     = now.hour();
  minute   = now.minute();
  seconde   = now.second();
  Serial.print("month=");
  Serial.println(moiscor);
  Serial.println(String() +jour+"," +date+"-"+moiscor+"-"+annee);
  Serial.println(String() +heure+":" +minute);
  Serial.println();
  delay(3000);
}

Oui ok mais j'obtiens un chiffre .. et je voudrais un mot comme Janvier etc

avec la fonction dayOfTheWeek tu obtiens aussi un nombre.
Donc tu applique exactement le même principe.

Mais ce n'est pas ce que tu as fait dans ton programme.
NomMois[now.month()] va te retourné la chaine de caractère de l'element du tableau correspondant.
Mais je ne sais pas pourquoi tu as déclaré ta variable moiscor comme un entier.

Donc normalement tu devrais avoir un erreur ou au moins un warning, te disant que tu essaye de mettre un char[] dans un int.
Sinon si tu veux une chaine, il faut que tu définisse une variable qui peut accueillir une chaine.

Probleme résolu après remaniement du sketch suivant les indications de Terwal ... merci à lui
Resultat :
Lundi 6 mars 2025
21:16

Sketch :

#include<Wire.h>
#include "RTClib.h" //library DS3231

RTC_DS3231 rtc;
char NomJour[7][12] = {"Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"};
char NomMois[12][12] = {"Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Decembre"};
String jour, moiscor;
int date, mois, annee, heure, minute, seconde;

void setup () {
  Serial.begin(9600);
  if (! rtc.begin()) {
    Serial.println("recherche RTC");
    while (1);
  }

  //chargement de l'heure et date dans le DS3231
  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  rtc.adjust(DateTime(2025,3,06,21,15,0));
}

void loop () {
  DateTime now = rtc.now();
  jour   = NomJour[now.day()-2];
  date = now.day();
  moiscor  = NomMois[now.month()-1];
  annee   = now.year();
  heure     = now.hour();
  minute   = now.minute();
  seconde   = now.second();

  Serial.println(String() +jour+ " " +date+ " " +moiscor+ " " +annee);
  Serial.println(String() +heure+ ":" +minute);
  Serial.println();
  delay(3000);
}

1 Like

Encore une dernière demande
si les minutes sont 6 minutes l'affichage dans le moniteur donne :
Jeudi 6 Mars 2025
22:6

comment afficher "22:06"?

Essaie ceci
Serial.println(String() +heure+ ":" +(minute<10? "0":"")+ minute);

Je ne sais pas si la cause était une étourderie ou un manque de connaissance, mais si c'est le second, je sais que tu n'aimes pas entendre ça, mais tu gagnerais vraiment du temps à passer 2h à lire un cours C++.

J'entends déjà @jpbbricole, me dire, que c'est comme ça qu'il a appris et qu'il ne voit pas pourquoi changer une méthode qui marche ou que c'est pas à vos âges que vous aller vous remette à l'école.
Mais franchement entre le temps que tu perds et les limitations sur tes projets que cela engendre, cela me "désespère" de voir tout ce potentiel gâché :disappointed_relieved:
Mais bon c'est ton temps et tu le gère bien comme tu veux, mais je n'arrive pas à me résoudre de laisser faire :slight_smile:

Ok ça marche ... merci fdufnews

Bonjour
La bibliothèque RTClib utilise les broches 4 et 5 pour son I2C
Mais celles-ci sont déjà utilisées pour ma carte GPRS que je sais modifier dans mon scketch mais cela nécessiterait de modifier mon PCB aussi

Avant de passer par ce changement de hardware, y aurait-il moyen de modifier les broches du RTC?

J'ai cherché dans TRClib.h si on pouvait changer l'attribution des broches I2c mais je n'ai pas trouvé

Comment faire?

NB : le scanner I2C me donne deux adresses pour le RTC : 0x57 et 0x68

Bonjour jo_6466

Ce n'est pas que la bibliothèque RTClib, mais le bus i2C, ça correspond aussi à ces 2 broches elles sont en parallèles:


Je pense qu'il serait très difficile, voire impossible de déplacer ce bus i2C.

Oui, 0x68 est l'adresse de la RTC et 0x57 celle de la mémoire EEPROM qui est sur le module.
Cordialement
jpbbricole

Merci jpbricole pour tes renseignements
Je me suis finalement décidé de modifier mon PCB et ai mis mon GPRS sur les pines 12-13 afin que les pines 4 et 5 restent attribuées à ma RTC

Tout fonctionne maintenant

Bonsoir jo_6466

Super :+1:

Bonne continuation.

Bonne nuit !
jpbbricole

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