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à