Capteur infrarouge avec chronomètre

Bonjour à tous,

Je suis nouveau sur la plateforme avec quelques connaissances dans la programmation en C/C++

voilà mon petit problème : Je suis avec un seul capteur infrarouge pour commencer, et mon but et de déclencher un chrono une fois qu'on passe la main devant ce capteur et arrêter le chrono quand on passe une deuxième fois devant le capteur infrarouge mais pour l'instant j'arrive à déclencher le chrono mais il s'arrête directement après que j'enlève ma main de devant le capteur.

merci d'avance pour votre aide.

Test unitaire : capteur infrarouge
Version : 1.00
Date création : 21/01/2020

Cablage : 
   marron : 5V DC
   bleue  : GNG
   noir   : Signal --> pin 2

*/

#define SENSOR 2 //remplacer pin 2 par sensor
#define ACTION 9 //remplacer pin 9 pour action


//const int  SENSOR = 9;
int boutonState = 0;
bool chronoStatus;                       // Pour mémoriser si on est en On ou Pff

unsigned long millisBoutonON = millis();
unsigned long millisBoutonOff = 0;



void setup() {
 Serial.begin(9600);   //cadensement à 9600 bauds
 pinMode(SENSOR, INPUT_PULLUP);   //definie le pin sensor (le 2) 
 chronoStatus = true;

                                                       //  pinMode(ACTION, OUTPUT);  //definie le pin action (le 9) en sortie
}

void loop() {
 boutonState = digitalRead(SENSOR);
 delay(100);                                  // Pour couvrir les rebonds

 if (boutonState == LOW && chronoStatus == false) // Si bouton pressé et chrono arrêté cela veut dire demarrer le chrono
 {
   millisBoutonON = millis();
   Serial.println("Chrono ON");
   chronoStatus = true;
 }

 if (boutonState == HI && chronoStatus == true) // Si bouton relâché et chrono en marche cela veut dire arreter le chrono
 {
   millisBoutonOff = millis() - millisBoutonON;
   Serial.println("Chrono OFF = " + String(millisBoutonOff));
   chronoStatus = false;
 }
}

Casque-man:
mais il s'arrête directement après que j'enlève ma main de devant le capteur.

C'est juste une erreur de codage.

Je suppose que losque la main est devant le capteur, BoutonState=high et à low dans le cas contraire.
Or ci dessous vous lui demandez d'arrèter le chrono si l'état si chronostatus est actif et si la main n'est pas présente devant le capteur.

Casque-man:
if (boutonState == HI && chronoStatus == true) // Si bouton relâché et chrono en marche cela veut dire arreter le chrono
{
millisBoutonOff = millis() - millisBoutonON;
Serial.println("Chrono OFF = " + String(millisBoutonOff));
chronoStatus = false;
}

Bonjour,

Dans ta description, c'est la même action qui déclenche et arrête le chronométrage. Or dans ton programme c'est l'action inverse qui arrête le chronométrage (comme indiqué dans les commentaires)

Il suffi donc que tu fasses le même test de l'entrée dans les deux cas:

if (boutonState == LOW && chronoStatus == false) // Si bouton pressé et chrono arrêté cela veut dire demarrer le chrono
if (boutonState == LOW && chronoStatus == true) // Si bouton pressé et chrono en marche cela veut dire arreter le chrono

Je suppose que lorsque la main est devant le capteur, BoutonState=high et à low dans le cas contraire.

Si c'est d'un HC-SR501 qu'il s'agit : OUI. Actif à l'état haut.

matos :

  • capteur infrarouge : sensor E3F-DS10P2

  • carte Arduino : mega 2560

kamill:
Bonjour,

Dans ta description, c'est la même action qui déclenche et arrête le chronométrage. Or dans ton programme c'est l'action inverse qui arrête le chronométrage (comme indiqué dans les commentaires)

Il suffi donc que tu fasses le même test de l'entrée dans les deux cas:

if (boutonState == LOW && chronoStatus == false) // Si bouton pressé et chrono arrêté cela veut dire demarrer le chrono
if (boutonState == LOW && chronoStatus == true) // Si bouton pressé et chrono en marche cela veut dire arreter le chrono

merci pour votre retour, j'ai essayé pour le deuxième if, mais sans succès

if (boutonState == LOW && chronoStatus == true) // Si bouton pressé et chrono en marche cela veut dire arreter le chrono

Est ce que le chrono se déclenche? Que se passe-t-il exactement?

kamill:
Est ce que le chrono se déclenche? Que se passe-t-il exactement?

on peut dire ça comme ça, il se déclenche et s'arrête aussitôt.

j'ai mis un délais entre les deux if pour voir, du coup (c'est normal) le chrono s’arrête et affiche le temps qu'il y a dans le délais à chaque fois.