Merci pour cette proposition de code, pour le moments je ne la comprend pas (je vais me renseigner pour tenter de la comprendre).
J'aurais tout de même une question, j'ai écrit le code ci- dessous qui utilise la sortie digitale du capteur et qui semble fonctionner. Cependant un problème subsiste dans la fonction millis(), après mon premier cycle d'activation de la LED ma variable tempodepart repart bien à 0 mais directement après elle passe à 65536 (cf screen ci-dessous)
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()
{
Nbdonnee = 0;
donnee = 0;
TotalLOW = 0;
TotalHIGH = 0;
tempoDepart = millis();//On initialise la tempo
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
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
}
Serial.print("tempoDepart: ");
Serial.println( millis() - tempoDepart );
Serial.print("Nbdonnee: ");
Serial.println( Nbdonnee );
Serial.print("donnee: ");
Serial.println( donnee );
Serial.print("tempoActive: ");
Serial.println( tempoActive );
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 >= 50) //Si le total de donnee sur HIGH est superieur ou egal a 50 alors
{
digitalWrite(12, HIGH);//On allume la led
Serial.print("Digitalout: ");
Serial.println( digitalRead(12) );
delay(500); //On attend 500 millisecondes
digitalWrite(12, LOW);
Serial.print("Digitalout: ");
Serial.println( digitalRead(12) );
delay(5000); // On attend 5 seconde reduit pour les tests de bon fonctionnement
//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);
}
auriez-vous une idée de la raison de ce changement ?
