Bugs avec mon code (Pov Clock)

Si tu définissais tes caractères dans un seul tableau tu t'éviterais bien des complications.
Actuellement tu codes un caractère sur 40 octets (8 x5) alors que tu pourrais le stocker sur 5 octets

boolean TROIS [8][5] = { 
  {0,1,1,1,0},
  {1,0,0,0,1},
  {0,0,0,0,1},
  {0,1,1,1,0},
  {0,0,0,0,1},
  {0,0,0,0,1},
  {1,0,0,0,1},
  {0,1,1,1,0},
};

peut être remplacé par

  byte TROIS[5]={   // le caractère est tourné d'un quart de tour 
     0b01000010,
     0b10001001,
     0b10001001,
     0b10001001,
     0b01110110
};

Ensuite au lieu de faire un million de if ou de case si tu faisais un un tableau de tableau tu pourrais accéder directement à l'élément que tu veux

byte carMap[Nb_caracteres][5]={
{
     0b01111110,    // caractère 0
     0b10000001,
     0b10000001,
     0b10000001,
     0b01111110
},
{
     0b00000000,    // caractère 1
     0b00000000,
     0b00000010,
     0b11111111,
     0b00000000
},
...........
{
     0b01000010,    // caractère 3
     0b10001001,
     0b10001001,
     0b10001001,
     0b01110110
},
.........
};

Ensuite tu modifies ta routine d'affichage

void AffColonnes (char tab [5])
  {
   for (j=0; j<5; j++)
    {
        for (i=0; i<8; i++)
          {
            digitalWrite(LED[i] ,tab [j]>>i);    
          }
          delayMicroseconds (delai);
    }
      for (i=0; i<8; i++)
      {
        digitalWrite(LED[i] ,initialisation [i]);     <--- je suppose qu'ici tu éteints les LED tu pourrais mettre directement 0
      }
      delayMicroseconds (delai);
  }

Ensuite tu fais

void afficher (int chiffre){
      AffColonnes(carMap[chiffre]);
}

Code pas testé et il est tard. Il y a peut être des erreurs mais l'idée est là