Optimisation code

Bonjour à tous.
J'ai écrit un code qui permet d'utliser un afficher 7 segments 4 digits.
Je n'ai pas utilisé de bibliothèque, et je sais que je me suis cassé la tête pour rien mais j'avais envie de faire du code.

Dans ce code, je fait 10 fois appelle à une fonction différente et j'execute exactement la même chose après chaque. Mais j'aimerais savoir comment faire pour mettre tout ça dans une boucle. Je pense qu'il faut utiliser un tableau mais je ne voie pas comment.

Voila un bout du code.
Merci de votre aide en avance.

void loop()
{
  affiche0();
  digitalWrite(digit1,HIGH);
  delay(1000);
  digitalWrite(digit1,LOW);
  digitalWrite(digit2,HIGH);
  delay(1000);
  digitalWrite(digit2,LOW);
  digitalWrite(digit3,HIGH);
  delay(1000);
  digitalWrite(digit3,LOW);
  digitalWrite(digit4,HIGH);
  delay(1000);
  digitalWrite(digit4,LOW);
  clean();
  

  affiche1();
  digitalWrite(digit1,HIGH);
  delay(1000);
  digitalWrite(digit1,LOW);
  digitalWrite(digit2,HIGH);
  delay(1000);
  digitalWrite(digit2,LOW);
  digitalWrite(digit3,HIGH);
  delay(1000);
  digitalWrite(digit3,LOW);
  digitalWrite(digit4,HIGH);
  delay(1000);
  digitalWrite(digit4,LOW);
  clean();
  
       
  affiche2();
  digitalWrite(digit1,HIGH);
  delay(1000);
  digitalWrite(digit1,LOW);
  digitalWrite(digit2,HIGH);
  delay(1000);
  digitalWrite(digit2,LOW);
  digitalWrite(digit3,HIGH);
  delay(1000);
  digitalWrite(digit3,LOW);
  digitalWrite(digit4,HIGH);
  delay(1000);
  digitalWrite(digit4,LOW);
  clean();

  
  affiche3();
  digitalWrite(digit1,HIGH);
  delay(1000);
  digitalWrite(digit1,LOW);
  digitalWrite(digit2,HIGH);
  delay(1000);
  digitalWrite(digit2,LOW);
  digitalWrite(digit3,HIGH);
  delay(1000);
  digitalWrite(digit3,LOW);
  digitalWrite(digit4,HIGH);
  delay(1000);
  digitalWrite(digit4,LOW);
  clean();
  
  
  affiche4();
  digitalWrite(digit1,HIGH);
  delay(1000);
  digitalWrite(digit1,LOW);
  digitalWrite(digit2,HIGH);
  delay(1000);
  digitalWrite(digit2,LOW);
  digitalWrite(digit3,HIGH);
  delay(1000);
  digitalWrite(digit3,LOW);
  digitalWrite(digit4,HIGH);
  delay(1000);
  digitalWrite(digit4,LOW);
  clean();

  
  affiche5();
  digitalWrite(digit1,HIGH);
  delay(1000);
  digitalWrite(digit1,LOW);
  digitalWrite(digit2,HIGH);
  delay(1000);
  digitalWrite(digit2,LOW);
  digitalWrite(digit3,HIGH);
  delay(1000);
  digitalWrite(digit3,LOW);
  digitalWrite(digit4,HIGH);
  delay(1000);
  digitalWrite(digit4,LOW);
  clean();

  
  affiche6();
  digitalWrite(digit1,HIGH);
  delay(1000);
  digitalWrite(digit1,LOW);
  digitalWrite(digit2,HIGH);
  delay(1000);
  digitalWrite(digit2,LOW);
  digitalWrite(digit3,HIGH);
  delay(1000);
  digitalWrite(digit3,LOW);
  digitalWrite(digit4,HIGH);
  delay(1000);
  digitalWrite(digit4,LOW);
  clean();

  
  affiche7();
  digitalWrite(digit1,HIGH);
  delay(1000);
  digitalWrite(digit1,LOW);
  digitalWrite(digit2,HIGH);
  delay(1000);
  digitalWrite(digit2,LOW);
  digitalWrite(digit3,HIGH);
  delay(1000);
  digitalWrite(digit3,LOW);
  digitalWrite(digit4,HIGH);
  delay(1000);
  digitalWrite(digit4,LOW);
  clean();

  
  affiche8();
  digitalWrite(digit1,HIGH);
  delay(1000);
  digitalWrite(digit1,LOW);
  digitalWrite(digit2,HIGH);
  delay(1000);
  digitalWrite(digit2,LOW);
  digitalWrite(digit3,HIGH);
  delay(1000);
  digitalWrite(digit3,LOW);
  digitalWrite(digit4,HIGH);
  delay(1000);
  digitalWrite(digit4,LOW);
  clean();

  
  affiche9();
  digitalWrite(digit1,HIGH);
  delay(1000);
  digitalWrite(digit1,LOW);
  digitalWrite(digit2,HIGH);
  delay(1000);
  digitalWrite(digit2,LOW);
  digitalWrite(digit3,HIGH);
  delay(1000);
  digitalWrite(digit3,LOW);
  digitalWrite(digit4,HIGH);
  delay(1000);
  digitalWrite(digit4,LOW);
  clean();

}

Bonjour,

Tu peux regrouper tout ce qui est commun et est appelé plusieurs fois dans une fonction
Par exemple:

void fonction()
{
  digitalWrite(digit1,HIGH);
  delay(1000);
  digitalWrite(digit1,LOW);
  digitalWrite(digit2,HIGH);
  delay(1000);
  digitalWrite(digit2,LOW);
  digitalWrite(digit3,HIGH);
  delay(1000);
  digitalWrite(digit3,LOW);
  digitalWrite(digit4,HIGH);
  delay(1000);
  digitalWrite(digit4,LOW);
  clean();
}

Ce qui donne le programme:

void loop()
{
  affiche0();
  fonction();

  affiche1();
  fonction();
       
  affiche2();
  fonction();
  
  affiche3();
  fonction();
  
  affiche4();
  fonction();
  
  affiche5();
  fonction();
  
  affiche6();
  fonction();
  
  affiche7();
  fonction();
  
  affiche8();
  fonction();
  
  affiche9();
  fonction();
}

Mais j’ai l’impression que ce n’est pas trop ça ton problème.
Il me semble que le problème est de regrouper les fonctions afficheX() en une seule fonction et surtout d’afficher des chiffres différents sur chaque digits simultanément (vu par l’opérateur).

en fait vous devriez rajouter une fonction qui fait le boulot de selection du chiffre pour vous afin d’offrir une interface de plus haut niveau au programmeur

void affiche(byte n)
{
  if (n >= 0 && n <= 9) {
    switch (n) {
      case 0: affiche0(); break;
      case 1: affiche1(); break;
      case 2: affiche2(); break;
      case 3: affiche3(); break;
      case 4: affiche4(); break;
      case 5: affiche5(); break;
      case 6: affiche6(); break;
      case 7: affiche7(); break;
      case 8: affiche8(); break;
      case 9: affiche9(); break;
    }
    delay(1000);
    digitalWrite(digit1, LOW);
    digitalWrite(digit2, HIGH);
    delay(1000);
    digitalWrite(digit2, LOW);
    digitalWrite(digit3, HIGH);
    delay(1000);
    digitalWrite(digit3, LOW);
    digitalWrite(digit4, HIGH);
    delay(1000);
    digitalWrite(digit4, LOW);
    clean();
  }
}


void loop()
{
  for (byte b = 0; b<10; b++) affiche(b);
}

Les deux fonctionnes.
Merci beaucoup pour votre aide.