Horloge type wordclock

Bonjour à tous.

Il y a quelque mois j'étais venu sur ce forum demander conseil pour mon projet d'horloge de type wordclock.

Depuis ce précédant passage, le projet à bien avancer et la partie "matérielle" est finie. J'ai opté pour une matrice LED allumant des groupes de LED selon le tableau ci-dessous. J'ai également un module rtc. Les ligne 1-3-4-5-6-7 de mon tableau sont inversées avec un transistor. Les ligne de mon table sont placée dans les ports 0 à 7 de mon arduino UNO et les colonnes dans les ports 8 à 12.

J'en suis actuellement au code, et c'est là que mes problèmes apparaissent.
J'arrive bien à traiter les heures pour les convertir en heure "affichée". Par contre, l'affichage matrice pose bien plus de problème. J'ai écris mon code en mode "barbare" sans vrai optimisation, mais il me paraît juste. Il m'affiche n'importe quoi, du style, j'ai régler l'heures de ma carte sur 13h, les LED correspondant aux heures cinq, six, sept, et le re de quatre s'affiche, mais pas l'heure "une".

Voici mon code, en espérant que vous trouverez les problèmes, car perso je suis bloqué.
J'ai enlevé la partie "traitement de l'heure" car sinon le post ferait plus de 9000 caractère, et comme cette partie ne bug pas, je l'ai remplacée par (...)

Merci d'avance pour votre aide

#include<Wire.h>
#include "DS1307.h"
int clock_hour;
int clock_minute;
int clock_calculsupminute;
int clock_supminute;
int clock_calculminute;
int clock_calculhour;
DS1307 clock;
void setup(){
  for (int i=0;i<13;i++){
    pinMode(i, OUTPUT);
    digitalWrite(i,HIGH);
  }
  digitalWrite(1,LOW);
  digitalWrite(7,LOW);
  clock.begin();
  clock.fillByYMD(2017,11,23);
  clock.fillByHMS(13,10,30);
  clock.fillDayOfWeek(SAT);
  clock.setTime();
  Serial.begin(9600);
}
void loop(){
  printTime();
}
void printTime(){
  clock.getTime();

(...)

  
  if (clock_hour == 1){
    digitalWrite (0,LOW);
    digitalWrite (8,LOW);
    delay(2);
    digitalWrite (0,HIGH);
    digitalWrite(8,HIGH);
  }
  if (clock_hour == 2){
    digitalWrite (0,LOW);
    digitalWrite (9,LOW);
    delay(2);
    digitalWrite (0,HIGH);
    digitalWrite(9,HIGH);
  }
  if (clock_hour == 3){
    digitalWrite (0,LOW);
    digitalWrite (10,LOW);
    delay(2);
    digitalWrite (0,HIGH);
    digitalWrite(10,HIGH);
  }
  if (clock_hour == 3){
    digitalWrite (0,LOW);
    digitalWrite (11,LOW);
    delay(2);
    digitalWrite (0,HIGH);
    digitalWrite(11,HIGH);
  }
  if (clock_hour == 4){
    digitalWrite (0,LOW);
    digitalWrite (12,LOW);
    delay(2);
    digitalWrite (0,HIGH);
    digitalWrite(12,HIGH);
  }
  if (clock_hour == 4){
    digitalWrite (1,HIGH);
    digitalWrite (8,LOW);
    delay(2);
    digitalWrite (1,LOW);
    digitalWrite(8,HIGH);
  }
  if (clock_hour == 5){
    digitalWrite (1,HIGH);
    digitalWrite (9,LOW);
    delay(2);
    digitalWrite (1,LOW);
    digitalWrite(9,HIGH);
  }
  if (clock_hour == 6){
    digitalWrite (1,HIGH);
    digitalWrite (10,LOW);
    delay(2);
    digitalWrite (1,LOW);
    digitalWrite(10,HIGH);
  }
  if (clock_hour == 7){
    digitalWrite (1,HIGH);
    digitalWrite (11,LOW);
    delay(2);
    digitalWrite (1,LOW);
    digitalWrite(11,HIGH);
  }
  if (clock_hour == 8){
    digitalWrite (1,HIGH);
    digitalWrite (12,LOW);
    delay(2);
    digitalWrite (1,LOW);
    digitalWrite(12,HIGH);
  }
 if (clock_hour == 9){
    digitalWrite (2,LOW);
    digitalWrite (8,LOW);
    delay(2);
    digitalWrite (2,HIGH);
    digitalWrite(8,HIGH);
  }
  if (clock_hour == 10){
    digitalWrite (2,LOW);
    digitalWrite (9,LOW);
    delay(2);
    digitalWrite (2,HIGH);
    digitalWrite(9,HIGH);
  }
  if (clock_hour == 11){
    digitalWrite (2,LOW);
    digitalWrite (10,LOW);
    delay(2);
    digitalWrite (2,HIGH);
    digitalWrite(10,HIGH);
  }
  if (clock_hour == 12){
    digitalWrite (2,LOW);
    digitalWrite (11,LOW);
    delay(2);
    digitalWrite (2,HIGH);
    digitalWrite(11,HIGH);
  }
  if (clock_hour == 12){
    digitalWrite (2,LOW);
    digitalWrite (12,LOW);
    delay(2);
    digitalWrite (2,HIGH);
    digitalWrite(12,HIGH);
  }
  digitalWrite (3,LOW);
  digitalWrite (8,LOW);
  digitalWrite(9,LOW);
  delay(2);
  digitalWrite (3,HIGH);
  digitalWrite (8,HIGH);
  digitalWrite(9,HIGH);
  if(clock_hour!=0&&clock_hour!=12){
    digitalWrite(3,LOW);
    digitalWrite(10,LOW);
    delay(2);
    digitalWrite(3,HIGH);
    digitalWrite(10,HIGH);
  }
  if(clock_minute==15||clock_minute==30){
    digitalWrite(3,LOW);
    digitalWrite(11,LOW);
    delay(2);
    digitalWrite(3,HIGH);
    digitalWrite(11,HIGH);
  }
  if(clock_minute<0){
    digitalWrite(3,LOW);
    digitalWrite(12,LOW);
    delay(2);
    digitalWrite(3,HIGH);
    digitalWrite(12,HIGH);
  }
  if (clock_hour>1&&clock_hour!=12){
    digitalWrite(4,LOW);
    digitalWrite(8,LOW);
    delay(2);
    digitalWrite(4,HIGH);
    digitalWrite(8,HIGH);
  }
  if(clock_minute==10||clock_minute==-10){
    digitalWrite(4,LOW);
    digitalWrite(9,LOW);
    delay(2);
    digitalWrite(4,HIGH);
    digitalWrite(9,HIGH);
  }
   if(clock_minute==15||clock_minute==-15){
    digitalWrite(4,LOW);
    digitalWrite(10,LOW);
    delay(2);
    digitalWrite(4,HIGH);
    digitalWrite(10,HIGH);
  }
   if(clock_minute==15||clock_minute==-15){
    digitalWrite(4,LOW);
    digitalWrite(11,LOW);
    delay(2);
    digitalWrite(4,HIGH);
    digitalWrite(11,HIGH);
  }
  if(clock_hour<-15||clock_hour==20||clock_hour==25){
    digitalWrite(4,LOW);
    digitalWrite(12,LOW);
    delay(2);
    digitalWrite(4,HIGH);
    digitalWrite(12,HIGH);
  }
  if(clock_hour<-15||clock_hour==20||clock_hour==25){
    digitalWrite(5,LOW);
    digitalWrite(8,LOW);
    delay(2);
    digitalWrite(5,HIGH);
    digitalWrite(8,HIGH);
  }
  if(clock_hour==-25||clock_hour==25){
    digitalWrite(5,LOW);
    digitalWrite(9,LOW);
    delay(2);
    digitalWrite(5,HIGH);
    digitalWrite(9,HIGH);
  }
  if(clock_hour==-25||clock_hour==25){
    digitalWrite(5,LOW);
    digitalWrite(10,LOW);
    delay(2);
    digitalWrite(5,HIGH);
    digitalWrite(10,HIGH);
  }
  if(clock_supminute>0){
    digitalWrite(5,LOW);
    digitalWrite(11,LOW);
    delay(2);
    digitalWrite(5,HIGH);
    digitalWrite(11,HIGH);
  }
  if(clock_supminute==4){
    digitalWrite(5,LOW);
    digitalWrite(12,LOW);
    delay(2);
    digitalWrite(5,HIGH);
    digitalWrite(12,HIGH);
  }
  if(clock_supminute>2){
    digitalWrite(6,LOW);
    digitalWrite(8,LOW);
    delay(2);
    digitalWrite(6,HIGH);
    digitalWrite(8,HIGH);
  }
  if(clock_supminute>1){
    digitalWrite(6,LOW);
    digitalWrite(9,LOW);
    delay(2);
    digitalWrite(6,HIGH);
    digitalWrite(9,HIGH);
  }
  if(clock_hour!=0&&clock_hour!=12){
    digitalWrite(6,LOW);
    digitalWrite(10,LOW);
    delay(2);
    digitalWrite(6,HIGH);
    digitalWrite(10,HIGH);
  }
  if(clock_hour==12){
    digitalWrite(6,LOW);
    digitalWrite(11,LOW);
    delay(2);
    digitalWrite(6,HIGH);
    digitalWrite(11,HIGH);
  }
  if(clock_minute==30){
    digitalWrite(6,LOW);
    digitalWrite(12,LOW);
    delay(2);
    digitalWrite(6,HIGH);
    digitalWrite(12,HIGH);
  }
  if(clock_minute==30){
    digitalWrite(7,HIGH);
    digitalWrite(8,LOW);
    delay(2);
    digitalWrite(7,LOW);
    digitalWrite(8,HIGH);
  }
  if(clock_minute<0){
    digitalWrite(7,HIGH);
    digitalWrite(9,LOW);
    delay(2);
    digitalWrite(7,LOW);
    digitalWrite(9,HIGH);
  }  
 
}

Effectivement pour le code c’est du grand n’importe quoi apparement :slight_smile:

Le texte dans votre image, on y comprend rien.... Faites une table avec les heures et la correspondances des leds à allumer par exemple

Vous avez une machine à voyager dans le temps?

if(clock_hour<[color=red]-15[/color]||clock_hour==20||clock_hour==[color=red]25[/color]){
...
if(clock_minute[color=red]<0[/color]){

Comment gérez vous l’effacement d’une heure précédemment affichée quand elle change?

Il faut savoir que mon horloge affiche l'heure en méthode "orale" (trois heures moins vingt-cinq). Je me suis inspirer de cette horloge, mais je l'ai ensuite corriger et donc un poil modifier.
La famille créative: Une "Word Clock" en français.
Par contre, je n'ai pas repris son code car j'y comprends pas grand chose avec mes connaissances, et comme un travail scolaire, c'est à moi de le faire avec mes armes. De plus je suis loin d'avoir le même montage que lui

Ensuite, pour les minutes négatives que tu as trouvé, c'est bien juste et voulu.
En effet en entrée de ma matrice j'ai donc la variable clock_hour qui va de 0 à 12, clock_supminute qui va de 0 à 4, et enfin clock_minute qui va de -25 à +30 par pas de 5minute.

Voici le tableau que j'espère plus clair pour toi:

Heure à afficher LED à allumer
1h 1-1 ; 4-1 ; 4-2 ; 4-3 ; 7-3
2h 1-2 ; 4-1 ; 4-2 ; 4-3 ; 5-1 ; 7-3
3h 1-3 ; 1-4 ; 4-1 ; 4-2 ; 4-3 ; 5-1 ; 7-3
4h 1-5 ; 2-1 ; 4-1 ; 4-2 ; 4-3 ; 5-1 ; 7-3
5h 2-2 ; 4-1 ; 4-2 ; 4-3 ; 5-1 ; 7-3
6h 2-3 ; 4-1 ; 4-2 ; 4-3 ; 5-1 ; 7-3
7h 2-4 ; 4-1 ; 4-2 ; 4-3 ; 5-1 ; 7-3
8h 2-5 ; 4-1 ; 4-2 ; 4-3 ; 5-1 ; 7-3
9h 3-1 ; 4-1 ; 4-2 ; 4-3 ; 5-1 ; 7-3
10h 3-2 ; 4-1 ; 4-2 ; 4-3 ; 5-1 ; 7-3
11h 3-3 ; 4-1 ; 4-2 ; 4-3 ; 5-1 ; 7-3
Midi 4-1 ; 4-2 ; 7-4
Minuit 3-4 ; 3-5 ; 4-1 ; 4-2
+5min 6-3
+10min 5-2
+15min 4-4 ; 5-3 ; 5-4
+20min 5-5 ; 6-1
+25min 5-5 ; 6-1 ; 6-2 ; 6-3
+30min 4-4 ; 7-5 ; 8-1
-25min 4-5 ; 8-2 ; 5-5 ; 6-1 ; 6-2 ; 6-3
-20min 4-5 ; 8-2 ; 5-5 ; 6-1
-15min 4-5 ; 8-2 ; 4-4 ; 5-3 ; 5-4
-10min 4-5 ; 8-2 ; 5-2
-5min 4-5 ; 8-2 ; 6-3

Enfin les LED 6-4, 6-5, 7-1 et 7-2 servent à allumer les minutes supplémentaires (clock_supminute dans le code)

Enfin pour éteindre les LED, après un delay de 2 milliseconde, je repasse les différents ports en position initiale (HIGH sauf pour les ligne 2 et 8).
Ensuite, les heures se mettent à jour quand je relance la fonction prinTime().

Enfin, tu as bien trouvé une erreur avec le morceau de code
if(clock_hour<-15||clock_hour==20||clock_hour==25){
je dois remplacer clock_hour par clock_minute

Merci déjà pour tes remarques et bon courage pour la suite, je vais également continuer quelques test de mon côté.

et la partie gestion du courant ?

La gestion du courant est gérée directement par la carte.
J'ai calculé de sorte que chaque groupe de LED utilise moins de 40mA avec du 5V.
Ils sont donc directement gérés par la carte.
Néanmoins au cas où je procède par balayage, les lignes 1,3,4,5,6,7 sont reliées à un transistor pour éviter de dépasser les 40mA par sortie.

les pins ne doivent pas délivrer plus de 20mA de manière soutenue

le design a été approuvé par un prof d'électronique et j'ai déjà passé 2j et demi à faire des soudures, donc c'est un poil tard si mon montage est inutilisable. Lors de mon premier post au mois de juillet, j'avais demandé des conseil, notamment sur les LED, il me semble assez évident de donner cette info à ce moment là à un novice comme moi, mais bon, j'ai peut-être pas votre logique.
Maintenant j'aurais vraiment besoin d'un code qui marche, et c'est pour ça que je suis venu ici, mais comme la dernière fois, au mois de juillet, j'ai de plus en plus peur de repartir bredouille

J'ai quand même voulu voir si c'est pas un court circuit ou un autre problème dans mon montage. Mais quand je balance ce code, tout se passe comme prévu, il y a seulement le 1-1 et le 2-1 qui s'allume

int x = 1;
void setup(){
  pinMode (0,OUTPUT);
  pinMode(1,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(9,OUTPUT);
  digitalWrite(0, true);
  digitalWrite(1,false);
  digitalWrite(8,true);
  digitalWrite(9,true);
}
void loop(){
digitalWrite(0,false);
digitalWrite(8,false);
delay(2);
digitalWrite(0,true);
digitalWrite(1,true);
if (x==1){
digitalWrite(8,true);
digitalWrite(9,false);
delay(2);
digitalWrite(1,false);
digitalWrite(9, true);
}
else {
  digitalWrite(1,true);
  digitalWrite(8, false);
  delay(2);
  digitalWrite(1,false);
  digitalWrite(8, true);
}
}

J'ai également écrit dans le moniteur la variable clock_hour, mais elle est juste, c'est bien 1h qui apparaît quand je lance le gros code, mais les led d'1h s'allume pas, c'est la ligne deux qui s'allume.

alpha_1426:
le design a été approuvé par un prof d'électronique et j'ai déjà passé 2j et demi à faire des soudures, donc c'est un poil tard si mon montage est inutilisable. Lors de mon premier post au mois de juillet, j'avais demandé des conseil, notamment sur les LED, il me semble assez évident de donner cette info à ce moment là à un novice comme moi, mais bon, j'ai peut-être pas votre logique.
Maintenant j'aurais vraiment besoin d'un code qui marche, et c'est pour ça que je suis venu ici, mais comme la dernière fois, au mois de juillet, j'ai de plus en plus peur de repartir bredouille

quand on viens demander un coup de main, on se fait humble et on ne fait pas de reproches comme ceux ci

ton code est incomplet. il est plus facile de chercher ce qui ne va pas avec un code entier.
j'ai voulu mettre un peu d'ordre dans ton code. et ce faisant, j'ai vu qu'il y a une partie qui n'est pas inclue dans un if.

voici ce que j'ai fais.
tu verras qu'il est plus facile de suivre ce qui se passe.

et encore une fois, change de ton.

#include<Wire.h>
#include "DS1307.h"
int clock_hour;
int clock_minute;
int clock_calculsupminute;
int clock_supminute;
int clock_calculminute;
int clock_calculhour;
DS1307 clock;
void setup(){
  for (int i=0;i<13;i++){
    pinMode(i, OUTPUT);
    digitalWrite(i,HIGH);
  }
  digitalWrite(1,LOW);
  digitalWrite(7,LOW);
  clock.begin();
  clock.fillByYMD(2017,11,23);
  clock.fillByHMS(13,10,30);
  clock.fillDayOfWeek(SAT);
  clock.setTime();
  Serial.begin(9600);
}
void loop(){
  printTime();
}
void printTime(){
  clock.getTime();

(...)

  if (clock_hour == 1){affiche(0,8,0,0,1,1);}
  if (clock_hour == 2){affiche(0,9,0,0,1,1);}
  if (clock_hour == 3){affiche(0,10,0,0,1,1);}
  if (clock_hour == 3){affiche(0,11,0,0,1,1);}
  if (clock_hour == 4){affiche(0,12,0,0,1,1);}
  if (clock_hour == 4){affiche(1,8,1,0,0,1);}
  if (clock_hour == 5){affiche(1,9,1,0,0,1);}
  if (clock_hour == 6){affiche(1,10,1,0,0,1);}
  if (clock_hour == 7){affiche(1,11,1,0,0,1);}
  if (clock_hour == 8){affiche(1,12,1,0,0,1);}  
  if (clock_hour == 9){affiche(2,8,0,0,1,1);}
  if (clock_hour == 10){affiche(2,9,0,0,1,1);}
  if (clock_hour == 11){affiche(2,10,0,0,1,1);}
  if (clock_hour == 12){affiche(2,11,0,0,1,1);}
  if (clock_hour == 12){affiche(2,12,0,0,1,1);}
  
   //ici dans ton prg, il manque le if quelque chose
   
  digitalWrite (3,LOW);
  digitalWrite (8,LOW);
  digitalWrite(9,LOW);
  delay(2);
  digitalWrite (3,HIGH);
  digitalWrite (8,HIGH);
  digitalWrite(9,HIGH);
  if(clock_hour!=0&&clock_hour!=12){affiche(3,10,0,0,1,1);}
  if(clock_minute==15||clock_minute==30){affiche(3,11,0,0,1,1);}
  if(clock_minute<0){affiche(3,12,0,0,1,1);}
  if (clock_hour>1&&clock_hour!=12){affiche(4,8,0,0,1,1);}
  if(clock_minute==10||clock_minute==-10){affiche(4,9,0,0,1,1);}
  if(clock_minute==15||clock_minute==-15){affiche(4,10,0,0,1,1);}
  if(clock_minute==15||clock_minute==-15){affiche(4,11,0,0,1,1);}
  if(clock_hour<-15||clock_hour==20||clock_hour==25){affiche(4,12,0,0,1,1);} 
  if(clock_hour<-15||clock_hour==20||clock_hour==25){affiche(5,8,0,0,1,1);} 
  if(clock_hour==-25||clock_hour==25){affiche(5,9,0,0,1,1);} 
  if(clock_hour==-25||clock_hour==25){affiche(5,10,0,0,1,1);} 
  if(clock_supminute>0){affiche(5,11,0,0,1,1);} 
  if(clock_supminute==4){affiche(5,12,0,0,1,1);} 
  if(clock_supminute>2){affiche(6,8,0,0,1,1);}  
  if(clock_supminute>1){affiche(6,9,0,0,1,1);}
  if(clock_hour!=0&&clock_hour!=12){affiche(6,10,0,0,1,1);}
  if(clock_hour==12){affiche(6,11,0,0,1,1);}
  if(clock_minute==30){affiche(6,12,0,0,1,1);}
  if(clock_minute==30){affiche(7,8,1,0,0,1);}  
  if(clock_minute<0){affiche(7,9,1,0,0,1);}
}

void affiche(int para1,int para2,int para3,int para4,int para5,int para6)
{
    digitalWrite(para1,para3);
    digitalWrite(para2,para4);
    delay(2);
    digitalWrite(para1,para5);
    digitalWrite(para2,para6);
}

ton post de juillet:

ICI

tu avais été plutot bien renseigné

Effectivement, il y a des infos précises, mais la limite de 20mA, je ne la trouve pas dans vos réponse.
Après j'ai beaucoup de mal avec les spécialistes em arduino et autre programme informatique.
Je ne suis aucun cours de programmation/microcontroller, mais je dois rendre un travail pour la fin d'année dessus.

Bref loin de moi l'idée de dénigrer votre travail, à toi et tous les autres spécialistes qui aident les gens "novice" et désolé si je t'ai touché ou si tu t'es senti insulté/pas respecté.

Sinon pour en revenir au sujet initial du post, avec mes connaissances, je ne comprends absolument pas les bugs, si tu veux des vidéos ou n'importe quoi d'autre, hésite pas à me donner skype ou autre, bien plus pratique.

Tu me sauverais vraiment si tu arrives à résoudre le bug, car la je sèche avec mes connaissances

tu utilises les pinoches D0 et D1 qui sont aussi initialisées par serial.beguin(9600); dans le setup
ensuite confirme tes paramètres:

tableau:
de 5 colonnes numérotées de 1 à 5
de 8 lignes numérotées de 1 à 8

les colonnes sont raccordées respectivement à D8, D9, D10, D11, D12 et sont activées par un niveau HIGH
les lignes sont raccordées respectivement à D0, D1, D2, D3, D4, D5, D6, D7, D8

les lignes 1,3,4,5,6,7 sont inversée par transistor, donc activées par un niveau LOW
les lignes 2 et 8 ne sont pas inversées et sont donc activées par un niveau HIGH.

si tu veux pouvoir utiliser le moniteur série, il faudra libérer D0 et D1. donc prendre A0 et A1 par exemple.

relis bien ce qui précède et confirme que c'est juste.

nota: si nous avions le code complet, nous ne nous demanderions pas si les entrées A0 à A5 sont libres.

peux tu tester ce bout de code

int clock_hour=0;
void setup(){
  pinMode(0,OUTPUT);digitalWrite(0, true);
  pinMode(3,OUTPUT);digitalWrite(1,true);
  pinMode(6,OUTPUT);digitalWrite(1,true);
  pinMode(8,OUTPUT);digitalWrite(9,false);
  pinMode(9,OUTPUT);digitalWrite(9,false);
  pinMode(10,OUTPUT);digitalWrite(10,false);
 
}
void loop(){
  clock_hour++;
  if (clock_hour == 1){affiche2(0,8,0,1,1,0);}
  if (clock_hour == 2){affiche2(0,9,0,1,1,0);}
  if (clock_hour == 3){affiche4(0,10,7,8,0,1,1,0,1,1,0,0);}
  if (clock_hour == 4){affiche4(0,12,1,8,0,1,1,0,1,1,0,0);}
  if (clock_hour == 5){affiche2(1,9,1,1,0,0);}
  if (clock_hour == 6){affiche2(1,10,1,1,0,0);}
  if (clock_hour == 7){affiche2(1,11,1,1,0,0);}
  if (clock_hour == 8){affiche2(1,12,1,1,0,0);}
  if (clock_hour == 9){affiche2(2,8,0,1,1,0);}
  if (clock_hour == 10){affiche2(2,9,0,1,1,0);}
  if (clock_hour == 11){affiche2(2,10,0,1,1,0);}
  
}
void affiche2(byte ligne ,byte colonne,int para1,int para2,int para3,int para4)
{
    digitalWrite(ligne,para1);
    digitalWrite(colonne,para2);
    delay(1000);
    digitalWrite(ligne,para3);
    digitalWrite(colonne,para4);
    delay(1000);
}
void affiche4(byte ligne1 ,byte colonne1,byte ligne2 ,byte colonne2,int para1,int para2,int para3,int para4,int para5,int para6,int para7,int para8)
{
    digitalWrite(ligne1,para1);
    digitalWrite(colonne1,para2);
    digitalWrite(ligne2,para5);
    digitalWrite(colonne2,para6);
    delay(1000);
    digitalWrite(ligne1,para3);
    digitalWrite(colonne1,para4);
    digitalWrite(ligne2,para7);
    digitalWrite(colonne2,para8);
    delay(1000);
}

Lors de mon premier post au mois de juillet, j'avais demandé des conseil, notamment sur les LED, il me semble assez évident de donner cette info à ce moment là à un novice comme moi, mais bon, j'ai peut-être pas votre logique.

C’est juste du foutage de g.... relisez les réponses...

effectivement il n'y a pas de if avant les led 3-8 et 3-9 car c'est des LED qui doivent toujours être allumée.
Sinon, pour le code complet, j'ai pas pu car le forum voulait pas le recevoir (trop long). Après je peux te transmettre le fichier, mais il y a une limite à 9000 caractères sur le forum.

Pour les port utilisé, ta synthèse est bien juste. Après, je n'ai pas besoin du moniteur, je l'ai juste utiliser pour essayer de debugger. Ensuite, il reste les ports D13, A0, A1, A2, A3 de libre, j'ai juste un module RTC brancher en A4 et A5

Désolé si je ne t'ai pas répondu hier soir, j'étais pas chez moi, loin de mon ordi.

Je vais maintenant tester le code que tu m'as envoyé. Je te ferai un feedback.

j'ai testé ton code, voilà ce que j'observe:
les LED 1-1;1-2;1-3;4-1;4-2;4-3;7-1;7-2;7-3 s'allume.

Après il y a un ou deux truc que je peine à comprendre ton ton code et qui me semble moyennement logique:

Quand tu introduis les LED, tu introduis pas les lignes une, deux, trois, mais les ligne une, quatre, sept.
Ensuite tu fais un digitalWrite(1, true), mais le pin D1 n'est pas introduit au début.

pinMode(3,OUTPUT);digitalWrite(1,true);
  pinMode(6,OUTPUT);digitalWrite(1,true);
  pinMode(8,OUTPUT);digitalWrite(9,false);

Tu actives également 4 groupes de LED avec ta fonction affiche4, je sais pas si c'est voulu.

peux tu :
modifier ton cablage en remplacant D0 par A0 et D1 par A1
puis tester le code ci joint
il a pour but de controler une partie de ton cablage.
il doit compter de 1 à 11 toutes les secondes
attention, regarde bien les commentaires derrieres les if clock==...

int clock_hour=0;
void setup(){
  Serial.begin(115200);
  for (byte f=2;f<8;f++) {pinMode(f,OUTPUT);digitalWrite(f, true);}//D2 à D7
  for (byte f=8;f<13;f++){pinMode(f,OUTPUT);digitalWrite(f,false);}//D8 à D12
  pinMode(14,OUTPUT);digitalWrite(9, true);                        //A0
  pinMode(15,OUTPUT);digitalWrite(0,false);                        //A1
 
}
void loop(){
  clock_hour++;
  if (clock_hour == 1) {affiche2(0,8,0,1);}          //1.1  A0.D8  "une"
  if (clock_hour == 2) {affiche2(0,9,0,1);}          //1.2  A0.D9  "deux"
  if (clock_hour == 3) {affiche4(0,10,0,11,0,1,1,0);}//1.3  A0.D10 "troi"
                                                     //1.4  A0.D11 "s"
  if (clock_hour == 4) {affiche4(0,12,1,8,0,1,1,0);} //1.5  A0.D12 "quat"
                                                     //2.1  A1.D8  "re"
  if (clock_hour == 5) {affiche2(1,9,1,1);}          //2.2  A1.D9  "cinq"
  if (clock_hour == 6) {affiche2(1,10,1,1);}         //2.3  A1 D10 "six"
  if (clock_hour == 7) {affiche2(1,11,1,1);}         //2.4  A1 D11 "sept"
  if (clock_hour == 8) {affiche2(1,12,1,1);}         //2.5  A1 D12 "huit"
  if (clock_hour == 9) {affiche2(2,8,0,1);}          //3.1  D2 D8  "neuf"
  if (clock_hour == 10){affiche2(2,9,0,1);}          //3.2  D2.D9  "dix"
  if (clock_hour == 11){affiche2(2,10,0,1);}         //3.3  D2.D10 "onze"
  
}
void affiche2(byte ligne ,byte colonne,int para1,int para2)
{
    digitalWrite(ligne,para1);  Serial.print(ligne);Serial.print(" ");Serial.print(para1);Serial.print(" ");
    digitalWrite(colonne,para2);Serial.print(colonne);Serial.print(" ");Serial.println(para2);
    delay(1000);
    digitalWrite(ligne,(!para1));Serial.print(ligne);Serial.print(" ");Serial.print(!para1);Serial.print(" ");
    digitalWrite(colonne,(!para2));Serial.print(colonne);Serial.print(" ");Serial.println(!para2);
    delay(1000);
}
void affiche4(byte ligne1 ,byte colonne1,byte ligne2 ,byte colonne2,int para1,int para2,int para3,int para4)
{
    digitalWrite(ligne1,  para1);Serial.print(ligne1);Serial.print(" ");Serial.print(para1);Serial.print(" ");
    digitalWrite(colonne1,para2);Serial.print(colonne1);Serial.print(" ");Serial.println(para2);
    digitalWrite(ligne2,  para3);Serial.print(ligne2);Serial.print(" ");Serial.print(para3);Serial.print(" ");
    digitalWrite(colonne2,para4);Serial.print(colonne2);Serial.print(" ");Serial.println(para4);
    delay(1000);
    digitalWrite(ligne1,  (!para1));Serial.print(ligne1);Serial.print(" ");Serial.print(!para1);Serial.print(" ");
    digitalWrite(colonne1,(!para2));Serial.print(colonne1);Serial.print(" ");Serial.println(!para2);
    digitalWrite(ligne2,  (!para3));Serial.print(ligne2);Serial.print(" ");Serial.print(!para3);Serial.print(" ");
    digitalWrite(colonne2,(!para4));Serial.print(colonne2);Serial.print(" ");Serial.println(!para4);
    delay(1000);
}

C'est très étrange, ton code marche pas bien, certaine LED s'active pas dans l'ordre, certaines pas du tout, certaines s'allument deux fois.

J'ai essayé d'envoyer ce code, et ça marche, tous les groupes s'allument sauf le "sept" et "huit

void setup(){
  pinMode (A0,OUTPUT);
  pinMode(A1,OUTPUT);
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(9,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(11,OUTPUT);
  pinMode(12,OUTPUT);
  digitalWrite(A0, true);
  digitalWrite(A1, false);
  digitalWrite(2,true);
  digitalWrite(3,true);
  digitalWrite(4,true);
  digitalWrite(5,true);
  digitalWrite(6,true);
  digitalWrite(7,false);
  digitalWrite(8,true);
  digitalWrite(9,true);
  digitalWrite(10,true);
  digitalWrite(11,true);
  digitalWrite(12,true);
}
void loop(){
digitalWrite(A0, false);
digitalWrite(8,false);
delay(1000);
digitalWrite(A0,true);
digitalWrite(8,true);
digitalWrite(A0, false);
digitalWrite(9,false);
delay(1000);
digitalWrite(A0,true);
digitalWrite(9,true);
digitalWrite(A0, false);
digitalWrite(10,false);
delay(1000);
digitalWrite(A0,true);
digitalWrite(10,true);
digitalWrite(A0, false);
digitalWrite(11,false);
delay(1000);
digitalWrite(A0,true);
digitalWrite(11,true);
digitalWrite(A0, false);
digitalWrite(12,false);
delay(1000);
digitalWrite(A0,true);
digitalWrite(12,true);
digitalWrite(A1, true);
digitalWrite(8,false);
delay(1000);
digitalWrite(A1,false);
digitalWrite(8,true);
digitalWrite(A1,true);
digitalWrite(9,false);
delay(1000);
digitalWrite(A1,true);
digitalWrite(9,true);
digitalWrite(A1, false);
digitalWrite(10,false);
delay(1000);
digitalWrite(A1,true);
digitalWrite(10,true);
digitalWrite(A1, false);
digitalWrite(11,false);
delay(1000);
digitalWrite(A1,true);
digitalWrite(11,true);
digitalWrite(A1, false);
digitalWrite(12,false);
delay(1000);
digitalWrite(A1,false);
digitalWrite(12,true);
digitalWrite(2, false);
digitalWrite(8,false);
delay(1000);
digitalWrite(8,true);
digitalWrite(2,true);
delay(1000);
}

Par contre, individuellement, avec le code ci-dessous, il s'allume

void setup(){
  pinMode(A1, OUTPUT);
  pinMode(11,OUTPUT);
}
void loop(){
  digitalWrite(A1, true);
  digitalWrite(12,false);
}

Personnellement, je trouve ça très étrange et je vois mal comment l'expliquer.

si jamais j'ai juste fait une faute de "logique" en échangeant des true et des false. Avec le code de mon message précédant, chaque groupe s'allume seconde après seconde

ton dernier code, avec lequel tu dis que individuellement, il s'allume. tu parles de quoi?

dans ton set up tu déclares en sortie les pins A1 et D11

dans ta loop tu mets A1 en high , donc activé
et D12 en LOW, donc désactivé. ( tu as initialisé D11 dans ton setup)

alors:
1/ rester calme
2/ retenir que l'on réserve D0 et D1 pour le moniteur aussi longtemps que c'est possible.
3/ donner des explications claires.
4/il me semble urgent de controler la concordance entre ton cablage et ton fichier excell

a ce propos, je l'ai refait. je te le joint en copie d'écran

edit je regarde à nouveau ton 1er code de test