Problème de chronomètre avec un afficheur 7 segment et une carte arduino méga

Bonjour à tous, je pratique du roller de vitesse en compétition et pour cela je me fabrique un chronomètre géant et automatique à l'aide d'une carte arduino Mega qui me permettra de voir mon temps au tour de piste.

Je me suis fabriqué manuellement un afficheur 7 segments à cathodes communes ,avec une LED pour 1 segment. Il me sert de chronomètre géant. Cet afficheur (le chronomètre) est déclenché à l'aide d'un capteur à ultrason (HR-SR04). Mon but est de déclencher le chronomètre quand je passe, devant le capteur, puis quand je repasse, devant le capteur, il faut redémarrer le chronomètre à zero et afficher mon temps au tour pendant 5 secondes.

caractéristique du chronomètre :
-chaque segment est relié à une broche.
-c'est un afficheur à cathodes communes.
-l'afficheur afficher les centièmes de secondes, les dixièmes de secondes, les secondes et les dizaines de secondes.

J'ai commencé le programme, j'ai réussi à faire le chronomètre et à le lancer à l'aide du capteur, maintenant le problème est que je n'arrive plus à l’arrêter et encore moins garder mon temps pendant 5sc.

Je vous transmet le code :

Le problème est que je n'arrive pas à stopper la fonction "chrono();". Est ce que une fonction se stoppe ? fallait-il tout mettre dans des variables ?
SVP j'aimerai de l'aide pour le terminer, Merci beaucoup.

Cordialement Etienne Douillard.

Salut,

Il manque le code, de plus je pense que la capteur à ultrason n'est pas forcement celui qui est le plus adapté a ton projet, car quand tu vas couper les ultrason ta vitesse sera rapide, donc risque que le capteur n'est pas le temps de réagir.

voici le code, désolé je pensais l'avoir mis.

/***/
/* PROGRAMME AFFICHEUR /
/
/

/**/
/Variable pour le capteur/
/
/
const int TRIGGER_PIN = 12;
const int ECHO_PIN = 13;

long cm;
long lecture_echo ;

//
/
Variable pour stocker les secondes, centièmes,le temps au tour...
/
/
/
char s=0;
char ds=0;
char cs=0;
char diz=0;
long temps_au_tour;

//
/Variable pour déclarer les ports des leds./
/
/
//centième
const char led1_A = 53;
const char led2_B = 52;
const char led3_C = 51;
const char led4_G = 50;
const char led5_D = 49;
const char led6_F = 48;
const char led7_E = 47;
//dixième
const char led8_B = 46;
const char led9_C = 45;
const char led10_A = 44;
const char led11_G = 43;
const char led12_D = 42;
const char led13_F = 41;
const char led14_E = 40;
// 2 points
const char led15_point = 39;
const char led16_point = 38;
//unités secondes
const char led17_B = 37;
const char led18_C = 36;
const char led19_A = 35;
const char led20_G = 34;
const char led21_D = 33;
const char led22_F = 32;
const char led23_E = 31;
//dizaines de secondes
const char led24_B = 30;
const char led25_C = 29;
const char led26_A = 28;
const char led27_G = 27;
const char led28_D = 26;
const char led29_F = 25;
const char led30_E = 24;

void setup()
{
/*/
/Initialisation du capteur/
/
/
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
digitalWrite(TRIGGER_PIN, LOW);

/*************************************/
/Initialisation des leds en sortie./
/***********************************/
//centième
pinMode (led1_A, OUTPUT);
pinMode (led2_B, OUTPUT);
pinMode (led3_C, OUTPUT);
pinMode (led4_G, OUTPUT);
pinMode (led5_D, OUTPUT);
pinMode (led6_F, OUTPUT);
pinMode (led7_E, OUTPUT);
//dixième
pinMode (led8_B, OUTPUT);
pinMode (led9_C, OUTPUT);
pinMode (led10_A, OUTPUT);
pinMode (led11_G, OUTPUT);
pinMode (led12_D, OUTPUT);
pinMode (led13_F, OUTPUT);
pinMode (led14_E, OUTPUT);
///les deux points
pinMode (led15_point, OUTPUT);
pinMode (led16_point, OUTPUT);
//unités de secondes
pinMode (led17_B, OUTPUT);
pinMode (led18_C, OUTPUT);
pinMode (led19_A, OUTPUT);
pinMode (led20_G, OUTPUT);
pinMode (led21_D, OUTPUT);
pinMode (led22_F, OUTPUT);
pinMode (led23_E, OUTPUT);
//dizaines de secondes
pinMode (led24_B, OUTPUT);
pinMode (led25_C, OUTPUT);
pinMode (led26_A, OUTPUT);
pinMode (led27_G, OUTPUT);
pinMode (led28_D, OUTPUT);
pinMode (led29_F, OUTPUT);
pinMode (led30_E, OUTPUT);

}

/**/
/Fonctions qui affichent chaques chiffres 1 par 1/
/
/

//fonction qui affiche 00:00
void afficherrien()
{//centième
digitalWrite (led1_A,LOW);
digitalWrite (led2_B,LOW);
digitalWrite (led3_C, LOW);
digitalWrite (led4_G, LOW);
digitalWrite (led5_D, LOW);
digitalWrite (led6_F, LOW);
digitalWrite (led7_E, LOW);
//dixième
digitalWrite (led8_B, LOW);
digitalWrite (led9_C, LOW);
digitalWrite (led10_A, LOW);
digitalWrite (led11_G, LOW);
digitalWrite (led12_D, LOW);
digitalWrite (led13_F, LOW);
digitalWrite (led14_E, LOW);
///les deux points
digitalWrite (led15_point, LOW);
digitalWrite (led16_point, LOW);
//unités de secondes
digitalWrite (led17_B, LOW);
digitalWrite (led18_C, LOW);
digitalWrite (led19_A, LOW);
digitalWrite (led20_G, LOW);
digitalWrite (led21_D, LOW);
digitalWrite (led22_F, LOW);
digitalWrite (led23_E, LOW);
//dizaines de secondes
digitalWrite (led24_B, LOW);
digitalWrite (led25_C, LOW);
digitalWrite (led26_A, LOW);
digitalWrite (led27_G, LOW);
digitalWrite (led28_D, LOW);
digitalWrite (led29_F, LOW);
digitalWrite (led30_E, LOW);
}

//fonction qui affiche 00:0o
void afficher00_0_()
{
digitalWrite (led1_A, HIGH);
digitalWrite (led2_B, HIGH);
digitalWrite (led3_C, HIGH);
digitalWrite (led4_G, LOW);
digitalWrite (led5_D, HIGH);
digitalWrite (led6_F, HIGH);
digitalWrite (led7_E, HIGH);
}
//Fonction qui affiche 00:01
void afficher00_01()
{
digitalWrite (led1_A, LOW);
digitalWrite (led2_B, HIGH);
digitalWrite (led3_C, HIGH);
digitalWrite (led4_G, LOW);
digitalWrite (led5_D, LOW);
digitalWrite (led6_F, LOW);
digitalWrite (led7_E, LOW);
}
//Fonction qui affiche 00:02
void afficher00_02()
{
digitalWrite (led1_A, HIGH);
digitalWrite (led2_B, HIGH);
digitalWrite (led3_C, LOW);
digitalWrite (led4_G, HIGH);
digitalWrite (led5_D, HIGH);
digitalWrite (led6_F, LOW);
digitalWrite (led7_E, HIGH);
}
//Fonction qui affiche 00:03
void afficher00_03()
{
digitalWrite (led1_A, HIGH);
digitalWrite (led2_B, HIGH);
digitalWrite (led3_C, HIGH);
digitalWrite (led4_G, HIGH);
digitalWrite (led5_D, HIGH);
digitalWrite (led6_F, LOW);
digitalWrite (led7_E, LOW);
}
//Fonction qui affiche 00:04
void afficher00_04()
{
digitalWrite (led1_A, LOW);
digitalWrite (led2_B, HIGH);
digitalWrite (led3_C, HIGH);
digitalWrite (led4_G, HIGH);
digitalWrite (led5_D, LOW);
digitalWrite (led6_F, HIGH);
digitalWrite (led7_E, LOW);
}
//Fonction qui affiche 00:05
void afficher00_05()
{
digitalWrite (led1_A, HIGH);
digitalWrite (led2_B, LOW);
digitalWrite (led3_C, HIGH);
digitalWrite (led4_G, HIGH);
digitalWrite (led5_D, HIGH);
digitalWrite (led6_F, HIGH);
digitalWrite (led7_E, LOW);
}
//Fonction qui affiche 00:06
void afficher00_06()
{
digitalWrite (led1_A, HIGH);
digitalWrite (led2_B, LOW);
digitalWrite (led3_C, HIGH);
digitalWrite (led4_G, HIGH);
digitalWrite (led5_D, HIGH);
digitalWrite (led6_F, HIGH);
digitalWrite (led7_E, HIGH);
}
//Fonction qui affiche 00:07
void afficher00_07()
{
digitalWrite (led1_A, HIGH);
digitalWrite (led2_B, HIGH);
digitalWrite (led3_C, HIGH);
digitalWrite (led4_G, LOW);
digitalWrite (led5_D, LOW);
digitalWrite (led6_F, LOW);
digitalWrite (led7_E, LOW);
}
//Fonction qui affiche 00:08
void afficher00_08()
{
digitalWrite (led1_A, HIGH);
digitalWrite (led2_B, HIGH);
digitalWrite (led3_C, HIGH);
digitalWrite (led4_G, HIGH);
digitalWrite (led5_D, HIGH);
digitalWrite (led6_F, HIGH);
digitalWrite (led7_E, HIGH);
}
//Fonction qui affiche 00:09
void afficher00_09()
{
digitalWrite (led1_A, HIGH);
digitalWrite (led2_B, HIGH);
digitalWrite (led3_C, HIGH);
digitalWrite (led4_G, HIGH);
digitalWrite (led5_D, HIGH);
digitalWrite (led6_F, HIGH);
digitalWrite (led7_E, LOW);
}

//------------------------------------//

//fonction qui affiche 0o:00
void afficher0__00()
{
digitalWrite (led17_B,HIGH);
digitalWrite (led18_C,HIGH);
digitalWrite (led19_A,HIGH);
digitalWrite (led20_G,LOW);
digitalWrite (led21_D,HIGH);
digitalWrite (led22_F,HIGH);
digitalWrite (led23_E,HIGH);
}
//fonction qui affiche 01:00
void afficher01_00()
{
digitalWrite (led17_B,HIGH);
digitalWrite (led18_C,HIGH);
digitalWrite (led19_A,LOW);
digitalWrite (led20_G,LOW);
digitalWrite (led21_D,LOW);
digitalWrite (led22_F,LOW);
digitalWrite (led23_E,LOW);
}
//fonction qui affiche 02:00
void afficher02_00()
{
digitalWrite (led17_B,HIGH);
digitalWrite (led18_C,LOW);
digitalWrite (led19_A,HIGH);
digitalWrite (led20_G,HIGH);
digitalWrite (led21_D,HIGH);
digitalWrite (led22_F,LOW);
digitalWrite (led23_E,HIGH);
}
//fonction qui affiche 03:00
void afficher03_00()
{
digitalWrite (led17_B,HIGH);
digitalWrite (led18_C,HIGH);
digitalWrite (led19_A,HIGH);
digitalWrite (led20_G,HIGH);
digitalWrite (led21_D,HIGH);
digitalWrite (led22_F,LOW);
digitalWrite (led23_E,LOW);
}
//fonction qui affiche 04:00
void afficher04_00()
{
digitalWrite (led17_B,HIGH);
digitalWrite (led18_C,HIGH);
digitalWrite (led19_A,LOW);
digitalWrite (led20_G,HIGH);
digitalWrite (led21_D,LOW);
digitalWrite (led22_F,HIGH);
digitalWrite (led23_E,LOW);
}
//fonction qui affiche 05:00
void afficher05_00()
{
digitalWrite (led17_B,LOW);
digitalWrite (led18_C,HIGH);
digitalWrite (led19_A,HIGH);
digitalWrite (led20_G,HIGH);
digitalWrite (led21_D,HIGH);
digitalWrite (led22_F,HIGH);
digitalWrite (led23_E,LOW);
}
//fonction qui affiche 06:00
void afficher06_00()
{
digitalWrite (led17_B,LOW);
digitalWrite (led18_C,HIGH);
digitalWrite (led19_A,HIGH);
digitalWrite (led20_G,HIGH);
digitalWrite (led21_D,HIGH);
digitalWrite (led22_F,HIGH);
digitalWrite (led23_E,HIGH);
}
//fonction qui affiche 07:00
void afficher07_00()
{
digitalWrite (led17_B,HIGH);
digitalWrite (led18_C,HIGH);
digitalWrite (led19_A,HIGH);
digitalWrite (led20_G,LOW);
digitalWrite (led21_D,LOW);
digitalWrite (led22_F,LOW);
digitalWrite (led23_E,LOW);
}
//fonction qui afiche 08:00
void afficher08_00()
{
digitalWrite (led17_B,HIGH);
digitalWrite (led18_C,HIGH);
digitalWrite (led19_A,HIGH);
digitalWrite (led20_G,HIGH);
digitalWrite (led21_D,HIGH);
digitalWrite (led22_F,HIGH);
digitalWrite (led23_E,HIGH);
}
//fonction qui affiche 09:00
void afficher09_00()
{
digitalWrite (led17_B,HIGH);
digitalWrite (led18_C,HIGH);
digitalWrite (led19_A,HIGH);
digitalWrite (led20_G,HIGH);
digitalWrite (led21_D,HIGH);
digitalWrite (led22_F,HIGH);
digitalWrite (led23_E,LOW);
}

//---------------------------------//

//fonction qui affiche o0;00
void afficher_0_00()
{
digitalWrite (led24_B,HIGH);
digitalWrite (led25_C,HIGH);
digitalWrite (led26_A,HIGH);
digitalWrite (led27_G,LOW);
digitalWrite (led28_D,HIGH);
digitalWrite (led29_F,HIGH);
digitalWrite (led30_E,HIGH);
}
//fonction qui affiche 10:00
void afficher10_00()
{
digitalWrite (led24_B,HIGH);
digitalWrite (led25_C,HIGH);
digitalWrite (led26_A,LOW);
digitalWrite (led27_G,LOW);
digitalWrite (led28_D,LOW);
digitalWrite (led29_F,LOW);
digitalWrite (led30_E,LOW);
}
//fonctin qui affiche20:00
void afficher20_00()
{
digitalWrite (led24_B,HIGH);
digitalWrite (led25_C,LOW);
digitalWrite (led26_A,HIGH);
digitalWrite (led27_G,HIGH);
digitalWrite (led28_D,HIGH);
digitalWrite (led29_F,LOW);
digitalWrite (led30_E,HIGH);
}
//fonction qui affiche 30:00
void afficher30_00()
{
digitalWrite (led24_B,HIGH);
digitalWrite (led25_C,HIGH);
digitalWrite (led26_A,HIGH);
digitalWrite (led27_G,HIGH);
digitalWrite (led28_D,HIGH);
digitalWrite (led29_F,LOW);
digitalWrite (led30_E,LOW);
}
//fonction qui affiche 40:00
void afficher40_00()
{
digitalWrite (led24_B,HIGH);
digitalWrite (led25_C,HIGH);
digitalWrite (led26_A,LOW);
digitalWrite (led27_G,HIGH);
digitalWrite (led28_D,LOW);
digitalWrite (led29_F,HIGH);
digitalWrite (led30_E,LOW);
}
//fonction qui affiche 50:00
void afficher50_00()
{
digitalWrite (led24_B,LOW);
digitalWrite (led25_C,HIGH);
digitalWrite (led26_A,HIGH);
digitalWrite (led27_G,HIGH);
digitalWrite (led28_D,HIGH);
digitalWrite (led29_F,HIGH);
digitalWrite (led30_E,LOW);
}
//fonction qui affiche 60:00
void afficher60_00()
{
digitalWrite (led24_B,LOW);
digitalWrite (led25_C,HIGH);
digitalWrite (led26_A,HIGH);
digitalWrite (led27_G,HIGH);
digitalWrite (led28_D,HIGH);
digitalWrite (led29_F,HIGH);
digitalWrite (led30_E,HIGH);
}
//fonction qui affiche 70:00
void afficher70_00()
{
digitalWrite (led24_B,HIGH);
digitalWrite (led25_C,HIGH);
digitalWrite (led26_A,HIGH);
digitalWrite (led27_G,LOW);
digitalWrite (led28_D,LOW);
digitalWrite (led29_F,LOW);
digitalWrite (led30_E,LOW);
}
//fonction qui affiche 80:00
void afficher80_00()
{
digitalWrite (led24_B,HIGH);
digitalWrite (led25_C,HIGH);
digitalWrite (led26_A,HIGH);
digitalWrite (led27_G,HIGH);
digitalWrite (led28_D,HIGH);
digitalWrite (led29_F,HIGH);
digitalWrite (led30_E,HIGH);
}
//fonction qui affiche 90:00
void afficher90_00()
{
digitalWrite (led24_B,HIGH);
digitalWrite (led25_C,HIGH);
digitalWrite (led26_A,HIGH);
digitalWrite (led27_G,HIGH);
digitalWrite (led28_D,HIGH);
digitalWrite (led29_F,HIGH);
digitalWrite (led30_E,LOW);
}

//**//
//assemblé les chiffres en fesant des fonction de milièmes, centièmes, dizièmes//
//
//

//Fonction qui affiche les nombres des centiemes de 0 à 9
void centiemede0a9()
{
afficher00_0_();
delay(10);
afficher00_01();
delay(10);
afficher00_02();
delay(10);
afficher00_03();
delay(10);
afficher00_04();
delay(10);
afficher00_05();
delay(10);
afficher00_06();
delay(10);
afficher00_07();
delay(10);
afficher00_08();
delay(10);
afficher00_09();
delay(10);
}

//Fonction qui affiche les nombres des dizièmes de 00:00 à 00:99
void diziemede0a9()
{
centiemede0a9();
afficher00__0();
centiemede0a9();
afficher00_10();
centiemede0a9();
afficher00_20();
centiemede0a9();
afficher00_30();
centiemede0a9();
afficher00_40();
centiemede0a9();
afficher00_50();
centiemede0a9();
afficher00_60();
centiemede0a9();
afficher00_70();
centiemede0a9();
afficher00_80();
centiemede0a9();
afficher00_90();
}
//fonction des secondes
void secondesde0a9()
{
afficher0__00();
diziemede0a9();
afficher01_00();
diziemede0a9();
afficher02_00();
diziemede0a9();
afficher03_00();
diziemede0a9();
afficher04_00();
diziemede0a9();
afficher05_00();
diziemede0a9();
afficher06_00();
diziemede0a9();
afficher07_00();
diziemede0a9();
afficher08_00();
diziemede0a9();
afficher09_00();
diziemede0a9();
}
//fonction de tout le chronomètre
void chrono()
{
secondesde0a9();
afficher10_00();
secondesde0a9();
afficher20_00();
secondesde0a9();
afficher30_00();
secondesde0a9();
afficher40_00();
secondesde0a9();
afficher50_00();
secondesde0a9();
afficher60_00();
secondesde0a9();
afficher70_00();
secondesde0a9();
afficher80_00();
secondesde0a9();
afficher90_00();
}

void calculdistance()
{
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);
lecture_echo = pulseIn(ECHO_PIN, HIGH);
cm = lecture_echo / 58;
}
void loop()
{
calculdistance();
if (cm<10);
{
chrono();
break;
}
if (cm<10);
{ afficherrien();
}

}

voila j'ai mis le code, le problème est surtout dans le "void loop".
Merci Hameau pour la réponse, quel serait le capteur idéal par rapport à mon code maintenant ? Merci :slight_smile:

Si tu roule à 30 km/h (surement plus) tu fait environ 8.3 m/s, de profil le corps à une épaisseur de 0.35 m, ce qui fait que tu reste devant le capteur à ultrason environs 0.04s, donc je pense que celui-ci n'a pas le temps de réagir.

Sinon ce genre de capteur à ultrason, mais plus performant mais aussi plus €€

Max-Sonar-EZ0

Sinon autre solution , je partirais sur un capteur optique reflex, voir ci-dessous.

Pour le code, place le dans les balises .........., comment fait tu pour compter le temps, chronomètre ?.

Je partirais sur l’utilisation de la fonction millis(), qui donne le temps en millisecondes depuis la mise en route de l'arduino.

  • déclenchement -- > mémorisation de la valeur millis() : t1
  • repassage de capteur -- > mémorisation de la valeur millis() : t2
  • temps du tour : t2-t1
  • affichage t2-t1 avec une temporisation de 5s.

etc..

hello

ton idée est intéressante.
j'ai regardé ton code
combien de "rollers" passent devant ton détecteur ou ce système est il réservé à toi seul ?
( entrainements seul )?

le temps au tour n'excèdera jamais 59 secondes ?
longueur du tour?

Salut,

Pour le capteur optique, regarde ci-dessous.

capteur-ajustable-infra-rouge

Il y a même un tuto.

@+

Bonjour,

Je ne pense pas que ce type de capteur soit le plus adapté pour détecter le passage d'une personne en mouvement rapide de manière fiable.

Si on veut détecter le passage il vaut mieux mettre un réflecteur (ou un émetteur et un récepteur séparés). Le faisceau est actif et on détecte quand la personne coupe le faisceau.

Cette solution fonctionne bien aussi, mais de prête mal, à une installation non fixe, car il faut bien aligner l 'émetteur et le réflecteur, chose pas forcement évidente en Ext .

ca devient intéressant.
une idée, comme ça......: si notre ami est le seul à avoir une bande réfléchissante sur son corps, il serait le seul détectable par le système ... il aurait donc son temps, même s'il n'est pas seul sur la piste.
à voir si réaliste...

Pour la bande réfléchissante, il faut creuser l'idée , il va courir avec un gilet réfléchissant, ou sinon mettre de la bande réfléchissante sur les rollers.

Merci pour vos réponses. Je m'excuse de ne pas avoir pus répondre plus tôt je suis très occupé.

hameau :

J'avais pensé à ce type de capteur mais comme je possède déjà le capteur à ultra son j'ai voulu tester. Après si le meilleur moyen est un autre capteur, je peux m'en procurer un.
Si non ton idée de t1-t2 est excellente, cependant je ne connais pas bien la fonction "millis()". Je me débrouillerais pour trouver un tuto dessus. Merci beaucoup en tout cas.

DFGH :

Ta réflexion est bonne, je ne suis pas tout seul sur la piste (6m de large pour 200m de longueur. Nous roulons entre 15sc et 30sc au tour, tout dépend du type d'entrainement), nous sommes en peloton d'une 20ène de personnes, les un derrière les autres. Pour cela j'ai pensé à ce que le capteur déclenche le chrono et une foie déclenché, directement, arrêter le fonctionnement du capteur pendant une dizaine de secondes, pour faire passer le peloton, tout en ce que le chrono tourne. Puis au bout de 10sc le rallumer pour qu’il puisse recommencer son action à chaque tour. :wink: j'avais aussi pensé à la réflexion mais après il faut changer de capteur donc je n'avais pas réfléchi sur ce sujet plus que ça.
Merci beaucoup aussi :slight_smile:

Dès que je peux je testerai un nouveau programme avec les "t1-t2". Maintenant je vais regarder les différents capteurs existants. Je vous demanderais surement des conseils sur le choix du capteur. Merci :slight_smile:

ton raisonnement par du principe que tu es le premier du peloton.
qu'en est il si tu n'es pas le premier?

Mon chronomètre ne servira que pour l'entrainement. Lors de l'entrainement nous sommes en peloton est nous faisons des relais donc j'ai juste besoin de prendre le premier du peloton :wink:

Hameau, j'ai des questions. Ton idée de t2-t1 est excellente, sauf que :
-Comment je transfert le temps de mon arduino avec la fonction "millis()" dans toutes les led pour afficher le temps ?
-Et si je fais l'idée de t2-t1 il faut que je fasse pareil pour tout les tours ? car je ne peux pas faire à l'infini comme ça, si non j'ai un temps au tour 1 fois sur 2 :confused:

Je continuerai demain mais si vous avez des idées je veux bien :slight_smile: Merci.

hello
veux tu charger ce code et le tester chez toi.

/***************************/
/*Variable pour le capteur*/
/*************************/
const int TRIGGER_PIN = 2;

/************************************************************************/
/*    Variable pour stocker les secondes, centièmes,le temps au tour...*/
/**********************************************************************/

long temps_au_tour;
unsigned long temps_start=0;
boolean top = false;
int digit=0;
int valeur = 0;
boolean DPH = true;
boolean DPB = true;
boolean capteur_ligne = true;
unsigned long temps = 0;
unsigned long temps_total = 0;
unsigned long temps_top_ligne = 0;
unsigned long TempsHr = 0;
unsigned long TempsMn = 0;
unsigned long TempsSec = 0;
unsigned long TempsDix =0;
unsigned long TempsMil = 0;

/********************************************/
/*Variable pour déclarer les ports des leds.*/
/********************************************/
//declaration des sorties pour segments 
//                     B  C  A  G  D  F  E
const char centiemes[]{30,29,28,27,26,25,24};
const char dixiemes[]{37,36,35,34,33,32,31};
const char secondes[]{44,43,42,41,40,39,38};
const char diz_secondes[]{51,50,49,48,47,46,45};
//declaration des points décimaux
const char points[]{53,52};

void setup()
{
  Serial.begin(57600);
  for (int f =24;f<=53;f++){pinMode (f, OUTPUT);} //passe les pin led en sortie
  digit=24;actionDigital(digit,1,1,1,0,1,1,1); // inscrit zéro sur les centièmes
  digit=31;actionDigital(digit,1,1,1,0,1,1,1); // inscrit zéro sur les dixièmes
  digit=38;actionDigital(digit,1,1,1,0,1,1,1); // inscrit zéro sur les secondes
  digit=45;actionDigital(digit,1,1,1,0,1,1,1); // inscrit zéro sur les diz_secondes
  digit=52;actionDigitalpoint(digit,1,1);      // allumage des DP
  pinMode(TRIGGER_PIN, INPUT_PULLUP);   //entrées interruptibles en entrée, pull-up validées
  noInterrupts();
  attachInterrupt(0, isr_ligne_franchie, FALLING);   // N° interruption0,routine, flanc descendant
  temps_start = millis();
  interrupts();
 //_____________________________________________________________________________________________________
 //il y a 00:00 à l'affichage; les DP clignotent au rythme des secondes
 //le while ci dessous attend que le capteur de passage soit actionné
 //le while est neutralisé pour le débugage 
 //_____________________________________________________________________________________________________
 /* while( capteur_ligne == true)//attente de la 1ere interruption
  { 
  if (millis()> (temps_start+1000)){DPH!=DPH;DPB!=DPB;digit=52;actionDigitalpoint(digit,DPH,DPB);temps_start = millis();}
  }
 */ 
 capteur_ligne = true;
 temps_total = millis();
 temps_start = millis();
}


void loop()
{  controle_si_interruption();
  if (millis()> (temps_total+1000)) //toutes les secondes on inverse les DP
  {
    DPH=!DPH;DPB=!DPB;digit=52;actionDigitalpoint(digit,DPH,DPB);temps_total = millis();
  //Serial.print(("DPH "));Serial.println(DPH);Serial.print(("DPB "));Serial.println(DPB);
     
  } //accolade à rétablir après le débugage__________________________________________________________
    temps = (millis() - temps_start);init_h_m_s();affichage();  
}
//}//accolade à supprimer après le débugage______________________________________________________________


   void controle_si_interruption()
   {
if (capteur_ligne == false)            // oui, il y a eu interruption "partiel"
     { 
      temps_top_ligne = millis();      //relevé du temps au tour
                           
      temps = (millis() - temps_start);init_h_m_s();
      while( (millis() < (temps_top_ligne + 5000))) //pendant 5 secondes
      {
       affichage(); 
       capteur_ligne = true;
      }       
     }
   }
   void init_h_m_s ()
   {  
   TempsHr = (temps /3600000)%60;
   TempsMn = (temps /60000)%60;
   TempsSec = (temps /1000)%60;
   TempsMil = (temps %1000 );
   TempsDix = TempsMil/10;
   }

  void affichage()
  { 
  //on extrait le rang de chaque chiffre à afficher pour connaitre le digit concerné
  if (TempsMn >= 10 ) 
    {digit=0;valeur=(TempsMn/10);/*aiguillage();*/Serial.print(F("TempsMn>10 = "));Serial.println(valeur);}//chiffre significatif pour dizaines de minutes
  else
    {digit=0;valeur=0;/*aiguillage();*/Serial.print(("TempsMn>>10 =0 = "));Serial.println(valeur);} //dizaines de minutes valent zero
  
  if (TempsMn < 10  ) 
    {digit=0;valeur=(TempsMn);/*aiguillage();*/Serial.print(F("TempsMn<10 = "));Serial.println(valeur);}//chiffre significatif pour minutes
  else
    {digit=0;valeur=0;/*aiguillage();*/Serial.print(("TempsMn<<10 =0 = "));Serial.println(valeur);} // minutes valent zero

if (TempsSec >= 10) 
  {digit=45;valeur=((TempsSec/10));aiguillage();Serial.print(("TempsSec>10 = "));Serial.println((valeur));} //chiffre significatif pour dizaines de secondes                    
  else
  {digit=45;valeur=0;aiguillage();Serial.print(("TempsSec>>10 =0 = "));Serial.println(valeur);} //dizaines de secondes valent zero
 
if (TempsSec <= 9 ) 
  {digit=38;valeur=(TempsSec);aiguillage();Serial.print(F("TempsSec<10 = "));Serial.println(valeur);} //chiffre significatif pour secondes   
  else 
  {digit=38;valeur=(TempsSec-((TempsSec/10)*10));aiguillage();Serial.print(("TempsSec<<0 =0 =  "));Serial.println(valeur);} //secondes valent zero
 
if (TempsMil >= 100 ) 
  {digit=31;valeur=(TempsMil/100);aiguillage();Serial.print(("Tempsdx = "));Serial.println(valeur);}// chiffre significatif pour dixièmes de secondes
  else
  {digit=31;valeur=0;aiguillage();Serial.print(("Tempsdx =0 =  "));Serial.println(valeur);}// dixièmes de secondes valent zero
if ((TempsMil < 100 ) &(TempsMil > 9 ))
  {digit=24;valeur=((TempsMil/10)-((TempsMil/100)*10));Serial.print(("Tempscent = "));Serial.println(valeur);aiguillage();}//chiffre significatif pour centièmes de secondes
  else
  {digit=24;valeur=0;aiguillage();Serial.print(("Tempscent =0 = "));Serial.println(valeur);}//centièmes de secondes valent zero
  Serial.println((" = "));
  }
 
  void aiguillage()
  {
        switch (valeur)
        {  
         case 0://             B C A G D F E    //chiffre 0
           actionDigital(digit,1,1,1,0,1,1,1);
           break ;
         case 1://             B C A G D F E    //chiffre 1
           actionDigital(digit,1,1,0,0,0,0,0);
           break ;
         case 2://             B C A G D F E    //chiffre 2
           actionDigital(digit,1,0,1,1,1,0,1);
           break ;
         case 3://             B C A G D F E    //chiffre 3
           actionDigital(digit,1,1,1,1,1,0,0);
           break ;
         case 4://             B C A G D F E    //chiffre 4
           actionDigital(digit,1,1,0,1,0,1,0);
           break ;
         case 5://             B C A G D F E    //chiffre 5
           actionDigital(digit,0,1,1,1,1,1,0);
           break ;                          
         case 6://             B C A G D F E    //chiffre 6
           actionDigital(digit,0,1,1,1,1,1,1);
           break ;        
         case 7://             B C A G D F E    //chiffre 7
           actionDigital(digit,1,1,1,0,0,0,0);
           break ;
         case 8://             B C A G D F E    //chiffre 8
           actionDigital(digit,1,1,1,1,1,1,1);
           break ;
         case 9://             B C A G D F E    //chiffre 9
           actionDigital(digit,1,1,1,1,1,1,0);
           break ;
         default:
         break;
       }
   }
  
   //                                B        C         A          G           D        F        E
  void actionDigital(int digit,byte un,byte deux,byte trois,byte quatre,byte cinq,byte six,byte sept) 
  {
     digitalWrite(digit+6, un);           //Segment B
     digitalWrite(digit+5, deux);         //Segment C
     digitalWrite(digit+4, trois);        //Segment A
     digitalWrite(digit+3, quatre);       //Segment G
     digitalWrite(digit+2, cinq);         //Segment D
     digitalWrite(digit+1, six);          //Segment F
     digitalWrite(digit, sept);           //Segment E
  }

//                                           DPH           DPB
  void actionDigitalpoint(int digit,byte pointhaut,byte pointbas) 
  {
     digitalWrite(digit+1, pointbas);    //Segment point bas
     digitalWrite(digit, pointhaut);     //Segment point haut
  }

  void isr_ligne_franchie()              // routine d'interruption 0
  {
  capteur_ligne = false;
  }

void calculdistance()
  {
  
  }

Salut, Merci pour le code, il y a un problème dans la déclaration des sorties pour segments, il n'accepte pas ce que je t'ai mis en gras.

/********************************************/
/*Variable pour déclarer les ports des leds.*/
/********************************************/
//declaration des sorties pour segments 
//                     B  C  A  G  D  F  E
[b]const char centiemes[]{30,29,28,27,26,25,24};[/b]
const char dixiemes[]{37,36,35,34,33,32,31};
const char secondes[]{44,43,42,41,40,39,38};
const char diz_secondes[]{51,50,49,48,47,46,45};

Si non l'erreur est celle ci :

sketch_aug28a:33: error: function definition does not declare parameters
sketch_aug28a:34: error: function definition does not declare parameters
sketch_aug28a:35: error: function definition does not declare parameters
sketch_aug28a:36: error: function definition does not declare parameters
sketch_aug28a:38: error: function definition does not declare parameters