Suite à votre dernier message j'ai écrit le code ci-dessous, j'y ai utilisé la fonction while() qui me permet d'incrémenter ma variable donnée pendant 5 secondes ( temps régis par la fonction millis() ) cependant la fonction while() semble être bloquante, malgré le fait que je compte le temps à l'intérieur même de cette variable.
info dans les //
int tempoDepart = 0;//Variable pour initialiser la tempo
int tempoActive = 0;//Variable qui definit l'état de la tempo 1=active 0=inactive
int Nbdonnee = 0;//Variable permettant de stocker le nombre de donnees enregisters
int donnee = 0;//Variable permettant de stocker le nombre de donnees sur HIGH
int TotalLOW = 0;//Variable resultante due au calcule suivant: Nbdonee - donee
int TotalHIGH = 0;//Variable resultante due au calcule suivant: Nbdonne - TotalLOW elle permet de verifier si le seuil de declanchement de la led est dépasser ou non
void setup()
{
pinMode(7, INPUT);
pinMode(12, OUTPUT);
Serial.begin(9600);
}
void loop()
{
if ( digitalRead(7) == HIGH ){//Si capteur = HIGH alors
tempoActive = 1;//On met la variable tempoActive sur 1
while (tempoActive == 1) {//On cree une boucle de mesure qui s'arrette quand la variable tempoActive = 0
tempoDepart = millis();//On initialise la tempo
Nbdonnee = (Nbdonnee + 1);//On compte le nombre de donnee
if (digitalRead(7) == HIGH) {//Si capteur = HIGH alors
donnee = (donnee + 1);//On incremente le compteur de donnee HIGH
}
if (( millis() - tempoDepart ) >= 5000) //Si on compte depuis 5 secondes alors
{
tempoActive = 0; //On met la variable tempoActive sur 0 pour arreter la boucle
}
}
TotalLOW = (Nbdonnee - donnee);//On calcule le nombre total de donnee sur LOW
TotalHIGH = (Nbdonnee - TotalLOW);//On calcule le nombre total de donnee sur HIGH
}
if (TotalHIGH >= 3) {//Si le total de donnee sur HIGH est superieur ou egal a X alors
digitalWrite(12, HIGH);//On allume la led
delay(500); //On attend 500 millisecondes
digitalWrite(12, LOW);
delay(180000); // On attend 3 minutes
}
Serial.print("tempoDepart: ");
Serial.println( millis() - tempoDepart );
delay(500);
Serial.print("tempoActive: ");
Serial.println( tempoActive );
delay(500);
Serial.print("Nbdonnee: ");
Serial.println( Nbdonnee );
delay(500);
Serial.print("donnee: ");
Serial.println( donnee );
delay(500);
Serial.print("TotalLOW: ");
Serial.println( TotalLOW );
delay(500);
Serial.print("TotalHIGH: ");
Serial.println( TotalHIGH );
delay(500);
Serial.print("Digitalin: ");
Serial.println( digitalRead(7) );
delay(500);
Serial.print("Digitalout: ");
Serial.println( digitalRead(12) );
delay(500);
}
Cela est il normal ou est-ce moi qui fait une erreur ?