Horloge avec 4x7 digital displays

Bonsoir,
J'essaye depuis plus de 5heures de faire une horloge sans succes

J'ai reussis a faire le systeme d'heures avec un module rtc et le digital display mais je n'arrive pas a lier les deux.

Voici mes 2 codes:
Désoler pour les fautes et le post un peut baclé mais j'en ai marre.

Afficheur

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

RTC_DS1307 rtc;
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() {
 DateTime now = rtc.now();
 setAfficheur(now.hour);
}
//-------------------------------
// 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);

}

RTC

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

RTC_DS1307 rtc;

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

void setup () {
  while (!Serial);

  Serial.begin(115200);
  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }

  if (! rtc.isrunning()) {
    Serial.println("RTC is NOT running!");
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }
}

void loop () {
  DateTime now = rtc.now();
  rtc.adjust(now.unixtime());
  Serial.print(now.hour());
  Serial.print(':');
  Serial.print(now.minute());
  Serial.print(' ');
}

Nous aussi on en a marre des fois... pourquoi devraient on vous excuser d’un post bâclé ?

Allez lire le post Épinglés en haut du forum qui s’appelle Coup de gueule : Nouveaux lisez les messages épinglés !

Bon mais pour vous aider peut-on vous rappeller que votre horloge fonctionne en I2C et donc utilise A4 pour SDA et A5 pour SCL si vous êtes sur un UNO par exemple...Il me semble avoir vu A4 dans votre premier code posté sans balises de code...

Salut

Çà risque de ramer pas mal et c'est pas très joli ton truc à base de switch/case et 7 x digitalWrite() pour afficher un digit.
Tu ferais mieux de manipuler directement les ports PORTB PORTC PORTD avec une table des segments décrivant chaque digit, et un masque. Ce serait beaucoup plus concis et rapide.
De plus tu ne gères pas les deux points centraux, c'est plus vivant quand ils clignotent, et ils t'indiquent en plus que ton logiciel n'a pas planté.

Quel afficheur utilises-tu ?

@+

hello
fusion de 2 prg:
tu as deux loop, deux setup
pourquoi une ds1307 et pas une ds3231?