Faire une horloge avec 4 7 segments displays

Bonsoir,
Je reposte un nouveau sujet,

Je souhaite faire une horloge avec des digits

Carte utiliser : Arduino Genuino Uno R3
Module RTC : DS3213
Afficheur : hs420561k-32 (4 digit de chacun 7 segments)

Le probleme c'est que sur mes digits sa m'affiche : 0 RIEN RIEN 0
Au lieu de 22:02

Le code

#include <config.h>
#include <DS3231.h>
#include <Wire.h>
DS3231 clock;
RTCDateTime dt;
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;

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;
int x = 10;

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() {
  clock.begin();
  dt = clock.getDateTime();
  h = atoi(clock.dateFormat("H", dt));
  mn = atoi(clock.dateFormat("i", dt));
  setAfficheur(mn,h);
}

//-------------------------------
// 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 nombrea) {
  int M = nombre / 1000, C = (nombre - M * 1000) / 100, D = (nombre - M * 1000 - C * 100) / 10,U = (nombre - M * 1000 - C * 100 - D * 10);
  int Ma = nombrea / 1000, Ca = (nombrea - Ma * 1000) / 100;
  setDigit(4, U) ;
  delay(2);
  setDigit(3, D) ;
  delay(2);
  setDigit(2, Ca) ;
  delay(2);
  setDigit(1, Ma) ;
  delay(2);

}

Quand je change le void loop comme sa :

void loop() {
  setAfficheur(16,21);
}

Cela m'affiche : 0 0 1 6 au lieu de : 1 6 2 1

J'éspère avoir été compréhensif,
Cordialement,

retournes voir sur ton 1er post, tu y as une reponse

nota: pourquoi ouvrir un 2eme post