Programmateur Multi voies = pas de mise à jour de date et heure

et ajoute à la suite :
Code: [Select]

Serial.println(BpH);

J'ai ajouté mais aucune amélioration

A la mise sous tension ou après téléversement (ou encore avec le reset du shield ), seul le bouton " Right " réagit et " fin de saisie s'affiche pour la première partie " Maj Date, Heure.
Tandis que tous les boutons fonctionne sur la partie " Maj Horaires " pour les plages

Oups
Sans appuyer sur les boutons, aucune action car il faut valider ou modifier la première, puis le deuxième partie du programme

Je ne cherche pas à améliorer, je cherche à comprendre. Comme je suis un peu loin et qu'il y a le couvre-feu, je ne peux pas passer chez toi, donc tu dois faire les tests et répondre à mes questions

1 : as-tu testé l'exemple ? Est-ce qu'il affiche des choses dans le console ? Si oui, quoi ?

2 : revenant à la version 6, ajoute la ligne et dis-moi ce qui s'affiche dans la console quand tu n'appuies sur aucun bouton puis pour chaque bouton appuyé.

Bonsoir
En testant l'exemple, j'ai un premier code d'erreur

Arduino : 1.8.13 (Windows 10), Carte : "Arduino Uno"





















Adafruit_RTClib:4:1: error: 'RTC_DS3231' does not name a type; did you mean 'DS3231'?

 RTC_DS3231 rtc;

 ^~~~~~~~~~

 DS3231

D:\Documents\Arduino\Adafruit_RTClib\Adafruit_RTClib.ino: In function 'void setup()':

Adafruit_RTClib:15:9: error: 'rtc' was not declared in this scope

   if (! rtc.begin()) {

         ^~~

D:\Documents\Arduino\Adafruit_RTClib\Adafruit_RTClib.ino:15:9: note: suggested alternative: 'getc'

   if (! rtc.begin()) {

         ^~~

         getc

Adafruit_RTClib:21:7: error: 'rtc' was not declared in this scope

   if (rtc.lostPower()) {

       ^~~

D:\Documents\Arduino\Adafruit_RTClib\Adafruit_RTClib.ino:21:7: note: suggested alternative: 'getc'

   if (rtc.lostPower()) {

       ^~~

       getc

D:\Documents\Arduino\Adafruit_RTClib\Adafruit_RTClib.ino: In function 'void loop()':

Adafruit_RTClib:40:20: error: 'rtc' was not declared in this scope

     DateTime now = rtc.now();

                    ^~~

D:\Documents\Arduino\Adafruit_RTClib\Adafruit_RTClib.ino:40:20: note: suggested alternative: 'getc'

     DateTime now = rtc.now();

                    ^~~

                    getc

Adafruit_RTClib:48:36: error: 'class DateTime' has no member named 'dayOfTheWeek'; did you mean 'dayOfWeek'?

     Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);

                                    ^~~~~~~~~~~~

                                    dayOfWeek

Adafruit_RTClib:64:28: error: 'TimeSpan' was not declared in this scope

     DateTime future (now + TimeSpan(7,12,30,6));

                            ^~~~~~~~

exit status 1

'RTC_DS3231' does not name a type; did you mean 'DS3231'?

dans la version 6 , en ajoutant la ligne, j'ai le nombre 255 qui défile sur le moniteur série , et de temps en temps le 252, ou 253 ou 254 s'intercale de façon aléatoire
Tandis que sur le LCD, toujours la question " Maj Date , Heure ? " sur la première ligne, et " Sel : O Right : N " sur la deuxième ligne
Voilà tout ce que je vois

J'y comprends rien : tu as pris le code dans le lien que je t'ai envoyé ou dans la liste des exemples disponibles dans le menu de l'IDE?

  • Dans le premier cas, il est possible que ta bibliothèque soit ancienne, mets la à jour (menu croquis / inclure une bibli / gérer les bibli) puis relance l'IDE
  • Dans le second cas, je ne comprend pas pourquoi ça ne marche pas

hello
je viens de jeter un oeil, veux tu tester ce code
attention, j'ai mis le serial en 115200
j'ai également mis les reglages en "rollover" (si c'est bien le terme)

ProgrammateurHoraireV7.zip (4.85 KB)

bobardui:
dans la version 6 , en ajoutant la ligne, j'ai le nombre 255 qui défile sur le moniteur série , et de temps en temps le 252, ou 253 ou 254 s'intercale de façon aléatoire
Tandis que sur le LCD, toujours la question " Maj Date , Heure ? " sur la première ligne, et " Sel : O Right : N " sur la deuxième ligne
Voilà tout ce que je vois

ok; je pense avoir une piste : dans le code 6, déclare BpH en int plutôt qu'en byte. Est-ce que ça résoud le problème ?
Cette ligne

byte MaH, BpH;

devient

byte MaH;
int BpH;

C'est ma faute, lorsque je t'ai proposé d'utiliser l'EEPROM, il a fallu utiliser des bytes et j'ai changé tout un peu vite sans chercher à savoir comment fonctionnent les boutons. Or ils sont spécifiques sur ce shield, reliés à un jeu de résistances qui permet de lire 4 avec un seul analogRead. Pas évident sans connaitre le shield...

Bravo Lesept, cela fonctionne, je peux modifier la date et l'heure sur le shield .

Par contre les informations ( date et heure ) ne sont pas sauvegardées , donc à la coupure d'alimentation, je reviens avec ce qui est inscrit dans le code

byte TabMaH[6] = {21, 3, 11, 22, 21, 0};

Autre question : a quoi sert cette ligne de code ci dessous ?

RTC.adjust(DateTime(2021, 3, 15, 20, 55, 0));

Merci pour ton aide précieuse

Mes excuses à dfgh car je n'ai pas testé ta proposition car le dernier post de Lesept a trouvé écho à mon problème
Merci de ton implication

Re dfgh
Petite question sur ton fichier qui contient plusieurs fichiers : Comment faire pour les lire tous ensemble dans l'IDE ?

hello
une fois décompilé dans ton repertoire de travail, tu cliques sur un des fichiers, l'IDE les ouvrira tous ensemble

si le prg de lesept te va, c'est parfait, cool

Je ne dois pas être doué !!!
J'ai essayé de les ouvrir un par un mais à chaque fois cela m'a ouvert " ProgrammateurHoraireV7 " avec 43 lignes de programmation seulement
Bien sûr , à chaque fois je fermai l'IDE pour voir si l'autre fichier allait m'ouvrir l'ensemble de tes fichiers

La ligne que tu montres est à enlever, et il faut que tu testes l'exemple que je t'ai indiqué pour savoir s'il fonctionne.
A partir de là, on mettra la RTC à l'heure lors de la compilation et à chaque fois que tu utiliseras ton Arduino, on utilisera la RTC pour savoir l'heure et la date.

Ok j'ai supprimé la ligne

RTC.adjust(DateTime(2021, 3, 15, 20, 55, 0));

et il faut que tu testes l'exemple que je t'ai indiqué pour savoir s'il fonctionne.

tu veux dire :
[iurl=https://github.com/adafruit/RTClib]RTClib[/iurl]/[iurl=https://github.com/adafruit/RTClib/tree/master/examples]examples[/iurl]/[iurl=https://github.com/adafruit/RTClib/tree/master/examples/ds3231]ds3231[/iurl]/[color=var(--color-text-primary)]ds3231.ino[/color]
car je ne retrouve pas ce fichier dans la bibliothèque

Comment faire ?

Oui, c'est ça.
Si tu ne le trouves pas, je te conseille de réinstaller la bibliothèque. Il devrait apparaître, et tu pourras le tester

ok j'ai installé, et téléverser...cela a pour effet d'éclairer la ligne supérieure du LCD sans aucune information
c'est bien ce code ?

// Date and time functions using a DS3231 RTC connected via I2C and Wire lib
#include "RTClib.h"

RTC_DS3231 rtc;

char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

void setup () {
  Serial.begin(57600);

#ifndef ESP8266
  while (!Serial); // wait for serial port to connect. Needed for native USB
#endif

  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    Serial.flush();
    abort();
  }

  if (rtc.lostPower()) {
    Serial.println("RTC lost power, let's set the time!");
    // When time needs to be set on a new device, or after a power loss, the
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
    // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
  }

  // When time needs to be re-set on a previously configured device, the
  // following line sets the RTC to the date & time this sketch was compiled
  // rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  // This line sets the RTC with an explicit date & time, for example to set
  // January 21, 2014 at 3am you would call:
  // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}

void loop () {
    DateTime now = rtc.now();

    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(" (");
    Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
    Serial.print(") ");
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();

    Serial.print(" since midnight 1/1/1970 = ");
    Serial.print(now.unixtime());
    Serial.print("s = ");
    Serial.print(now.unixtime() / 86400L);
    Serial.println("d");

    // calculate a date which is 7 days, 12 hours, 30 minutes, 6 seconds into the future
    DateTime future (now + TimeSpan(7,12,30,6));

    Serial.print(" now + 7d + 12h + 30m + 6s: ");
    Serial.print(future.year(), DEC);
    Serial.print('/');
    Serial.print(future.month(), DEC);
    Serial.print('/');
    Serial.print(future.day(), DEC);
    Serial.print(' ');
    Serial.print(future.hour(), DEC);
    Serial.print(':');
    Serial.print(future.minute(), DEC);
    Serial.print(':');
    Serial.print(future.second(), DEC);
    Serial.println();

    Serial.print("Temperature: ");
    Serial.print(rtc.getTemperature());
    Serial.println(" C");

    Serial.println();
    delay(3000);
}

Oui c'est celui-là
Déconnecte le LCD, tu n'en as pas besoin ici.
Règle la console sur 57600 baud. Est-ce qu'elle affiche des choses ?

à tout hazard, je te remets le code

ProgrammateurHoraireV8.zip (4.85 KB)

Bonsoir lesept

Voici ce que j'ai sur la console:

2021/3/21 (Sunday) 21:30:59
since midnight 1/1/1970 = 1616362259s = 18707d
now + 7d + 12h + 30m + 6s: 2021/3/29 10:1:5
Temperature: 23.00 C