Chrono du baby foot :D

Bonjour, suite à mes demandes sur ce forum qui ont été fructueuses , j'ai effectué un programme, quand le récepteur de détecte plus le laser, cela lance le chrono.

Mais j'aimerais savoir comment faire pour que le chrono ne se réinitialise pas après que l'objet ait fini de passer devant le laser

Voici le code :smiley:

Merci d'avance pour vous réponses :slight_smile:

PS : J'utilise un laser et un récepteur KY-008

 int Laser = 6;
int Detecteur = 7;
unsigned long MS; 
unsigned long start;

void setup() 
{ 
  Serial.begin (9600);                  
  pinMode(Laser, OUTPUT);
  pinMode(Detecteur, INPUT);
}

void loop() 
{
digitalWrite(Laser, HIGH);
 boolean val = digitalRead(Detecteur);
 Serial.println(        );
 if (val==1)
  {
    start=millis();
  }
  MS = millis()-start;
  /*
  centitot1 = (MS % 1000) / 10 ;        // centieme to display
   secotot1 = (MS / 1000) % 60 ;         // second to display
   minutot1 = (MS / 1000) / 60 ;         // minute to display
   */
  Serial.print ((MS / 1000) / 60);      // minutes
  Serial.print ("m ");
  Serial.print ((MS / 1000) % 60);      // secondes
  Serial.print ("s ");
  Serial.println(MS % 1000);   // millièmes
}

Je ne suis pas sûr que ton code fasse ce que tu veux. D'après ce que je comprends :

 if (val==1)
  {
    start=millis();
  }

Val est à 1 si le laser est coupé. Donc dès que val passe à 1 tu lance le chrono,mais tu l'arrêtes immédiatement après puisque tu calcules tout de suite le temps :

  MS = millis()-start;

Il faut vérifier que la balle est passée avant de calculer ce temps :

while (val ==1) { }
MS = millis()-start;

Ça doit répondre à ta question.

Si je comprends bien ta réponse, je devrais remplacer le if par un while ?

Non, pas le remplacer, le mettre après :

if (val==1)
  {
    start=millis();
  }
while (val ==1) { }
MS = millis()-start;

Le while sert à attendre que la balle soit passée