Stopper un chronomètre ( afficheurs 7 segments 4 digits )

Bonjour à tous,

Je me nomme Joseph et suis débutant en Arduino. Je profite de ce forum pour exposer un petit problème qui me turlupine. Je me suis amusé à faire un chronomètre avec 2 afficheurs 7 segments 4 digits ( heure, minute, seconde et centièmes). Il fonctionne bien mais j'aimerais adjoindre un simple bouton pour le stopper. J'essaie avec le principe des interruptions mais je n'y arrive pas. Quand j'appuie sur le bouton, le chronomètre s'éteint tout simplement. Comment faire pour figer le chronomètre ? Un tuyau, un indice peut-être? Merci d'avance,

Joseph

il faudrait un code pour jeter un oeil. la boule de madame Irma est en rade

Pas la peine d'interruption pour un bouton activé "en temps humain", suffit de le tester dans la loop()

Continue d'afficher les valeurs sur les afficheurs (même quand le bouton est pressé) mais stoppe l'incrémentation des variables associées aux valeurs du chronomètre

Bonjour,

Voici le code demandé ( il sera en 2 parties ):

int a = 48;
int b = 3 ;
int c = 4;
int d = 5;
int e = 6;
int f = 7;
int g = 8;

int A = 30;
int B = 31 ;
int C = 32;
int D = 33;
int E = 34;
int F = 35;
int G = 36;

int digit1 = 50;
int digit2 = 51;
int digit3 = 52;
int digit4 = 53;

int part1 = 12;
int part2 = 11;
int part3 = 10;
int part4 =  9;
int button = 2;

unsigned long  start = millis();






void afficher(int chiffre)
{
  switch(chiffre){

    case 1: digitalWrite(a,HIGH);
            digitalWrite(b,LOW);
            digitalWrite(c,LOW);
            digitalWrite(d,HIGH);
            digitalWrite(e,HIGH);
            digitalWrite(f,HIGH);
            digitalWrite(g,HIGH);
            break;

    case 2: digitalWrite(a,LOW);
            digitalWrite(b,LOW);
            digitalWrite(c,HIGH);
            digitalWrite(d,LOW);
            digitalWrite(e,LOW);
            digitalWrite(f,HIGH);
            digitalWrite(g,LOW);
            break;

    case 3: digitalWrite(a,LOW);
            digitalWrite(b,LOW);
            digitalWrite(c,LOW);
            digitalWrite(d,LOW);
            digitalWrite(e,HIGH);
            digitalWrite(f,HIGH);
            digitalWrite(g,LOW);
            break;


    case 4: digitalWrite(a,HIGH);
            digitalWrite(b,LOW);
            digitalWrite(c,LOW);
            digitalWrite(d,HIGH);
            digitalWrite(e,HIGH);
            digitalWrite(f,LOW);
            digitalWrite(g,LOW);
            break;


    case 5: digitalWrite(a,LOW);
            digitalWrite(b,HIGH);
            digitalWrite(c,LOW);
            digitalWrite(d,LOW);
            digitalWrite(e,HIGH);
            digitalWrite(f,LOW);
            digitalWrite(g,LOW);
            break;


    case 6: digitalWrite(a,LOW);
            digitalWrite(b,HIGH);
            digitalWrite(c,LOW);
            digitalWrite(d,LOW);
            digitalWrite(e,LOW);
            digitalWrite(f,LOW);
            digitalWrite(g,LOW);
            break;

    case 7: digitalWrite(a,LOW);
            digitalWrite(b,LOW);
            digitalWrite(c,LOW);
            digitalWrite(d,HIGH);
            digitalWrite(e,HIGH);
            digitalWrite(f,HIGH);
            digitalWrite(g,HIGH);
            break;


    case 8: digitalWrite(a,LOW);
            digitalWrite(b,LOW);
            digitalWrite(c,LOW);
            digitalWrite(d,LOW);
            digitalWrite(e,LOW);
            digitalWrite(f,LOW);
            digitalWrite(g,LOW);
            break;


    case 9: digitalWrite(a,LOW);
            digitalWrite(b,LOW);
            digitalWrite(c,LOW);
            digitalWrite(d,LOW);
            digitalWrite(e,HIGH);
            digitalWrite(f,LOW);
            digitalWrite(g,LOW);
            break;


    default:digitalWrite(a,LOW);
            digitalWrite(b,LOW);
            digitalWrite(c,LOW);
            digitalWrite(d,LOW);
            digitalWrite(e,LOW);
            digitalWrite(f,LOW);
            digitalWrite(g,HIGH);
            break;
    }
  
  }





void Display(int number)
{
  switch(number){

    case 1: digitalWrite(A,HIGH);
            digitalWrite(B,LOW);
            digitalWrite(C,LOW);
            digitalWrite(D,HIGH);
            digitalWrite(E,HIGH);
            digitalWrite(F,HIGH);
            digitalWrite(G,HIGH);
            break;

    case 2: digitalWrite(A,LOW);
            digitalWrite(B,LOW);
            digitalWrite(C,HIGH);
            digitalWrite(D,LOW);
            digitalWrite(E,LOW);
            digitalWrite(F,HIGH);
            digitalWrite(G,LOW);
            break;


    case 3: digitalWrite(A,LOW);
            digitalWrite(B,LOW);
            digitalWrite(C,LOW);
            digitalWrite(D,LOW);
            digitalWrite(E,HIGH);
            digitalWrite(F,HIGH);
            digitalWrite(G,LOW);
            break;


    case 4: digitalWrite(A,HIGH);
            digitalWrite(B,LOW);
            digitalWrite(C,LOW);
            digitalWrite(D,HIGH);
            digitalWrite(E,HIGH);
            digitalWrite(F,LOW);
            digitalWrite(G,LOW);
            break;


    case 5: digitalWrite(A,LOW);
            digitalWrite(B,HIGH);
            digitalWrite(C,LOW);
            digitalWrite(D,LOW);
            digitalWrite(E,HIGH);
            digitalWrite(F,LOW);
            digitalWrite(G,LOW);
            break;


    case 6: digitalWrite(A,LOW);
            digitalWrite(B,HIGH);
            digitalWrite(C,LOW);
            digitalWrite(D,LOW);
            digitalWrite(E,LOW);
            digitalWrite(F,LOW);
            digitalWrite(G,LOW);
            break;


    case 7: digitalWrite(A,LOW);
            digitalWrite(B,LOW);
            digitalWrite(C,LOW);
            digitalWrite(D,HIGH);
            digitalWrite(E,HIGH);
            digitalWrite(F,HIGH);
            digitalWrite(G,HIGH);
            break;


    case 8: digitalWrite(A,LOW);
            digitalWrite(B,LOW);
            digitalWrite(C,LOW);
            digitalWrite(D,LOW);
            digitalWrite(E,LOW);
            digitalWrite(F,LOW);
            digitalWrite(G,LOW);
            break;


    case 9: digitalWrite(A,LOW);
            digitalWrite(B,LOW);
            digitalWrite(C,LOW);
            digitalWrite(D,LOW);
            digitalWrite(E,HIGH);
            digitalWrite(F,LOW);
            digitalWrite(G,LOW);
            break;


    default:digitalWrite(A,LOW);
            digitalWrite(B,LOW);
            digitalWrite(C,LOW);
            digitalWrite(D,LOW);
            digitalWrite(E,LOW);
            digitalWrite(F,LOW);
            digitalWrite(G,HIGH);
            break;
    }
  
  }



void setup() {
  // put your setup code here, to run once:
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);

pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);

pinMode(digit1,OUTPUT);
pinMode(digit2,OUTPUT);
pinMode(digit3,OUTPUT);
pinMode(digit4,OUTPUT);
pinMode(part1,OUTPUT);
pinMode(part2,OUTPUT);
pinMode(part3,OUTPUT);
pinMode(part4,OUTPUT);

pinMode(button, INPUT_PULLUP);

digitalWrite(part1,HIGH);
digitalWrite(part2,HIGH);
digitalWrite(part3,HIGH);
digitalWrite(part4,HIGH);
digitalWrite(digit1,HIGH);
digitalWrite(digit2,HIGH);
digitalWrite(digit3,HIGH);
digitalWrite(digit4,HIGH);



}
void loop()

{


unsigned long  temps_instant = millis() - start;
int centieme = (temps_instant/10)%100;
int seconde = (temps_instant/1000)%60;
int minute = (temps_instant/60000)%60;
int heure = (temps_instant/3600000)%60;


if (centieme<10){

    digitalWrite(digit3,LOW);
    Display(0);
    delay(1);
    digitalWrite(digit3,HIGH);
   

    digitalWrite(digit4,LOW);
    Display(centieme);
    delay(1);
    digitalWrite(digit4,HIGH);

  
}

  

 
else {

   digitalWrite(digit3,LOW);
   Display(centieme/10);
   delay(1);
   digitalWrite(digit3,HIGH);


   digitalWrite(digit4,LOW);
   Display(centieme%10);
   delay(1);
   digitalWrite(digit4,HIGH);
 
}



if (seconde<10){

    digitalWrite(digit1,LOW);
    Display(0);
    delay(1);
    digitalWrite(digit1,HIGH);
 
    

    digitalWrite(digit2,LOW);
    Display(seconde);
    delay(1);
    digitalWrite(digit2,HIGH);

    
  
}

else {

   digitalWrite(digit1,LOW);
   Display(seconde/10);
   delay(1);
   digitalWrite(digit1,HIGH);

   

   digitalWrite(digit2,LOW);
   Display(seconde%10);
   delay(1);
   digitalWrite(digit2,HIGH);
   
   
}



if (minute<10){

    digitalWrite(part3,LOW);
    afficher(0);
    delay(1);
    digitalWrite(part3,HIGH);
 
    

    digitalWrite(part4,LOW);
    afficher(minute);
    delay(1);
    digitalWrite(part4,HIGH);

    
  
}

else {

   digitalWrite(part3,LOW);
   afficher(minute/10);
   delay(1);
   digitalWrite(part3,HIGH);

   

   digitalWrite(part4,LOW);
   afficher(minute%10);
   delay(1);
   digitalWrite(part4,HIGH);
   
   
}




if (heure<10){

    digitalWrite(part1,LOW);
    afficher(0);
    delay(1);
    digitalWrite(part1,HIGH);
 
    

    digitalWrite(part2,LOW);
    afficher(heure);
    delay(1);
    digitalWrite(part2,HIGH);

    
  
}

else {

   digitalWrite(part1,LOW);
   afficher(heure/10);
   delay(1);
   digitalWrite(part1,HIGH);

   

   digitalWrite(part2,LOW);
   afficher(heure%10);
   delay(1);
   digitalWrite(part2,HIGH);
   
   
    }
}

Merci pour vos réponses. En fait, si je comprends bien, il suffirait que j'affecte la variable temps_instant à une autre variable ( par exemple temps_actuel) après avoir testé l'état du bouton et utiliser cette nouvelle variable dans la boucle pour afficher le temps actuel.

Comme cette variable n'évolue pas, elle affichera donc le chrono avec des valeurs arrêtées correspondantes à cette nouvelle variable.

J'ai bien saisi?

tu prends un bouton et un etat boolean

au départ, etat false

si appuie bouton ===> etat true ====> valeur temps appui = valeur temps actuel tu note le temps par exemple tu rappuie sur le bouton et ca redéfile jusqu'a appuie de nouveau ===> etat false etc....

Ok, merci pour ton aide.

Donc, si j'ai bien compris:

J'appuie sur le bouton, ==> etat true ==> je note le temps présent dans une nouvelle variable et j'intègre cette nouvelle variable dans ma boucle à la place de temps_instant

sinon etat false et je réintègre temps_instant dans ma boucle pour que le temps redéfile.

Je vais essayer ça et je ne manquerai pas de faire un retour.

regardez par exemple ce code (qui affiche dans la console série à 115200 bauds) avec un bouton sur la pin 3 relié à GND

J’ai repris votre méthode de calcul du temps qui passe.

const byte bouton = 3; // câblé avec un PULLUP donc LOW => appuyé, HIGH => pas appuyé

unsigned long start;
int centieme ;
int seconde ;
int minute ;
int heure ;
unsigned long  temps_instant;

boolean blocage; // vrai quand le bouton est enfoncé

// à remplacer par vos fonctions d'affichage, moi j'écris sur la console série
void printHorloge()
{
  Serial.print(heure);
  Serial.print(":");

  if (minute < 10) Serial.print ("0");
  Serial.print(minute);
  Serial.print(":");

  if (seconde < 10) Serial.print ("0");
  Serial.print(seconde);
  Serial.print(":");

  if (centieme < 10) Serial.print ("0");
  Serial.println(centieme);
}


void setup() {
  Serial.begin(115200);
  pinMode(bouton, INPUT_PULLUP);
  blocage = false;
}


void loop() {
  static unsigned long start = millis();
  static unsigned long chrono = start;

  if (digitalRead(bouton) == LOW) {
    // appui du bouton
    if (!blocage) {
      blocage = true;
      Serial.print("Compteur bloqué --> ");
      printHorloge();
      chrono = millis();
      delay(10); // anti rebond du pauvre
    } else {
      if (millis() - chrono >= 1000) { // on affiche compteur bloqué toute les secondes
        Serial.print("Compteur bloqué --> ");
        printHorloge();
        chrono += 1000;
      }
    }
  } else {
    if (blocage) {
      blocage = false;
      Serial.print("Compteur débloqué au moment --> ");
      unsigned long dureeBlocage = millis() - start - temps_instant;

      temps_instant = millis() - start;
      centieme = (temps_instant / 10) % 100;
      seconde = (temps_instant / 1000ul) % 60;
      minute = (temps_instant / 60000ul) % 60;
      heure = (temps_instant / 3600000ul) % 60;

      printHorloge();
      Serial.print("-> soit durant "); Serial.print(dureeBlocage); Serial.println(" ms");
      
      // si on veut continuer où on s'était arrêté on peut faire (sinon enlever cette ligne)
      start += dureeBlocage; 
      
      chrono = millis();
      delay(10); // anti rebond du pauvre
    } else {
      if (millis() - chrono >= 10) {
        temps_instant = millis() - start;

        centieme = (temps_instant / 10) % 100;
        seconde = (temps_instant / 1000ul) % 60;
        minute = (temps_instant / 60000ul) % 60;
        heure = (temps_instant / 3600000ul) % 60;

        printHorloge();
        chrono += 10;
      }
    }
  }
}

Si vous voulez “bloquer le temps qui passe” en appuyant sur le bouton conservez cette ligne

      // si on veut continuer où on s'était arrêté on peut faire (sinon enlever cette ligne)
      start += dureeBlocage;

si vous voulez juste geler l’affichage et reprendre avec le temps qui a continué à tourné alors virez cette ligne.

Ok, un grand merci pour avoir pris le temps de me faire ce code. Je crois avoir compris le principe de votre algorithme et je vais l'adapter à mon cas. Encore merci.

postez votre code final, ça sera sans doute utile à quelqu’un un jour :slight_smile:

Oui certainement, je le ferai dès que possible. Là pour l'instant, je suis au boulot :) Encore un grand merci.

Bonjour,

J’ai adapté le code en fonction de vos réponses et de ce que j’ai pu comprendre mais malheureusement,
quelque chose doit m’échapper. L’appui sur le bouton ne donne rien.
Je joins mon nouveau code ( il n’y a que la boucle car le reste est inchangé ):

void loop()

{


unsigned long  temps_instant = millis() - start;
int centieme = (temps_instant/10)%100;
int seconde = (temps_instant/1000)%60;
int minute = (temps_instant/60000)%60;
int heure = (temps_instant/3600000)%60;

unsigned long temps_enreg = temps_instant;
int centieme_enreg = (temps_enreg/10)%100;
int seconde_enreg = (temps_enreg/1000)%60;
int minute_enreg = (temps_enreg/60000)%60;
int heure_enreg = (temps_enreg/3600000)%60;


  // put your main code here, to run repeatedly:

if (digitalRead(button)== HIGH)  

  {
    etat = true ;
    if (centieme_enreg<10){

    digitalWrite(digit3,LOW);
    Display(0);
    delay(1);
    digitalWrite(digit3,HIGH);
   

    digitalWrite(digit4,LOW);
    Display(centieme_enreg);
    delay(1);
    digitalWrite(digit4,HIGH);

  
}

  

 
else {

   digitalWrite(digit3,LOW);
   Display(centieme_enreg/10);
   delay(1);
   digitalWrite(digit3,HIGH);


   digitalWrite(digit4,LOW);
   Display(centieme_enreg%10);
   delay(1);
   digitalWrite(digit4,HIGH);
 
}



if (seconde_enreg<10){

    digitalWrite(digit1,LOW);
    Display(0);
    delay(1);
    digitalWrite(digit1,HIGH);
 
    

    digitalWrite(digit2,LOW);
    Display(seconde_enreg);
    delay(1);
    digitalWrite(digit2,HIGH);

    
  
}

else {

   digitalWrite(digit1,LOW);
   Display(seconde_enreg/10);
   delay(1);
   digitalWrite(digit1,HIGH);

   

   digitalWrite(digit2,LOW);
   Display(seconde_enreg%10);
   delay(1);
   digitalWrite(digit2,HIGH);
   
   
}



if (minute_enreg<10){

    digitalWrite(part3,LOW);
    afficher(0);
    delay(1);
    digitalWrite(part3,HIGH);
 
    

    digitalWrite(part4,LOW);
    afficher(minute_enreg);
    delay(1);
    digitalWrite(part4,HIGH);

    
  
}

else {

   digitalWrite(part3,LOW);
   afficher(minute_enreg/10);
   delay(1);
   digitalWrite(part3,HIGH);

   

   digitalWrite(part4,LOW);
   afficher(minute_enreg%10);
   delay(1);
   digitalWrite(part4,HIGH);
   
   
}




if (heure_enreg<10){

    digitalWrite(part1,LOW);
    afficher(0);
    delay(1);
    digitalWrite(part1,HIGH);
 
    

    digitalWrite(part2,LOW);
    afficher(heure_enreg);
    delay(1);
    digitalWrite(part2,HIGH);

    
  
}

else {

   digitalWrite(part1,LOW);
   afficher(heure_enreg/10);
   delay(1);
   digitalWrite(part1,HIGH);

   

   digitalWrite(part2,LOW);
   afficher(heure_enreg%10);
   delay(1);
   digitalWrite(part2,HIGH);
   
   
    }
  }


else {
      if (digitalRead(button)==LOW)
      
         { etat = false;
      


unsigned long  temps_instant = millis() - start;
int centieme = (temps_instant/10)%100;
int seconde = (temps_instant/1000)%60;
int minute = (temps_instant/60000)%60;
int heure = (temps_instant/3600000)%60;
  // put your main code here, to run repeatedly:

if (centieme<10){

    digitalWrite(digit3,LOW);
    Display(0);
    delay(1);
    digitalWrite(digit3,HIGH);
   

    digitalWrite(digit4,LOW);
    Display(centieme);
    delay(1);
    digitalWrite(digit4,HIGH);

  
}

  

 
else {

   digitalWrite(digit3,LOW);
   Display(centieme/10);
   delay(1);
   digitalWrite(digit3,HIGH);


   digitalWrite(digit4,LOW);
   Display(centieme%10);
   delay(1);
   digitalWrite(digit4,HIGH);
 
}



if (seconde<10){

    digitalWrite(digit1,LOW);
    Display(0);
    delay(1);
    digitalWrite(digit1,HIGH);
 
    

    digitalWrite(digit2,LOW);
    Display(seconde);
    delay(1);
    digitalWrite(digit2,HIGH);

    
  
}

else {

   digitalWrite(digit1,LOW);
   Display(seconde/10);
   delay(1);
   digitalWrite(digit1,HIGH);

   

   digitalWrite(digit2,LOW);
   Display(seconde%10);
   delay(1);
   digitalWrite(digit2,HIGH);
   
   
}



if (minute<10){

    digitalWrite(part3,LOW);
    afficher(0);
    delay(1);
    digitalWrite(part3,HIGH);
 
    

    digitalWrite(part4,LOW);
    afficher(minute);
    delay(1);
    digitalWrite(part4,HIGH);

    
  
}

else {

   digitalWrite(part3,LOW);
   afficher(minute/10);
   delay(1);
   digitalWrite(part3,HIGH);

   

   digitalWrite(part4,LOW);
   afficher(minute%10);
   delay(1);
   digitalWrite(part4,HIGH);
   
   
}




if (heure<10){

    digitalWrite(part1,LOW);
    afficher(0);
    delay(1);
    digitalWrite(part1,HIGH);
 
    

    digitalWrite(part2,LOW);
    afficher(heure);
    delay(1);
    digitalWrite(part2,HIGH);

    
  
}

else {

   digitalWrite(part1,LOW);
   afficher(heure/10);
   delay(1);
   digitalWrite(part1,HIGH);

   

   digitalWrite(part2,LOW);
   afficher(heure%10);
   delay(1);
   digitalWrite(part2,HIGH);

}
   
    }
  
  }
}

Bonsoir,

Pour tester mon code, j'ai rajouté une ligne de code pour afficher par exemple les secondes sur le moniteur série. Je constate que lorsque j'appuie sur le bouton, les secondes s'arrêtent bien sur le moniteur série mais les afficheurs, eux, s'éteignent. Je n'y comprends rien. Là, je sèche vraiment. Si vous avez une idée, n'hésitez surtout pas. Merci d'avance.

Bonjour,

Mon problème est enfin résolu. C'était juste un problème de code. J'ai codé 2 fonctions supplémentaires pour l'affichage et l'arrêt du chrono afin que le code soit un peu plus clair, ce qui m'a permis de clarifier la faille. Je joins le code pour ceux que ça intéresse. Merci pour vos réponses à tous.

Joseph

int a = 48;
int b = 3 ;
int c = 4;
int d = 5;
int e = 6;
int f = 7;
int g = 8;

int A = 30;
int B = 31 ;
int C = 32;
int D = 33;
int E = 34;
int F = 35;
int G = 36;

int digit1 = 50;
int digit2 = 51;
int digit3 = 52;
int digit4 = 53;

int part1 = 12;
int part2 = 11;
int part3 = 10;
int part4 =  9;
int button = 38;
boolean etat;
unsigned long  start = millis();
unsigned long temps_instant = 0;
unsigned long temps_enreg = 0;
int centieme = 0;
int seconde = 0;
int minute = 0;
int heure = 0;

int centieme_enreg = 0;
int seconde_enreg = 0;
int minute_enreg = 0;
int heure_enreg = 0;

void afficher(int chiffre)
{
  switch(chiffre){

    case 1: digitalWrite(a,HIGH);
            digitalWrite(b,LOW);
            digitalWrite(c,LOW);
            digitalWrite(d,HIGH);
            digitalWrite(e,HIGH);
            digitalWrite(f,HIGH);
            digitalWrite(g,HIGH);
            break;

    case 2: digitalWrite(a,LOW);
            digitalWrite(b,LOW);
            digitalWrite(c,HIGH);
            digitalWrite(d,LOW);
            digitalWrite(e,LOW);
            digitalWrite(f,HIGH);
            digitalWrite(g,LOW);
            break;

    case 3: digitalWrite(a,LOW);
            digitalWrite(b,LOW);
            digitalWrite(c,LOW);
            digitalWrite(d,LOW);
            digitalWrite(e,HIGH);
            digitalWrite(f,HIGH);
            digitalWrite(g,LOW);
            break;


    case 4: digitalWrite(a,HIGH);
            digitalWrite(b,LOW);
            digitalWrite(c,LOW);
            digitalWrite(d,HIGH);
            digitalWrite(e,HIGH);
            digitalWrite(f,LOW);
            digitalWrite(g,LOW);
            break;


    case 5: digitalWrite(a,LOW);
            digitalWrite(b,HIGH);
            digitalWrite(c,LOW);
            digitalWrite(d,LOW);
            digitalWrite(e,HIGH);
            digitalWrite(f,LOW);
            digitalWrite(g,LOW);
            break;


    case 6: digitalWrite(a,LOW);
            digitalWrite(b,HIGH);
            digitalWrite(c,LOW);
            digitalWrite(d,LOW);
            digitalWrite(e,LOW);
            digitalWrite(f,LOW);
            digitalWrite(g,LOW);
            break;

    case 7: digitalWrite(a,LOW);
            digitalWrite(b,LOW);
            digitalWrite(c,LOW);
            digitalWrite(d,HIGH);
            digitalWrite(e,HIGH);
            digitalWrite(f,HIGH);
            digitalWrite(g,HIGH);
            break;


    case 8: digitalWrite(a,LOW);
            digitalWrite(b,LOW);
            digitalWrite(c,LOW);
            digitalWrite(d,LOW);
            digitalWrite(e,LOW);
            digitalWrite(f,LOW);
            digitalWrite(g,LOW);
            break;


    case 9: digitalWrite(a,LOW);
            digitalWrite(b,LOW);
            digitalWrite(c,LOW);
            digitalWrite(d,LOW);
            digitalWrite(e,HIGH);
            digitalWrite(f,LOW);
            digitalWrite(g,LOW);
            break;


    default:digitalWrite(a,LOW);
            digitalWrite(b,LOW);
            digitalWrite(c,LOW);
            digitalWrite(d,LOW);
            digitalWrite(e,LOW);
            digitalWrite(f,LOW);
            digitalWrite(g,HIGH);
            break;
    }
  
  }





void Display(int number)
{
  switch(number){

    case 1: digitalWrite(A,HIGH);
            digitalWrite(B,LOW);
            digitalWrite(C,LOW);
            digitalWrite(D,HIGH);
            digitalWrite(E,HIGH);
            digitalWrite(F,HIGH);
            digitalWrite(G,HIGH);
            break;

    case 2: digitalWrite(A,LOW);
            digitalWrite(B,LOW);
            digitalWrite(C,HIGH);
            digitalWrite(D,LOW);
            digitalWrite(E,LOW);
            digitalWrite(F,HIGH);
            digitalWrite(G,LOW);
            break;


    case 3: digitalWrite(A,LOW);
            digitalWrite(B,LOW);
            digitalWrite(C,LOW);
            digitalWrite(D,LOW);
            digitalWrite(E,HIGH);
            digitalWrite(F,HIGH);
            digitalWrite(G,LOW);
            break;


    case 4: digitalWrite(A,HIGH);
            digitalWrite(B,LOW);
            digitalWrite(C,LOW);
            digitalWrite(D,HIGH);
            digitalWrite(E,HIGH);
            digitalWrite(F,LOW);
            digitalWrite(G,LOW);
            break;


    case 5: digitalWrite(A,LOW);
            digitalWrite(B,HIGH);
            digitalWrite(C,LOW);
            digitalWrite(D,LOW);
            digitalWrite(E,HIGH);
            digitalWrite(F,LOW);
            digitalWrite(G,LOW);
            break;


    case 6: digitalWrite(A,LOW);
            digitalWrite(B,HIGH);
            digitalWrite(C,LOW);
            digitalWrite(D,LOW);
            digitalWrite(E,LOW);
            digitalWrite(F,LOW);
            digitalWrite(G,LOW);
            break;


    case 7: digitalWrite(A,LOW);
            digitalWrite(B,LOW);
            digitalWrite(C,LOW);
            digitalWrite(D,HIGH);
            digitalWrite(E,HIGH);
            digitalWrite(F,HIGH);
            digitalWrite(G,HIGH);
            break;


    case 8: digitalWrite(A,LOW);
            digitalWrite(B,LOW);
            digitalWrite(C,LOW);
            digitalWrite(D,LOW);
            digitalWrite(E,LOW);
            digitalWrite(F,LOW);
            digitalWrite(G,LOW);
            break;


    case 9: digitalWrite(A,LOW);
            digitalWrite(B,LOW);
            digitalWrite(C,LOW);
            digitalWrite(D,LOW);
            digitalWrite(E,HIGH);
            digitalWrite(F,LOW);
            digitalWrite(G,LOW);
            break;


    default:digitalWrite(A,LOW);
            digitalWrite(B,LOW);
            digitalWrite(C,LOW);
            digitalWrite(D,LOW);
            digitalWrite(E,LOW);
            digitalWrite(F,LOW);
            digitalWrite(G,HIGH);
            break;
    }
  
  }
void setup() {
  // put your setup code here, to run once:
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);

pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);

pinMode(digit1,OUTPUT);
pinMode(digit2,OUTPUT);
pinMode(digit3,OUTPUT);
pinMode(digit4,OUTPUT);
pinMode(part1,OUTPUT);
pinMode(part2,OUTPUT);
pinMode(part3,OUTPUT);
pinMode(part4,OUTPUT);

pinMode(button, INPUT);

digitalWrite(part1,HIGH);
digitalWrite(part2,HIGH);
digitalWrite(part3,HIGH);
digitalWrite(part4,HIGH);
digitalWrite(digit1,HIGH);
digitalWrite(digit2,HIGH);
digitalWrite(digit3,HIGH);
digitalWrite(digit4,HIGH);
etat = false;
Serial.begin(9600);

}

void afficheChrono (){
  
  
temps_instant = millis() - start;

Serial.print(temps_instant);

 centieme = (temps_instant/10)%100;
 seconde = (temps_instant/1000)%60;
 minute = (temps_instant/60000)%60;
 heure = (temps_instant/3600000)%60;
    
    if (centieme<10){

    digitalWrite(digit3,LOW);
    Display(0);
    delay(1);
    digitalWrite(digit3,HIGH);
   

    digitalWrite(digit4,LOW);
    Display(centieme);
    delay(1);
    digitalWrite(digit4,HIGH);

  
}

  

 
else {

   digitalWrite(digit3,LOW);
   Display(centieme/10);
   delay(1);
   digitalWrite(digit3,HIGH);


   digitalWrite(digit4,LOW);
   Display(centieme%10);
   delay(1);
   digitalWrite(digit4,HIGH);
 
}



if (seconde<10){

    digitalWrite(digit1,LOW);
    Display(0);
    delay(1);
    digitalWrite(digit1,HIGH);
 
    

    digitalWrite(digit2,LOW);
    Display(seconde);
    delay(1);
    digitalWrite(digit2,HIGH);

    
  
}

else {

   digitalWrite(digit1,LOW);
   Display(seconde/10);
   delay(1);
   digitalWrite(digit1,HIGH);

   

   digitalWrite(digit2,LOW);
   Display(seconde%10);
   delay(1);
   digitalWrite(digit2,HIGH);
   
   
}



if (minute<10){

    digitalWrite(part3,LOW);
    afficher(0);
    delay(1);
    digitalWrite(part3,HIGH);
 
    

    digitalWrite(part4,LOW);
    afficher(minute);
    delay(1);
    digitalWrite(part4,HIGH);

    
  
}

else {

   digitalWrite(part3,LOW);
   afficher(minute/10);
   delay(1);
   digitalWrite(part3,HIGH);

   

   digitalWrite(part4,LOW);
   afficher(minute%10);
   delay(1);
   digitalWrite(part4,HIGH);
   
   
}




if (heure<10){

    digitalWrite(part1,LOW);
    afficher(0);
    delay(1);
    digitalWrite(part1,HIGH);
 
    

    digitalWrite(part2,LOW);
    afficher(heure);
    delay(1);
    digitalWrite(part2,HIGH);

    
  
}

else {

   digitalWrite(part1,LOW);
   afficher(heure/10);
   delay(1);
   digitalWrite(part1,HIGH);

   

   digitalWrite(part2,LOW);
   afficher(heure%10);
   delay(1);
   digitalWrite(part2,HIGH);

   
    }
  }
  

 void stopChrono(){

temps_enreg = temps_instant;
Serial.print(temps_enreg);
 centieme_enreg = (temps_enreg/10)%100;
 seconde_enreg = (temps_enreg/1000)%60;
 minute_enreg = (temps_enreg/60000)%60;
 heure_enreg = (temps_enreg/3600000)%60;
    
    if (centieme_enreg<10){

    digitalWrite(digit3,LOW);
    Display(0);
    delay(1);
    digitalWrite(digit3,HIGH);
   

    digitalWrite(digit4,LOW);
    Display(centieme_enreg);
    delay(1);
    digitalWrite(digit4,HIGH);

  
}

  

 
else {

   digitalWrite(digit3,LOW);
   Display(centieme_enreg/10);
   delay(1);
   digitalWrite(digit3,HIGH);


   digitalWrite(digit4,LOW);
   Display(centieme_enreg%10);
   delay(1);
   digitalWrite(digit4,HIGH);
 
}



if (seconde<10){

    digitalWrite(digit1,LOW);
    Display(0);
    delay(1);
    digitalWrite(digit1,HIGH);
 
    

    digitalWrite(digit2,LOW);
    Display(seconde_enreg);
    delay(1);
    digitalWrite(digit2,HIGH);

    
  
}

else {

   digitalWrite(digit1,LOW);
   Display(seconde_enreg/10);
   delay(1);
   digitalWrite(digit1,HIGH);

   

   digitalWrite(digit2,LOW);
   Display(seconde_enreg%10);
   delay(1);
   digitalWrite(digit2,HIGH);
   
   
}



if (minute<10){

    digitalWrite(part3,LOW);
    afficher(0);
    delay(1);
    digitalWrite(part3,HIGH);
 
    

    digitalWrite(part4,LOW);
    afficher(minute_enreg);
    delay(1);
    digitalWrite(part4,HIGH);

    
  
}

else {

   digitalWrite(part3,LOW);
   afficher(minute_enreg/10);
   delay(1);
   digitalWrite(part3,HIGH);

   

   digitalWrite(part4,LOW);
   afficher(minute_enreg%10);
   delay(1);
   digitalWrite(part4,HIGH);
   
   
}




if (heure<10){

    digitalWrite(part1,LOW);
    afficher(0);
    delay(1);
    digitalWrite(part1,HIGH);
 
    

    digitalWrite(part2,LOW);
    afficher(heure_enreg);
    delay(1);
    digitalWrite(part2,HIGH);

    
  
}

else {

   digitalWrite(part1,LOW);
   afficher(heure_enreg/10);
   delay(1);
   digitalWrite(part1,HIGH);

   

   digitalWrite(part2,LOW);
   afficher(heure_enreg%10);
   delay(1);
   digitalWrite(part2,HIGH);

   
    }
  
  
  }
  
  
  


void loop()

{
 // put your main code here, to run repeatedly:

if (digitalRead(button)== LOW)  // appui du bouton

  {

    etat = true;
    stopChrono();
  }
else { 
        if (digitalRead(button)== HIGH)
        etat = false;
     afficheChrono();

}
   
    }

Bravo!

Merci ;) Comme quoi, quand on se donne la peine de réfléchir et de chercher, on y arrive souvent.