Faire une horloge avec 4 7 segments displays

Tout d'abord, désoler pour mon post d'hier bâclé je suis aller voir les messages épinglés.
Ensuite,
Bonsoir, J'essaye désespérément de faire une horloge avec 4 digit de 7 segments sans succes.

J'utilise une Arduino genuino UNO,

Un module horloge DS3231 RTC

Et bien sur un afficheur 7 segments,

Le problème est que j'arrive trés bien a récupérer le code du module horloge et d'afficher un nombre sur mes digits mais je n'arrive pas a afficher l'heure que je récupéré sur le module RTC sur mes digits.
Sa affiche "-56 " sur mes digits

Quand aux codes, ils ne sont pas optimisés j'espère donc pouvoir trouver quelqu'un qui pourrais non pas me faire le code mais m'éclairer sur le code et surtout sur la partie affichage.

Le code de l'afficheur (J'utilise la fonction SetAfficheur(xxxx);)(Le code n'est pas de moi mais de Imake-Tuto)

int digit1 = A1;
int digit2 = A2;
int digit3 = A3;
int digit4 = A4;
int A = 1;
int B = 2;
int C = 3;
int D = 4;
int E = 5;
int F = 6;
int G = 7;
void setup() {
 pinMode(A1, OUTPUT) ;
 pinMode(A2, OUTPUT) ;
 pinMode(A3, OUTPUT) ;
 pinMode(A4, OUTPUT) ;
 pinMode(1, OUTPUT) ;
 pinMode(2, OUTPUT) ;
 pinMode(3, OUTPUT) ;
 pinMode(4, OUTPUT) ;
 pinMode(5, OUTPUT) ;
 pinMode(6, OUTPUT) ;
 pinMode(7, OUTPUT) ;

 //Désactivation de tous les digits
 digitalWrite(digit1, HIGH);
 digitalWrite(digit2, HIGH);
 digitalWrite(digit3, HIGH);
 digitalWrite(digit4, HIGH);
}
void loop() {
 setAfficheur(1765);
}
//-------------------------------
// Définition des FONCTIONS
//-------------------------------
void setNumber(int nombre) {
 switch (nombre) {
 case 1 :
 digitalWrite(A, 0) ;
 digitalWrite(B, 1) ;
 digitalWrite(C, 1) ;
 digitalWrite(D, 0) ;
 digitalWrite(E, 0) ;
 digitalWrite(F, 0) ;
 digitalWrite(G, 0) ;
 break;
 case 2 :
 digitalWrite(A, 1) ;
 digitalWrite(B, 1) ;
 digitalWrite(C, 0) ;
 digitalWrite(D, 1) ;
 digitalWrite(E, 1) ;
 digitalWrite(F, 0) ;
 digitalWrite(G, 1) ;
 break;
 case 3 :
 digitalWrite(A, 1) ;
 digitalWrite(B, 1) ;
 digitalWrite(C, 1) ;
 digitalWrite(D, 1) ;
 digitalWrite(E, 0) ;
 digitalWrite(F, 0) ;
 digitalWrite(G, 1) ;
 break;
 case 4 :
 digitalWrite(A, 0) ;
 digitalWrite(B, 1) ;
 digitalWrite(C, 1) ;
 digitalWrite(D, 0) ;
 digitalWrite(E, 0) ;
 digitalWrite(F, 1) ;
 digitalWrite(G, 1) ;
 break;
 case 5 :
 digitalWrite(A, 1) ;
 digitalWrite(B, 0) ;
 digitalWrite(C, 1) ;
 digitalWrite(D, 1) ;
 digitalWrite(E, 0) ;
 digitalWrite(F, 1) ;
 digitalWrite(G, 1) ;
 break;
 case 6 :
 digitalWrite(A, 1) ;
 digitalWrite(B, 0) ;
 digitalWrite(C, 1) ;
 digitalWrite(D, 1) ;
 digitalWrite(E, 1) ;
 digitalWrite(F, 1) ;
 digitalWrite(G, 1) ;
 break;
 case 7 :
 digitalWrite(A, 1) ;
 digitalWrite(B, 1) ;
 digitalWrite(C, 1) ;
 digitalWrite(D, 0) ;
 digitalWrite(E, 0) ;
 digitalWrite(F, 0) ;
 digitalWrite(G, 0) ;
 break;
 case 8 :
 digitalWrite(A, 1) ;
 digitalWrite(B, 1) ;
 digitalWrite(C, 1) ;
 digitalWrite(D, 1) ;
 digitalWrite(E, 1) ;
 digitalWrite(F, 1) ;
 digitalWrite(G, 1) ;
 break;
 case 9 :
 digitalWrite(A, 1) ;
 digitalWrite(B, 1) ;
 digitalWrite(C, 1) ;
 digitalWrite(D, 1) ;
 digitalWrite(E, 0) ;
 digitalWrite(F, 1) ;
 digitalWrite(G, 1) ;
 break;
 case 0 :
 digitalWrite(A, 1) ;
 digitalWrite(B, 1) ;
 digitalWrite(C, 1) ;
 digitalWrite(D, 1) ;
 digitalWrite(E, 1) ;
 digitalWrite(F, 1) ;
 digitalWrite(G, 0) ;
 break;
 default:
 digitalWrite(A, 0) ;
 digitalWrite(B, 0) ;
 digitalWrite(C, 0) ;
 digitalWrite(D, 0) ;
 digitalWrite(E, 0) ;
 digitalWrite(F, 0) ;
 digitalWrite(G, 1) ;
 break;
 break;
 }
}
void setDigit(int digit, int nombre) {
 switch(digit) {
 case 1 :
 digitalWrite(digit1, LOW) ;
 digitalWrite(digit2, HIGH) ;
 digitalWrite(digit3, HIGH) ;
 digitalWrite(digit4, HIGH) ;
 setNumber(nombre) ;
 break;
 case 2 :
 digitalWrite(digit1, HIGH) ;
 digitalWrite(digit2, LOW) ;
 digitalWrite(digit3, HIGH) ;
 digitalWrite(digit4, HIGH) ;
 setNumber(nombre) ;
 break;
 case 3 :
 digitalWrite(digit1, HIGH) ;
 digitalWrite(digit2, HIGH) ;
 digitalWrite(digit3, LOW) ;
 digitalWrite(digit4, HIGH) ;
 setNumber(nombre) ;
 break;
 case 4 :
 digitalWrite(digit1, HIGH) ;
 digitalWrite(digit2, HIGH) ;
 digitalWrite(digit3, HIGH) ;
 digitalWrite(digit4, LOW) ;
 setNumber(nombre) ;
 break;

 }
}
void setAfficheur(int nombre) {
 int M = nombre/1000, C = (nombre-M*1000)/100, D = (nombre-M*1000-C*100)/10,
U=(nombre-M*1000-C*100-D*10) ;
 setDigit(4, U) ;
 delay(2);
 setDigit(3, D) ;
 delay(2);
 setDigit(2, C) ;
 delay(2);
 setDigit(1, M) ;
 delay(2);

}

Le code pour récupérer l'heure (Exemples trouver sur le logiciel arduino)

// now.pde
// Prints a snapshot of the current date and time along with the UNIX time
// Modified by Andy Wickert from the JeeLabs / Ladyada RTC library examples
// 5/15/11

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

RTClib RTC;

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

void loop () {
  
    delay(1000);
  
    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(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");
}

Pour les librairies je veut bien en télécharger de nouvelles.

J'espère etre compréhensible,
Cordialement,

Vous auriez pu juste modifier l’autre message...

Avez vous lu ce que j’ai dit concernant A4 ?

Oui je l'ai lu mais je n'ai pas bien compris votre post. Je sais justement que pour relier mes digits et mon RTC j'utilse 2 x A4

Cordialement,

je t'ai préparé ceci
à tester

#include <Wire.h>
#include <DS3231.h>
DS3231 clock;
RTCDateTime dt;
// reserve pour serial RX      = 0;
// reserve pour serial TX      = 1;
byte segment_a                 = 2;//segment a  du jeu d'afficheurs 1
byte segment_b                 = 3;//segment b  du jeu d'afficheurs 1
byte segment_c                 = 4;//segment c  du jeu d'afficheurs 1
byte segment_d                 = 5;//segment d  du jeu d'afficheurs 1
byte segment_e                 = 6;//segment e  du jeu d'afficheurs 1
byte segment_f                 = 7;//segment f  du jeu d'afficheurs 1
byte segment_g                 = 8;//segment g  du jeu d'afficheurs 1
byte segment_dp                = 9;//segment dp du jeu d'afficheurs 1

byte digit_dizaines_heures     =10;//transistor sur anode digit dizaines  d'heures   afficheurs 1
byte digit_heures              =11;//transistor sur anode digit             heures   afficheurs 1
byte digit_dizaines_minutes    =12;//transistor sur anode digit dizaines de minutes  afficheurs 1
//reserve led temoin           =13
byte digit_minutes             =14;//A0 transistor sur anode digit             minutes  afficheurs 1
byte digit_dizaines_secondes   =15;//A1 transistor sur anode digit dizaines de secondes afficheurs 1
byte digit_secondes            =16;//A2 transistor sur anode digit             secondes afficheurs 1
// libre                       =A3;
// reserve i2c SDA  DS3231     =A4;
// reserve i2c SCL  DS3231     =A5;
int digit=0;
int valeur = 0;
int memo_secondes=0;
unsigned long temps_top = 0;
boolean top = false;
boolean dp = true;
int dgp=0;
int h=0;
int mn=0;
int s=0;
//boolean DPB = true;
void setup() {
  clock.begin();
  Serial.begin(115200);
for (int f = 2; f < 10;f++){pinMode(f,OUTPUT); digitalWrite(f,LOW);}
for (int f = 11;f < 17;f++){pinMode(f,OUTPUT);digitalWrite(f,HIGH);}//Désactivation de tous les digits
 
  for (int f= 0;f<2;f++){//inscrit un trait horizontal sur les digits
  digit=digit_dizaines_heures;actionDigital(digit,0,0,0,1,0,0,0,0);delay(300); // inscrit zéro sur les dizaines heures
  digit=digit_heures;actionDigital(digit,0,0,0,1,0,0,0,0);delay(300); // inscrit zéro sur les heures
  digit=digit_dizaines_minutes;actionDigital(digit,0,0,0,1,0,0,0,0);delay(300); // inscrit zéro sur les dizaines minutes
  digit=digit_minutes;actionDigital(digit,0,0,0,1,0,0,0,0);delay(300); // inscrit zéro sur les minutes
  digit=digit_dizaines_secondes;actionDigital(digit,0,0,0,1,0,0,0,0);delay(300); // inscrit zéro sur les dizaines secondes
  digit=digit_secondes;actionDigital(digit,0,0,0,1,0,0,0,0);delay(300); // inscrit zéro sur les secondes
  //delay(1000);
  }
  clock.setDateTime(__DATE__, __TIME__);
  dt = clock.getDateTime();
  h=atoi(clock.dateFormat("H", dt));Serial.print(h);
  Serial.print(":");
  mn= atoi(clock.dateFormat("i", dt));Serial.print(mn);
  Serial.print(" ");
  s=atoi(clock.dateFormat("s", dt));Serial.print(s);
  Serial.println(" ");
}

void loop() {
   dt = clock.getDateTime();
  if (memo_secondes!=atoi((clock.dateFormat("s", dt)))){dp=!dp;memo_secondes=atoi((clock.dateFormat("s", dt)));Serial.print("_______________________dp = ");Serial.println(dp);}

     //dizaines heures
if ((atoi(clock.dateFormat("H", dt)))>10)
  {digit=digit_dizaines_heures;valeur=(atoi(clock.dateFormat("H", dt)))/10;dgp=0;aiguillage();Serial.print(valeur);Serial.print ("");}  
 else{valeur=0;dgp=0;aiguillage();Serial.print(valeur);Serial.print ("");}
 //heures
  {digit=digit_heures;valeur=((atoi(clock.dateFormat("H", dt)))%10);aiguillage();dgp=dp;Serial.print(valeur);Serial.print (" ");}   
     //dizaines minutes
if ((atoi(clock.dateFormat("i", dt)))>10)
  {digit=digit_dizaines_minutes;valeur=((atoi(clock.dateFormat("i", dt)))/10);dgp=0;aiguillage();Serial.print(valeur);Serial.print ("");}   
 else{valeur=0;dgp=0;aiguillage();Serial.print(valeur);Serial.print ("");}
 //minutes
  {digit=digit_minutes;valeur=((atoi(clock.dateFormat("i", dt)))%10);aiguillage();dgp=dp;Serial.print(valeur);Serial.print (" ");}   
     //dizaines secondes
if ((atoi(clock.dateFormat("s", dt)))>10)
  {digit=digit_dizaines_secondes;valeur=((atoi(clock.dateFormat("s", dt)))/10);dgp=0;aiguillage();Serial.print(valeur);Serial.print ("");} 
//secondes
else{valeur=0;dgp=0;aiguillage();Serial.print(valeur);Serial.print ("");}
  {digit=digit_secondes;valeur=((atoi(clock.dateFormat("s", dt)))%10);aiguillage();dgp=0;Serial.print(valeur);Serial.println (" ");}  

delay(1000);}

void aiguillage()
  {
        switch (valeur)
        { 
         case 0://             A B C D E F G    //chiffre 0
           actionDigital(digit,1,1,1,0,1,1,1,dgp);
           break ;
         case 1://             A B C D E F G    //chiffre 1
           actionDigital(digit,1,1,0,0,0,0,0,dgp);
           break ;
         case 2://             A B C D E F G    //chiffre 2
           actionDigital(digit,1,0,1,1,1,0,1,dgp);
           break ;
         case 3://             A B C D E F G    //chiffre 3
           actionDigital(digit,1,1,1,1,1,0,0,dgp);
           break ;
         case 4://             A B C D E F G    //chiffre 4
           actionDigital(digit,1,1,0,1,0,1,0,dgp);
           break ;
         case 5://             A B C D E F G    //chiffre 5
           actionDigital(digit,0,1,1,1,1,1,0,dgp);
           break ;                         
         case 6://             A B C D E F G    //chiffre 6
           actionDigital(digit,0,1,1,1,1,1,1,dgp);
           break ;       
         case 7://             A B C D E F G    //chiffre 7
           actionDigital(digit,1,1,1,0,0,0,0,dgp);
           break ;
         case 8://             A B C D E F G    //chiffre 8
           actionDigital(digit,1,1,1,1,1,1,1,dgp);
           break ;
         case 9://             A B C D E F G    //chiffre 9
           actionDigital(digit,1,1,1,1,1,1,0,dgp);
           break ;
         default:
         break;
       }
   }


 
   //                                A        B         C          D           E        F        G
  void actionDigital(byte digit,byte un,byte deux,byte trois,byte quatre,byte cinq,byte six,byte sept,byte dgpt)
  {
     digitalWrite(digit_dizaines_heures,  HIGH);    //desactive le digit dizaines de heures
     digitalWrite(digit_heures, HIGH);              //desactive le digit heures
     digitalWrite(digit_dizaines_minutes, HIGH);    //desactive le digit dizaines de minutes
     digitalWrite(digit_minutes, HIGH);             //desactive le digit minutes
     digitalWrite(digit_dizaines_secondes,HIGH);    //desactive le digit dizaines de secondes
     digitalWrite(digit_secondes, HIGH);            //desactive le digit secondes
     digitalWrite(digit, LOW);                      //active le digit concerne 
     digitalWrite(segment_a, un);                   //Segment A
     digitalWrite(segment_b, deux);                 //Segment B
     digitalWrite(segment_c, trois);                //Segment C
     digitalWrite(segment_d, quatre);               //Segment D
     digitalWrite(segment_e, cinq);                 //Segment E
     digitalWrite(segment_f, six);                  //Segment F
     digitalWrite(segment_g, sept);                 //Segment G
     digitalWrite(segment_dp, dgpt);                //Segment digital point
  }

Merci beaucoup pour m'avoir fourni ce code

Voila les erreurs que j'ai pu en tirer

Arduino : 1.8.2 (Mac OS X), Carte : "Arduino/Genuino Uno"

Test_pour_l_horloge:4: error: 'RTCDateTime' does not name a type
 RTCDateTime dt;
 ^
/Users/pierre/Documents/Arduino/Test_pour_l_horloge/Test_pour_l_horloge.ino: In function 'void setup()':
Test_pour_l_horloge:38: error: 'class DS3231' has no member named 'begin'
   clock.begin();
         ^
Test_pour_l_horloge:52: error: 'class DS3231' has no member named 'setDateTime'
   clock.setDateTime(__DATE__, __TIME__);
         ^
Test_pour_l_horloge:53: error: 'dt' was not declared in this scope
   dt = clock.getDateTime();
   ^
Test_pour_l_horloge:53: error: 'class DS3231' has no member named 'getDateTime'
   dt = clock.getDateTime();
              ^
Test_pour_l_horloge:54: error: 'class DS3231' has no member named 'dateFormat'
   h=atoi(clock.dateFormat("H", dt));Serial.print(h);
                ^
Test_pour_l_horloge:56: error: 'class DS3231' has no member named 'dateFormat'
   mn= atoi(clock.dateFormat("i", dt));Serial.print(mn);
                  ^
Test_pour_l_horloge:58: error: 'class DS3231' has no member named 'dateFormat'
   s=atoi(clock.dateFormat("s", dt));Serial.print(s);
                ^
/Users/pierre/Documents/Arduino/Test_pour_l_horloge/Test_pour_l_horloge.ino: In function 'void loop()':
Test_pour_l_horloge:63: error: 'dt' was not declared in this scope
    dt = clock.getDateTime();
    ^
Test_pour_l_horloge:63: error: 'class DS3231' has no member named 'getDateTime'
    dt = clock.getDateTime();
               ^
Test_pour_l_horloge:64: error: 'class DS3231' has no member named 'dateFormat'
   if (memo_secondes!=atoi((clock.dateFormat("s", dt)))){dp=!dp;memo_secondes=atoi((clock.dateFormat("s", dt)));Serial.print("_______________________dp = ");Serial.println(dp);}
                                  ^
Test_pour_l_horloge:64: error: 'class DS3231' has no member named 'dateFormat'
   if (memo_secondes!=atoi((clock.dateFormat("s", dt)))){dp=!dp;memo_secondes=atoi((clock.dateFormat("s", dt)));Serial.print("_______________________dp = ");Serial.println(dp);}
                                                                                          ^
Test_pour_l_horloge:67: error: 'class DS3231' has no member named 'dateFormat'
 if ((atoi(clock.dateFormat("H", dt)))>10)
                 ^
Test_pour_l_horloge:68: error: 'class DS3231' has no member named 'dateFormat'
   {digit=digit_dizaines_heures;valeur=(atoi(clock.dateFormat("H", dt)))/10;dgp=0;aiguillage();Serial.print(valeur);Serial.print ("");}  
                                                   ^
Test_pour_l_horloge:71: error: 'class DS3231' has no member named 'dateFormat'
   {digit=digit_heures;valeur=((atoi(clock.dateFormat("H", dt)))%10);aiguillage();dgp=dp;Serial.print(valeur);Serial.print (" ");}   
                                           ^
Test_pour_l_horloge:73: error: 'class DS3231' has no member named 'dateFormat'
 if ((atoi(clock.dateFormat("i", dt)))>10)
                 ^
Test_pour_l_horloge:74: error: 'class DS3231' has no member named 'dateFormat'
   {digit=digit_dizaines_minutes;valeur=((atoi(clock.dateFormat("i", dt)))/10);dgp=0;aiguillage();Serial.print(valeur);Serial.print ("");}   
                                                     ^
Test_pour_l_horloge:77: error: 'class DS3231' has no member named 'dateFormat'
   {digit=digit_minutes;valeur=((atoi(clock.dateFormat("i", dt)))%10);aiguillage();dgp=dp;Serial.print(valeur);Serial.print (" ");}   
                                            ^
Test_pour_l_horloge:79: error: 'class DS3231' has no member named 'dateFormat'
 if ((atoi(clock.dateFormat("s", dt)))>10)
                 ^
Test_pour_l_horloge:80: error: 'class DS3231' has no member named 'dateFormat'
   {digit=digit_dizaines_secondes;valeur=((atoi(clock.dateFormat("s", dt)))/10);dgp=0;aiguillage();Serial.print(valeur);Serial.print ("");} 
                                                      ^
Test_pour_l_horloge:83: error: 'class DS3231' has no member named 'dateFormat'
   {digit=digit_secondes;valeur=((atoi(clock.dateFormat("s", dt)))%10);aiguillage();dgp=0;Serial.print(valeur);Serial.println (" ");}  
                                             ^
exit status 1
'RTCDateTime' does not name a type

Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.

Cordialement,

Il faut prendre la bonne librairie ..

Ce point là est important à comprendre

// réservé i2c SDA  DS3231     =A4;
// réservé i2c SCL  DS3231     =A5;

oui, le code compile bien chez moi et le texte défile sur le moniteur
n'ayant pas d'afficheurs sous la main, je n'ai pas pu tester cette partie
il faudra peut être ralentir la loop ( selon l'effet visuel qu'il y aura )

voici celle ( en fichier joint) qui est dans le répertoire librairie des mon IDE

DS3231.zip (43 KB)

Bonjour,
Pour le code tout est bon et je vous en remercie !
Mais pour la câblage j'ai quelques problèmes,
J'arrive trés bien a cabler cette partie: (Et le module RTC)

// reserve pour serial RX      = 0;
// reserve pour serial TX      = 1;
byte segment_a                 = 2;//segment a  du jeu d'afficheurs 1
byte segment_b                 = 3;//segment b  du jeu d'afficheurs 1
byte segment_c                 = 4;//segment c  du jeu d'afficheurs 1
byte segment_d                 = 5;//segment d  du jeu d'afficheurs 1
byte segment_e                 = 6;//segment e  du jeu d'afficheurs 1
byte segment_f                 = 7;//segment f  du jeu d'afficheurs 1
byte segment_g                 = 8;//segment g  du jeu d'afficheurs 1
byte segment_dp                = 9;//segment dp du jeu d'afficheurs 1

Mais pas la suite

byte digit_dizaines_heures     =10;//transistor sur anode digit dizaines  d'heures   afficheurs 1
byte digit_heures              =11;//transistor sur anode digit             heures   afficheurs 1
byte digit_dizaines_minutes    =12;//transistor sur anode digit dizaines de minutes  afficheurs 1
//reserve led temoin           =13
byte digit_minutes             =14;//A0 transistor sur anode digit             minutes  afficheurs 1
byte digit_dizaines_secondes   =15;//A1 transistor sur anode digit dizaines de secondes afficheurs 1
byte digit_secondes            =16;//A2 transistor sur anode digit             secondes afficheurs 1
// libre                       =A3;
// reserve i2c SDA  DS3231     =A4;
// reserve i2c SCL  DS3231     =A5;

Car je ne sais pas sur quelle broches de mes 4 digits les branchée
Au cas ou voici les digits que j'utilise : https://core-electronics.com.au/media/catalog/product/cache/1/image/fe1bcd18654db18f328c2faaaf3c690a/7/-/7-segment_display_-_20mm__red___com-11405__01.jpg

Cordialement,

je suis surpris que tu ai pu raccorder les segments et pas les anodes/cathodes
si tu sais ou sont les uns, tu dois savoir ou sont les autres.

la photo ne sert à rien, il faut la référence qui doit être inscrite sur le coté de l'afficheur

voir aussi si sur ton site vendeur, s'il y a un schéma

attention pour le branchement des segments, ne pas oublier de mettre des résistances

la référence est HS420561K-32, c'était dans un pack amazon et j'avais deja reussis a l'allumer pas besoin de résistances

Cordialement,

Alors, comme je fait pour le cablage ?

si tu descends dans la page du lien suivant, tu y verras les caracteristiques de ton afficheur
ICI

ici, les indications ci dessous (à verifier)
Top Row: 1 A F 2 3 B
Bottom Row: E D DP C G 4

J'ai suivi tout ce que vous m'avez envoyer mais je ne parviens toujours pas a mon but

Cordialement,

c'est quoi ton problème? c'est quoi ton but?

Mon probleme est que le premier digit ne sallume pas et les autres affiches de la mer**

Et mon but et des creer une horloge avec un module RTC et 4 digit

Cordialement,

dis moi de quel type est ton afficheur
anodes communes ou cathodes communes?

comment as tu branché ton afficheur?

as tu utilisé des résistances de limitation du courant?

sans réponse de ta part, j'ai fais une maquette.

il a d'abord fallu que je sonne mon afficheur 4 digits pour retrouver le brochage
ce que j'ai fais avec des résistances de 270ohms
mon afficheur est à cathodes communes. j'ai monté 7 résistances sur les anodes.

pour tester mon prg
il y avait des erreurs dans l'allumage des segments.
exemple un 0 s'affichait en P.
une fois ce prob revu, j'avais D10 qui ne fonctionnait pas.
je l'ai remplacé par A1

ensuite, j'ai modifié le début du prg pour que tous les chiffres défilent sur les 4 digits.

l'affichage de l'heure est ok et le dp clignote bien

voici le prg qui fonctionne chez moi

reviens nous dire que c'est ok chez toi

#include <Wire.h>
#include <DS3231.h>
DS3231 clock;
RTCDateTime dt;
// reserve pour serial RX      = 0;
// reserve pour serial TX      = 1;
byte segment_a                 = 2;//segment a  du jeu d'afficheurs 1
byte segment_b                 = 3;//segment b  du jeu d'afficheurs 1
byte segment_c                 = 4;//segment c  du jeu d'afficheurs 1
byte segment_d                 = 5;//segment d  du jeu d'afficheurs 1
byte segment_e                 = 6;//segment e  du jeu d'afficheurs 1
byte segment_f                 = 7;//segment f  du jeu d'afficheurs 1
byte segment_g                 = 8;//segment g  du jeu d'afficheurs 1
byte segment_dp                = 9;//segment dp du jeu d'afficheurs 1

byte digit_dizaines_heures     =15;//transistor sur anode digit dizaines  d'heures   afficheurs 1
byte digit_heures              =11;//transistor sur anode digit             heures   afficheurs 1
byte digit_dizaines_minutes    =12;//transistor sur anode digit dizaines de minutes  afficheurs 1
//reserve led temoin           =13
byte digit_minutes             =14;//A0 transistor sur anode digit             minutes  afficheurs 1
byte digit_dizaines_secondes   =10;//A1 transistor sur anode digit dizaines de secondes afficheurs 1
byte digit_secondes            =16;//A2 transistor sur anode digit             secondes afficheurs 1
// libre                       =A3;
// reserve i2c SDA  DS3231     =A4;
// reserve i2c SCL  DS3231     =A5;
int digit=0;
int valeur = 0;
int memo_secondes=0;
unsigned long temps_top = 0;
boolean top = false;
boolean dp = true;
int dgp=0;
int h=0;
int mn=0;
int s=0;
//boolean DPB = true;
void setup() {
  clock.begin();
  Serial.begin(115200);
for (int f = 2; f < 10;f++){pinMode(f,OUTPUT); digitalWrite(f,LOW);}
for (int f = 11;f < 18;f++){pinMode(f,OUTPUT);digitalWrite(f,HIGH);}//Désactivation de tous les digits
 for (int f= 0;f<10;f++){//inscrit un trait horizontal sur les digits
  digit=digit_dizaines_heures;valeur=f;aiguillage();delay(200);// inscrit zéro sur les dizaines heures
  digit=digit_heures;valeur=f;aiguillage();delay(200); // inscrit zéro sur les heures
  digit=digit_dizaines_minutes;valeur=f;aiguillage();delay(200); // inscrit zéro sur les dizaines minutes
  digit=digit_minutes;valeur=f;aiguillage();delay(200); // inscrit zéro sur les minutes
  //digit=digit_dizaines_secondes;valeur=f;aiguillage();delay(200); // inscrit zéro sur les dizaines secondes
  //digit=digit_secondes;valeur=f;aiguillage();delay(200); // inscrit zéro sur les secondes
 }
  clock.setDateTime(__DATE__, __TIME__);
  dt = clock.getDateTime();
  h=atoi(clock.dateFormat("H", dt));Serial.print(h);
  Serial.print(":");
  mn= atoi(clock.dateFormat("i", dt));Serial.print(mn);
  Serial.print(" ");
  s=atoi(clock.dateFormat("s", dt));Serial.print(s);
  Serial.println(" ");
}

void loop() {
   dt = clock.getDateTime();
  if (memo_secondes!=atoi((clock.dateFormat("s", dt)))){dp=!dp;memo_secondes=atoi((clock.dateFormat("s", dt)));Serial.print("_______________________dp = ");Serial.println(dp);}

     //dizaines heures
if ((atoi(clock.dateFormat("H", dt)))>10)
  {digit=digit_dizaines_heures;valeur=(atoi(clock.dateFormat("H", dt)))/10;dgp=0;aiguillage();Serial.print(valeur);Serial.print ("");}  
 else{valeur=0;dgp=0;aiguillage();Serial.print(valeur);Serial.print ("");}
delay(5); //heures
  {digit=digit_heures;valeur=((atoi(clock.dateFormat("H", dt)))%10);dgp=dp;aiguillage();dgp=dp;Serial.print(valeur);Serial.print (" ");}   
 delay(5);    //dizaines minutes
if ((atoi(clock.dateFormat("i", dt)))>10)
  {digit=digit_dizaines_minutes;valeur=((atoi(clock.dateFormat("i", dt)))/10);dgp=0;aiguillage();Serial.print(valeur);Serial.print ("");}   
 else{valeur=0;dgp=0;aiguillage();Serial.print(valeur);Serial.print ("");}
delay(5); //minutes
  {digit=digit_minutes;valeur=((atoi(clock.dateFormat("i", dt)))%10);dgp=0;aiguillage();Serial.print(valeur);Serial.println (" ");}   
 delay(5);    //dizaines secondes
/*if ((atoi(clock.dateFormat("s", dt)))>10)
  {digit=digit_dizaines_secondes;valeur=((atoi(clock.dateFormat("s", dt)))/10);dgp=0;aiguillage();Serial.print(valeur);Serial.print ("");} 
//secondes
else{valeur=0;dgp=0;aiguillage();Serial.print(valeur);Serial.print ("");}
  {digit=digit_secondes;valeur=((atoi(clock.dateFormat("s", dt)))%10);aiguillage();dgp=0;Serial.print(valeur);Serial.println (" ");}  
*/

}

void aiguillage()
  {
        switch (valeur)
        { 
         case 0://             A B C D E F G    //chiffre 0
           actionDigital(digit,1,1,1,1,1,1,0,dgp);
           break ;
         case 1://             A B C D E F G    //chiffre 1
           actionDigital(digit,0,1,1,0,0,0,0,dgp);
           break ;
         case 2://             A B C D E F G    //chiffre 2
           actionDigital(digit,1,1,0,1,1,0,1,dgp);
           break ;
         case 3://             A B C D E F G    //chiffre 3
           actionDigital(digit,1,1,1,1,0,0,1,dgp);
           break ;
         case 4://             A B C D E F G    //chiffre 4
           actionDigital(digit,0,1,1,0,0,1,1,dgp);
           break ;
         case 5://             A B C D E F G    //chiffre 5
           actionDigital(digit,1,0,1,1,0,1,1,dgp);
           break ;                         
         case 6://             A B C D E F G    //chiffre 6
           actionDigital(digit,1,0,1,1,1,1,1,dgp);
           break ;       
         case 7://             A B C D E F G    //chiffre 7
           actionDigital(digit,1,1,1,0,0,0,0,dgp);
           break ;
         case 8://             A B C D E F G    //chiffre 8
           actionDigital(digit,1,1,1,1,1,1,1,dgp);
           break ;
         case 9://             A B C D E F G    //chiffre 9
           actionDigital(digit,1,1,1,1,0,1,1,dgp);
           break ;
         default:
         break;
       }
   }


 
   //                                A        B         C          D           E        F        G
  void actionDigital(byte digit,byte un,byte deux,byte trois,byte quatre,byte cinq,byte six,byte sept,byte dgpt)
  {
     digitalWrite(digit_dizaines_heures,  HIGH);    //desactive le digit dizaines de heures
     digitalWrite(digit_heures, HIGH);              //desactive le digit heures
     digitalWrite(digit_dizaines_minutes, HIGH);    //desactive le digit dizaines de minutes
     digitalWrite(digit_minutes, HIGH);             //desactive le digit minutes
     digitalWrite(digit_dizaines_secondes,HIGH);    //desactive le digit dizaines de secondes
     digitalWrite(digit_secondes, HIGH);            //desactive le digit secondes
     digitalWrite(digit, LOW);                      //active le digit concerne 
     digitalWrite(segment_a, un);                   //Segment A
     digitalWrite(segment_b, deux);                 //Segment B
     digitalWrite(segment_c, trois);                //Segment C
     digitalWrite(segment_d, quatre);               //Segment D
     digitalWrite(segment_e, cinq);                 //Segment E
     digitalWrite(segment_f, six);                  //Segment F
     digitalWrite(segment_g, sept);                 //Segment G
     digitalWrite(segment_dp, dgpt);                //Segment digital point
  }

@dfg la barre d’espace et le return sont cassés sur votre clavier ? :slight_smile:

for (int f = 2; f < 10;f++){pinMode(f,OUTPUT); digitalWrite(f,LOW);}
for (int f = 11;f < 18;f++){pinMode(f,OUTPUT);digitalWrite(f,HIGH);}//Désactivation de tous les digits
 for (int f= 0;f<10;f++){//inscrit un trait horizontal sur les digits
  digit=digit_dizaines_heures;valeur=f;aiguillage();delay(200);// inscrit zéro sur les dizaines heures
  digit=digit_heures;valeur=f;aiguillage();delay(200); // inscrit zéro sur les heures
  digit=digit_dizaines_minutes;valeur=f;aiguillage();delay(200); // inscrit zéro sur les dizaines minutes
  digit=digit_minutes;valeur=f;aiguillage();delay(200); // inscrit zéro sur les minutes
  //digit=digit_dizaines_secondes;valeur=f;aiguillage();delay(200); // inscrit zéro sur les dizaines secondes
  //digit=digit_secondes;valeur=f;aiguillage();delay(200); // inscrit zéro sur les secondes
 }

c’est un peu dense à lire, non?

hello JM
c'est une vieille habitude.
lorsque qu'une partie de code est opérationnelle, je la "tasse bien" de façon à ce qu'elle prenne le moins de lignes possible.
lorsqu'il faut parcourir l'écran, c'est moins rasoir si le programme est court.

il m'arrive aussi de déplacer ces parties opérationnelles dans d'autres onglets, tout en sachant que je n'aurais plus à les regarder.

OK
Pas super simple à lire quand c’est posté ici

Il y a des éditeurs de code qui permettent de « replier » des blocs de texte c’est pratique pour cela mais l’IDE arduino ne le fait pas en effet

Perso je préfère la lisibilité à la longueur avec une bonne souris on scroll vite :slight_smile: