[RÉSOLU] Module RTC DS1302 récalcitrant

Bonjour
Matériel :

  • Une carte Arduino Uno ( c'est uniquement pour faire des tests )
  • Un module RTC DS1302
  • Un écran LCD i2c 1602

Câblage :
image
La librairie que j'ai utilisé :

Le tuto que j'ai utilisé :

Mon problème :
J'ai utilisé le code du tuto pour tester mon module et commencer a faire joujou avec. Mais maintenant, j'aimerai le comprendre. Il y a une ligne que je ne comprends pas, c'est celle-ci :

   // 0  sec, 30 min, 18 hour, 2 date, january, 2022, wed
   time.settime(0, 30, 18, 2, 1, 22, 0);

Elle sert a mettre l'horloge a jour. Mais pour la réglée a la date d'aujourd'hui ( 0 s, 0 min, 17h, 17 j, mai, 2023, mercredi ), je ne comprend pas. Dans le commentaire, une chose me dérange :

wed = wednesday, mais dans le code, Wed correspond a 0...

Cela voudrai dire que Thursday : 1 ?
La doc de la librairie est en russe...
Si vous avez une doc en français/anglais, ou que vous avez déjà fait joujou avec cette librairie et que vous savez comment faire, je suis preneur :slight_smile:
Voici le code exemple du tuto :


#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
// iarduino_RTC time (RTC_DS1307);     // pour module DS1307 i2C
// iarduino_RTC time (RTC_DS3231);     // pour module  DS3231 i2C

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"));
   }
}

Merci d'avance
Cordialement
Pandaroux007

EDIT : autre question, cette ligne :

Serial.println(time.gettime("d-m-Y, H:i:s, D"));

Les lettres servent a appeler une partie de la date ? Par exemple d est l'heure, m les minutes, etc ( ce sont des exemples... ) ?

C'est un peu ça : c'est un format de sortie. Tu trouveras plus d'infos ici : ça s'inspire probablement de get_time
https://en.cppreference.com/w/cpp/io/manip/get_time

Tu peux tester en changeant l'ordre des lettres du format, pour voir s'il change l'affichage :
Serial.println(time.gettime("D Y-m-d, H:i:s"));
devrait mettre le nom du jour en premier et changer l'ordre de la date.
Serial.println(time.gettime("D Y-m-d, I:i:s p"));
"devrait" afficher l'heure avec AM/PM...

EDIT : en lisant la doc, avec traduction automatique Deepl, on trouve :

// s - Retourne les secondes de 00 à 59 (deux chiffres).
// i - Retourne les minutes de 00 à 59 (deux chiffres).
// h - Retourne les heures au format 12 heures de 01 à 12 (deux chiffres).
// H - Retourne les heures au format 24 heures de 00 à 23 (deux caractères).
// d - Renvoie le jour du mois au format 01 à 31 (deux caractères).
// w - Renvoie le jour de la semaine de 0 à 6 (un chiffre : 0-dimanche, 6-samedi).
// D - Renvoie le nom du jour de la semaine de lundi à dimanche (trois caractères : lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche).
// m - Renvoie le nom du mois de 01 à 12 (deux caractères).
// M - Nom du mois de janvier à décembre (trois caractères : Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec).
// Y - Renvoie le nom de l'année de 2000 à 2099 (quatre caractères).
// y - Retourne l'année de 00 à 99 (deux caractères).
// a - Retourne midi am ou pm (deux caractères, minuscules).
// A - Retourne midi AM ou PM (deux caractères, majuscules).

Ca modifie un peu ma réponse ci-dessus... "A" au lieu de "p".

Tu es sûr que ce n'est pas plutôt un 1302 ?

Salut @lesept

A si, je corrige... Merci beaucoup :slight_smile:
Je regarde pour le lien.

Amitiés
Pandaroux007

@pandaroux007 : j'ai édité ma réponse.

Pour ce genre de format, 'd' est pour 'day', 'm' pour 'month', ce qui impose de choisir une autre lettre pour 'minutes'. Les lettres minuscules utilisent souvent un format réduit (sur deux chiffres pour l'année par exemple) et les majuscules un format plus complet (année sur 4 chiffres, heures avec un 0 devant si < 10, etc).
Ca dépend de la bibliothèque utilisée.

hello
dans ta lib, tu as aussi l'exemple "set système"

Hello
Ah oui, je n'avais pas pensé aux exemples :smiley:
Merci pour le conseil :slight_smile:

Amitiés
Pandaroux007