Régler l'heure sur DS3231

Bonjour,

Je suis débutant avec Arduino, j'essais de régler l'heure avec le tutoriel fournis (lecon 19)avec le kit Starter kit Mega 2560.
J'ai fait les raccords suivants;
DS331 / Mega2560

GND- Power/GND
VCC- Power/5V
SCL-SCL
SDA-SDA

J'ai ajouté la librairie DS3231.h fournis avec la documentation sur le CD

J'ai fait décommenté la ligne 'void setup' 'manuel' et inscris l'heure et date puis j'ai téléversé sans succès.

J'obtiens sur le moniteur serie des sequence d'.affichage suivants qui défilent. Ca me semble l'affichage proposé mais les datas de l 'horloge n'y sont pas.

Long number format:
Long format with month name:
Short format witch 12h mode:
Today is: days of the year.
Actual month has: days.
Unixtime:

Long number format:
Long format with month name:
Short format witch 12h mode:
Today is: days of the year.
Actual month has: days.
Unixtime:

//www.elegoo.com
//2016.12.9
#include <Wire.h>
#include <DS3231.h>

DS3231 clock;
RTCDateTime dt;

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

  // Initialize DS3231
  Serial.println("Initialize DS3231");;
  clock.begin();
  

  // Set sketch compiling time
  clock.setDateTime(__DATE__, __TIME__);

  // Set from UNIX timestamp
  //clock.setDateTime(1397408400);

  // Manual (YYYY, MM, DD, HH, II, SS
  //clock.setDateTime(2018, 12, 31, 14, 38, 00);
}

void loop()
{
  dt = clock.getDateTime();

  Serial.print("Long number format:          ");
  Serial.println(clock.dateFormat("d-m-Y H:i:s", dt));

  Serial.print("Long format with month name: ");
  Serial.println(clock.dateFormat("d F Y H:i:s",  dt));

  Serial.print("Short format witch 12h mode: ");
  Serial.println(clock.dateFormat("jS M y, h:ia", dt));

  Serial.print("Today is:                    ");
  Serial.print(clock.dateFormat("l, z", dt));
  Serial.println(" days of the year.");

  Serial.print("Actual month has:            ");
  Serial.print(clock.dateFormat("t", dt));
  Serial.println(" days.");

  Serial.print("Unixtime:                    ");
  Serial.println(clock.dateFormat("U", dt));

  Serial.println();

  delay(1000);
}

Ton message n'est pas au bon endroit, ici c'est pour les tutos. Demande au modo de déplacer le message en appuyant sur le lien 'report to moderator' situé sous ton message.

Quant à ta question, il y a eu une question similaire il y a peu de temps sur le forum. Tu peux chercher si tu as du courage.

Quelle librairie DS3231.h avez vous ?

Êtes vous sûr de ne pas avoir inversé les SCL et SDA ?

Sur une MEGA, SDA = pin 20, SCL = pin 21.
Utilise I2Cscanner pour vérifier la connexion entre MEGA et DS3231.

@+

J'ai activé l'essais du bus et voici sur le moniteur série:

Scanning...
I2C device found at address 0x57 !
I2C device found at address 0x5F !
I2C device found at address 0x68 !
done

Donc la comm est OK

Pour ce qui est de la librairie c'est celle fournie avec le tutoriel de elegoo.com
( DS3231: Real-Time Clock. Date Format
Read more: www.jarzebski.pl/arduino/komponenty/zegar-czasu-rzeczywistego-rtc-ds3231.html
GIT: GitHub - jarzebski/Arduino-DS3231: DS3231 Real-Time-Clock
Web: http://www.jarzebski.pl
(c) 2014 by Korneliusz Jarzebski )

Et je viens de remarquer qu'en cochant ¨Time stamp¨sur le moniteur série , je vois l'heure ....mais ca ne s'inscris pas sur le message du DS3231

J'ai fait plusieurs recherche mais personne ne semble avec eu ce problème avec le tutoriel

Il y a un bug dans la librairie : DS3231.cpp / ligne 173 :

char* DS3231::dateFormat(const char* dateFormat, RTCDateTime dt)
{
    char buffer[255];
    // à remplacer par 
    static char buffer[255];

Bug de débutant ... vraiment n'importe quoi.

Merci, ca corrige le problème, ca fonctionne

arrgg !!!

Les yeux me piquent et les doigts bouillonnent (ou le contraire)

255 octets de RAM réservés en permanence dans un petit arduino, pour un buffer statique dédié à une fonction douteuse?
Quelle hérésie! Que l'on prépare le bûcher pour son auteur. :smiling_imp:

Jamais compris à quoi sert cette fonction, dont l'appel ne peut de toute manière pas être laissé dans le code, sinon le rtc revient toujours à la même date/heure (=celle de la compil) à chaque redémarrage de l'arduino.

On ne peut l'utiliser qu'une seule fois, après il faut mettre la ligne en commentaires et téléverser à nouveau le programme. Donc autant s'en passer et mettre directement le réglage manuel. C'est quand même pas dur de saisir la date et l'heure courante. Et au moins là on est sûr des valeurs.

Bon d'accord, si on met la ligne en commentaire, normalement la fonction n'est plus utilisée et le compilateur va la dégager, donc plus de buffer statique.
Mais quand même : beurk beurk beurk

Pis sinon il existe une autre lib vachement sympa, qui se veut plus facile à utiliser, en français, et en prime qui gère toute seule les changements d'heure été/hiver. cf ma signature ;D

Quelle hérésie! Que l'on prépare le bûcher pour son auteur. :smiling_imp:

Je fournis les allumettes :smiling_imp: