Je te propose une version un peu plus sécurisée :
int resultat [4] = {0, 0, 0, 0} ; // tableau des places a l arrivee. la case 0 correspond a la piste 1, la case 1 a la piste 2 et ainsi de suite
int ordre = 1;
int piste;
/* affectation des pins */
int ledPin[8] = {8, 9, 10, 2, 3, 5, 4, 11}; // tableau des segments de l'afficheur
int cellPin[4] = {A0, A1, A2, A3}; /* affectation de la cellule*/
int d[4] = {6, 12, 13, 7};
/* initialisation des sorties */
void setup()
{
Serial.begin(9600); /* connection entre port série de la carte et le PC */
for (int i = 0; i < 4; i++) pinMode (cellPin[i], INPUT); // les broches des cellules photo electriques sont des entrées
for (int i = 0; i < 8; i++) pinMode (ledPin[i], OUTPUT);
for (int i = 0; i < 4; i++) pinMode (d[i], OUTPUT);
}
void loop()
{
if (ordre < 4) { // toutes les voitures ne sont pas arrivées
// boucle for pour remplir le tableau resultat et affficher le classement sur le digit de chaque piste
for (piste = 0 ; piste < 4 ; piste++) { /* debut de la boucle for */
if ( resultat[piste] == 0) { // on ne lit que les pistes qui ne sont pas arrivées
if (digitalRead(cellPin[piste]) == HIGH) { // si la voiture coupe la ligne d'arrivée
resultat[piste] = ordre;
Serial.print("la voiture de la piste :"); Serial.println(piste);
Serial.print("a terminé :"); Serial.println(ordre);
ordre++ ; // on incremente ordre pour la prochaine boucle for
} // fin de la boucle if
}
} /*fin de la boucle for*/
} else { // Toutes les voitures sont arrivées
for (int j = 0 ; j < 4 ; j++) { // ici, on va afficher le classement de la piste - on va aller chercher dans tableau la valeur la case 0 qui correspond a la voie 1
digitalWrite(d[j] , HIGH); // on ecrit sur la broche d[0]=1,d[1]=2,d[2]=3 et d[3]=4
afficheur(j + 1); // on active l afficheur 4 (exemple)
afficher(resultat[j]); // exemple on va chercher la valeur enregistré dans la case 3 du tableau resultat soit 1
delay(1000);
} // end for
} // end else
}// fin de loop
void afficheur(char chiffre)
{
if (chiffre == 1)
{
digitalWrite (d[0], HIGH);
digitalWrite (d[1], LOW);
digitalWrite (d[2], LOW);
digitalWrite (d[3], LOW);
}
if (chiffre == 2)
{
digitalWrite (d[0], LOW);
digitalWrite (d[1], HIGH);
digitalWrite (d[2], LOW);
digitalWrite (d[3], LOW);
}
if (chiffre == 3)
{
digitalWrite (d[0], LOW);
digitalWrite (d[1], LOW);
digitalWrite (d[2], HIGH);
digitalWrite (d[3], LOW);
}
if (chiffre == 4)
{
digitalWrite (d[0], LOW);
digitalWrite (d[1], LOW);
digitalWrite (d[2], LOW);
digitalWrite (d[3], HIGH);
}
} // fin void afficheur
void afficher(char chiffre)
{
if (chiffre == 1)
{
digitalWrite (ledPin[0], HIGH);
digitalWrite (ledPin[1], LOW);
digitalWrite (ledPin[2], LOW);
digitalWrite (ledPin[3], HIGH);
digitalWrite (ledPin[4], HIGH);
digitalWrite (ledPin[5], HIGH);
digitalWrite (ledPin[6], HIGH);
digitalWrite (ledPin[7], HIGH);
}
if (chiffre == 2)
{
digitalWrite (ledPin[0], LOW);
digitalWrite (ledPin[1], LOW);
digitalWrite (ledPin[2], HIGH);
digitalWrite (ledPin[3], LOW);
digitalWrite (ledPin[4], LOW);
digitalWrite (ledPin[5], HIGH);
digitalWrite (ledPin[6], LOW);
digitalWrite (ledPin[7], HIGH);
}
if (chiffre == 3)
{
digitalWrite (ledPin[0], LOW);
digitalWrite (ledPin[1], LOW);
digitalWrite (ledPin[2], LOW);
digitalWrite (ledPin[3], LOW);
digitalWrite (ledPin[4], HIGH);
digitalWrite (ledPin[5], HIGH);
digitalWrite (ledPin[6], LOW);
digitalWrite (ledPin[7], HIGH);
}
if (chiffre == 4)
{
digitalWrite (ledPin[0], HIGH); // A
digitalWrite (ledPin[1], LOW); //B
digitalWrite (ledPin[2], LOW); //C
digitalWrite (ledPin[3], HIGH); //D
digitalWrite (ledPin[4], HIGH); //E
digitalWrite (ledPin[5], LOW); //F
digitalWrite (ledPin[6], LOW); //G
digitalWrite (ledPin[7], HIGH); //DP
}
} // fin void afficher