Problème prog Arduino, capteur de son Iduino 1485297

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 ?