Problème pour compter Entrées/Sorties

Bonjour,

J'effectue un projet en STI2D afin de compter des abeilles.
Du coup, j'utilise des boutons poussoirs avec une carte arduino pour simuler les capteurs infrarouges.
J'utilise donc un BP"1" et un BP"2", Quand une abeille rentre le chemin est donc BP"1" puis BP"2" et quand l'abeille sort de la ruche elle effectue le chemin BP"2" puis BP"1".
Le problème est le suivant ; lorsque je reste appuyé sur un bouton puis l'autre (comme si l'abeille restait entre les deux capteurs), le compteur continue de compter, et il faudrait donc que le compteur compte qu'une seule fois l'abeille qui rentre.
Je ne sais pas si c'est très compréhensible mais voici mon programme;
int ButtonBleu = 2;
int ButtonRouge = 3;
int Capteur1 = 0;
int Capteur2 = 0;
int NbreAbeille = 30000;

void setup() {
pinMode (ButtonBleu, INPUT);
pinMode (ButtonRouge, INPUT);
Serial.begin(9600);
Serial.println("Demarrage");
}

void loop() {
Capteur1 = digitalRead(ButtonBleu);
Capteur2 = digitalRead(ButtonRouge);

while(Capteur1 == HIGH)
{
Capteur2 = digitalRead(ButtonRouge);
while(Capteur2 == HIGH)
{
NbreAbeille = NbreAbeille + 1;
Serial.println(NbreAbeille);
delay(900);
while (Capteur1 == HIGH ||Capteur2 == HIGH ) {
}
return;
}
return;
}

while(Capteur2 == HIGH)
{
Capteur1 = digitalRead(ButtonBleu);
while(Capteur1 == HIGH)
{
NbreAbeille = NbreAbeille - 1;
Serial.println(NbreAbeille);
delay(900);
while (Capteur1 == HIGH ||Capteur2 == HIGH ) {
}
return;
}
return;
}
}

Il faut raisonner sur les transitions pas les états.
Pour reprendre ton exemple,

  • il faut mémoriser dans une variable que le premier bouton a été activé.
  • il faut mémoriser dans une variable que le second bouton a été activé.
  • attendre le retour au repos du second bouton pour compter l'entrée
  • remettre à zéro les mémo

BP1 /-------------___________
BP2 ______/----------------_
Memo1 /------------------------------_
Memo2 _______/--------------------_
Compte _____________________/-_

Un camarade avait pensé à ça aussi mais le problème étant que nous ne savons pas comment programmer cette partie où il faut mémoriser l'état du bouton.

Up :wink:

Au lieu de faire des up réfléchissez un peu.

Pour détecter une transition, il faut comparer l'état du signal à 2 instants différents pour voir s'il y a eu un changement.

Un camarade avait pensé à ça aussi mais le problème étant que nous ne savons pas comment programmer cette partie où il faut mémoriser l'état du bouton.

Dommage...
Vous avez le bon algorithme, mais vous ne vous en servez pas parce que vous ne savez pas le coder...
C'est l'inverse qui doit se produire ! :slight_smile:

Jetez un oeil du côté des encodeurs rotatifs...

Coyotte

A quoi cela servirait dans mon programme ?

Si tu y avais jeté un oeil tu aurais probablement compris...
:wink:

Coyotte

Bonjour,

Voir le tuto d'Eskimon et plus particulièrement le chapitre "DÉTECTION DU CHANGEMENT D’ÉTAT"