standardUser:
Merci pour vos réponses constructives.
Bien qu'objet d'un autre post, je reprends ici le code réalisé à partir de vos indications au cas où cette discussion, et surtout la solution complète, intéresserait quelqu'un.
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
const char *tableauDesJours[] = {"Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"};
void setup ()
{
Serial.begin(9600);
Wire.begin();
RTC.begin();
// 'if' commenté : le RTC est mis à jour après chaque compilation.
// 'if' non commenté : le RTC n'est PAS mis à jour après chaque compilation.
//if (! RTC.isrunning())
{
RTC.adjust(DateTime(F(DATE), F(TIME)));
// Ecriture spécifique du dayOfWeek oublié par la library "RTClib".
Wire.beginTransmission(0x68);
Wire.write(0x03); // Pointe sur le registre dayOfWeek #4 d'adresse 0x003.
Wire.write(decToBcd(1)); // Ecrit le dayOfWeek (ici Lundi = 1).
// A modifier manuellement en fonction du jour réel.
Wire.endTransmission();
}
}
void loop ()
{
DateTime now = RTC.now();
//Récupère la valeur du dayOfWeek oubliée par la library 'RTClib'.
Wire.beginTransmission(0x68); // Accède au RTC I2C d'adresse 0x68.
Wire.write(0x03); // Pointe le registre du dayOfWeek (0x03).
Wire.endTransmission();
Wire.requestFrom(0x68, 1); // Demande de reception d'un octet depuis registre (0x03).
byte dayOfWeek = Wire.read(); // Stocke la valeur reçue.
Wire.endTransmission();
Serial.println();
Serial.print("Numero du jour de la semaine : ");
Serial.print(dayOfWeek);
Serial.println();
Serial.print("Jour de la semaine: ");
Serial.print(tableauDesJours[dayOfWeek-1]);
Serial.println();
Serial.print("Heure : ");
print2digits(now.hour());
Serial.print(":");
print2digits(now.minute());
Serial.print(":");
print2digits(now.second());
Serial.println();
Serial.print("Jour : ");
print2digits(now.day());
Serial.println();
Serial.print("Mois : ");
print2digits(now.month());
Serial.println();
Serial.print("Annee : ");
print2digits(now.year());
Serial.println();
delay(900);
}
void print2digits(int valeur)
{
if (valeur >= 0 && valeur < 10) {
Serial.print('0');
}
Serial.print(valeur);
}
byte decToBcd(byte valeur)
{
return ((valeur/10*16) + (valeur%10));
}
Bon codage à tous.
Super code, bravo.
Par contre, nous sommes aujourd'hui un mercredi et ma RTC me remonte une valeur de "1" pour le jour de la semaine… Ce n'est à priori pas lié à ton code, mais je n'arrive pas à comprendre pourquoi.
Voici ce que j'ai dans le moniteur série :
Numero du jour de la semaine : 1
Jour de la semaine: Lundi
Heure : 10:14:43
Jour : 09
Mois : 01
Annee : 2019
J'ai pourtant bien "activé" la ligne de réglage de l'heure et mon pc est bien à l'heure et la date du jour...