Problème prog Arduino, capteur de son Iduino 1485297

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 ?