Problème affichage 4 digits 7 segments avec horloge RTC

Bonjour, Bonsoir,

Je viens vers vous après de multiples recherches sur internet sans trouver de solution à mon problème.

Je m’explique : j’ai pour projet de faire un réveil multifonctions avec arduino UNO. Pour l’instant je n’en suis qu’à l’affichage de l’heure (avec un module RTC Elegoo DS3231) sur un module 4 digits 7 segments à cathode commune.

J’utilise, afin d’économiser les ports de mon arduino, un shift register 74HC595 afin de contrôler les différents segments de mon afficheur.

Sans utiliser l’heure du RTC, j’arrive à afficher une heure définie par des variables avant la compilation, mais quand j’essaye de faire en sorte d’afficher l’heure du RTC, mon afficheur 4 digits ne s’allume pas ou clignote (segments “aléatoires” s’allument sans former de chiffres).

En résumé : si je n’utilise pas l’heure du RTC, mon afficheur affiche. Si je lui demande d’utiliser l’heure fournie par le RTC, il n’affiche rien.

Voici le code, je peux vous fournir un schéma des branchements mais je ne pense pas que cela ait à voir avec mon problème, à mon avis le problème vient de la carte et du code exécuté par celle-ci.

Merci d’avance pour votre aide.

#include <Wire.h>
#include <DS3231.h>

DS3231 myClock;
RTCDateTime dt;

int latch = 9; //74HC595  pin 9 STCP
int horloge = 10; //74HC595  pin 10 SHCP
int data = 8; //74HC595  pin 8 DS

int digit1 = 6;
int digit2 = 5;
int digit3 = 4;
int digit4 = 7;


int hour = 15;        // si le RTC n'est pas utilisé, 15:34 s'affiche
int minute = 34;


unsigned char table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, 0x00};

void setup() {
  pinMode(latch, OUTPUT);
  pinMode(horloge, OUTPUT);
  pinMode(data, OUTPUT);

  pinMode(digit1, OUTPUT);
  pinMode(digit2, OUTPUT);
  pinMode(digit3, OUTPUT);
  pinMode(digit4, OUTPUT);

  digitalWrite(digit1, HIGH);
  digitalWrite(digit2, HIGH);
  digitalWrite(digit3, HIGH);
  digitalWrite(digit4, HIGH);

}

void pickDigit(int x)
{
  digitalWrite(digit1, HIGH);
  digitalWrite(digit2, HIGH);
  digitalWrite(digit3, HIGH);
  digitalWrite(digit4, HIGH);

  switch (x)
  {
    case 1:
      digitalWrite(digit1, LOW);
      break;
    case 2:
      digitalWrite(digit2, LOW);
      break;
    case 3:
      digitalWrite(digit3, LOW);
      break;
    default:
      digitalWrite(digit4, LOW);
      break;
  }
}

void displayHour(int hour[], int  minutes[]) {
  digitalWrite(latch, LOW);
  pickDigit(1);
  shiftOut(data, horloge, MSBFIRST, table[hour[0]]);
  delay(5);
  digitalWrite(latch, HIGH);

  digitalWrite(latch, LOW);
  pickDigit(2);
  shiftOut(data, horloge, MSBFIRST, table[hour[1]]);  
  delay(5);
  digitalWrite(latch, HIGH);

  digitalWrite(latch, LOW);
  pickDigit(3);
  shiftOut(data, horloge, MSBFIRST, table[minutes[0]]);
  delay(5);
  digitalWrite(latch, HIGH);

  digitalWrite(latch, LOW);
  pickDigit(4);
  shiftOut(data, horloge, MSBFIRST, table[minutes[1]]);
  delay(5);
  digitalWrite(latch, HIGH);

}




void loop() {
//  dt = myClock.getDateTime();                           // décommenter cette ligne empeche l'affichage de l'heure
//  int hourDigits[] = {dt.hour / 10, dt.hour % 10};
//  int minDigits[] = {dt.minute / 10, dt.minute % 10};

  int hourDigits[] = {hour / 10, hour % 10};              
  int minDigits[] = {minute / 10, minute % 10};
  

  displayHour(hourDigits, minDigits);
}

Bonjour,

Quelle librairie utilises tu pour le DS3231?
Essaies d'afficher la valeur de dt.hour et dt.minute sur le moniteur série.

je suppose que vous utilisez cette lib ?

faites des Serial.print pour voir ce qu'il se passe, éventuellement commencez par virer le module 4 digits 7 segments à cathode commune et le 74HC595 pour vous assurer que l'heure est lue correctement

Re-bonjour,

Après le conseil de J-M-L, et l'application de celui-ci je me suis rendu compte que tout n'était en fait qu'un simple oubli d'initialisation de l'horloge RTC.

Merci bien pour votre aide, et désolé pour le dérangement.

Bonne journée.