Sensor Ultrasonico HC-SR04 ¿Antirrebote?

Hola a todos! me estoy liando muchisimo, mi proyecto en si es un dispensador de gel y detectar la presencia de personas y contar cuantas pasan, pero necesito un antirrebote para que el sensor no siga contando si la persona se queda paradota delante del sensor, ya intente con while y siempre se queda con la primera lectura del sensor y nunca sale ¿Saben que estoy haciendo mal? Adjunto el codigo, especificamente es en la parte del Switch donde se elige el sensor que esta activandose, en especial es el sensor 1 el que estoy usando nada mas. Si ven que esta leyendo y escribiendo en el serial es porque tengo conectado en RX y TX un Node mcu que registra todo.

//Arduino uno

#include <SoftwareSerial.h>


//variables sensores
int PinSenTrig1 = 9;               //sensor ultra trig 1
int PinSenEcho1  = 10;               //sensor ultra echo 2

//int PinSenTrig2 = 3;               //sensor ultra trig 3
//int PinSenEcho2  = 4;               //sensor ultra echo 4

//int PinSenTrig3 = 5;               //sensor ultra trig 5
//int PinSenEcho3  = 14;               //sensor ultra echo 6

int PinSenTrigDisp = 2;          //sensor de dispersador
int PinSenEchoDisp = 3;

// variable del rele
int rele = 7;

//UN LED :P
int led =  8; 

// variables de obstaculos
int obstaculoDisp = LOW;  //bajo significa que no hay obstaculos
int obstaculo = LOW;


//CONTADORES
int contadorDisp = 0;
int contadorIzq = 0;
int contadorMedio = 0;
int contadorDere = 0;
int contadorTotal = 0;

//variables para distancias
float tiempo;
float tiempo1;
float tiempo2;
float tiempo3;

float distancia;
float distancia1;
float distancia2;
float distancia3;

char dato = '1';




void setup(){
  
  Serial.begin(9600);

  pinMode(led, OUTPUT);
  
  pinMode(PinSenTrig1, OUTPUT);  //SESNOR 1 ULTRASONIDO
  pinMode(PinSenEcho1, INPUT);
  
//  pinMode(PinSenTrig2, OUTPUT);   //SESNOR 2 ULTRASONIDO
 // pinMode(PinSenEcho2, INPUT);
  
//  pinMode(PinSenTrig3, OUTPUT);  //SESNOR 3 ULTRASONIDO
//  pinMode(PinSenEcho3, INPUT);

  pinMode(PinSenTrigDisp, OUTPUT);  //SENSOR DISPERSOR ULTRASONIDO
  pinMode(PinSenEchoDisp, INPUT);          
  
  pinMode(rele, OUTPUT);         //el rele es salida, controla bomba
  
 
}

void loop(){
//---------------------Secuencia de calibracion de los sensores----------------------
//--------------------------------------------------------------------------------
//--------------------------sensor dispersor-------------------------------------
  digitalWrite(PinSenTrigDisp, LOW); //genera un pulsolimpio iniciamos con low por .4s 
  delayMicroseconds(4);
  
  digitalWrite(PinSenTrigDisp, HIGH);   //generamos un disparo por 
  delayMicroseconds(10);
  
  digitalWrite(PinSenTrigDisp, LOW);
  
 tiempo = pulseIn(PinSenEchoDisp, HIGH);
 distancia = tiempo/58.3;     //especifiacion de fabricante sensor echo

 //------------------------------Sensor 1-------------------------------------------------

  digitalWrite(PinSenTrig1, LOW); //genera un pulsolimpio iniciamos con low por .4s 
  delayMicroseconds(4);
  
  digitalWrite(PinSenTrig1, HIGH);   //generamos un disparo por 
  delayMicroseconds(10);
  
  digitalWrite(PinSenTrig1, LOW);
  
  tiempo1 = pulseIn(PinSenEcho1, HIGH);
  distancia1 = tiempo1/58.3;     //especifiacion de fabricante sensor echo
  

 //-----------------------------Sensor 2 ----------------------------------------------------
   
//  digitalWrite(PinSenTrig2, LOW); //genera un pulsolimpio iniciamos con low por .4s 
//  delayMicroseconds(4);
  
//  digitalWrite(PinSenTrig2, HIGH);   //generamos un disparo por 
//  delayMicroseconds(10);
  
//  digitalWrite(PinSenTrig2, LOW);
  
//  tiempo2 = pulseIn(PinSenEcho2, HIGH);
//  distancia2 = tiempo2/58.3;     //especifiacion de fabricante sensor echo
//-------------------------------Sensor 3 -------------------------------------------------

//  digitalWrite(PinSenTrig3, LOW); //genera un pulsolimpio iniciamos con low por .4s 
//  delayMicroseconds(4);
  
//  digitalWrite(PinSenTrig3, HIGH);   //generamos un disparo por 
//  delayMicroseconds(10);
  
//  digitalWrite(PinSenTrig3, LOW);
  
//  tiempo3 = pulseIn(PinSenEcho3, HIGH);
//  distancia3 = tiempo3/58.3;     //especifiacion de fabricante sensor echo
  

 //--------------------------Termina calibracion-----------------------
//-------------------------------------------------------------------

//Actuador del dispersor 

  if(distancia >= 1 && distancia <= 13 ){
    
    contadorDisp++;
    digitalWrite(rele, LOW);  //se activa cuando esta bajo
    delay(800);
    digitalWrite(rele, HIGH);  //se desactiva cuando esta alto
    delay(500);
    Serial.println(0);

    delay(1000);
  }
 
  else{
   digitalWrite(rele, HIGH);
  }
 

//------------------------seleccion de sensor a usar--------

 //dato = Serial.read();                        //lee el valor lanzado por el esp y lo guarda el la variable dato
  
  
  switch (dato){                                 //inicia a leer el valor llegado

//------------------------sensor 1
   case '1':                           
        //AQUI SE NECESITA EL ANTIRREBOTE  
   if( distancia1 >= 5 && distancia1 <= 40){     

      contadorIzq++;
      
      Serial.println(1);
      //hasta aqui bien 
      for(int prende = 0; prende < 1; prende++){
          digitalWrite(led, HIGH);
          delay(100);
          digitalWrite(led, LOW);
          delay(100);
          } 
          
         delay(1000);
         
   }

   else{
    digitalWrite(led, LOW);
   }
    
   
  break;

//------------------------- sensor 2 
   case '2':
        
        if( distancia1 >= 1 && distancia1 <= 50){

          contadorMedio++;
          Serial.println(2);

         for(int prende = 0; prende < 2; prende++){
          digitalWrite(led, HIGH);
          delay(100);
          digitalWrite(led, LOW);
          delay(100);
          }
                  
        }
      else{
        digitalWrite(led, LOW);
       } 
       
        
    break;

//---------------------------------sensor 3
    case '3':
    
        if( distancia1 >= 1 && distancia1 <= 70){

          contadorDere++;
          Serial.println(3);

          for(int prende = 0; prende < 3; prende++){
          digitalWrite(led, HIGH);
          delay(100);
          digitalWrite(led, LOW);
          delay(100);
          } 
         
        }
        
        else{
          digitalWrite(led, LOW);
        }

       break;

     default:

     break;
       
  }
}

Hola, es que es un dilema porque la misma persona puede irse y volver y te cuenta como 2 personas, ahora si eso no interesa tanto podrias darle un limite de tiempo por ejemplo 1 minuto entonces ademas de la condicion del rango de distancias tambien esta el limite de tiempo por persona.
Saludos.

Creas una variable que sea verdadera cuando detecta "algo" y que solo se haga falsa cuando "algo" se aleja, entonces ignoras la deteccion hasta que la variable sea falsa.

Así

// variables de obstaculos
bool detectado = false;   // *** agregar esta variable

// ... sigue el codigo

// Actuador del dispersor
 if(distancia >= 1 && distancia <= 13 ){
  if(detectado == false){   // si es una nueva deteccion actua, sino no
   detectado = true;
   contadorDisp++;
   digitalWrite(rele, LOW);  //se activa cuando esta bajo
   delay(800);
   digitalWrite(rele, HIGH);  //se desactiva cuando esta alto
   delay(500);
   Serial.println(0);
   delay(1000);
  }
 }
 else{
  digitalWrite(rele, HIGH);
  detectado = false;   // cambia cuando se aleja
 }

Casualmente di con la respuesta mientras dormia jaja es mas facil de lo que pense, solo poner a calibrar el sensor dentro del while y listo!

while(distancia1 >= 1 && distancia1 <= 40){
            digitalWrite(PinSenTrig1, LOW); //genera un pulsolimpio iniciamos con low por .4s 
            delayMicroseconds(4);
  
            digitalWrite(PinSenTrig1, HIGH);   //generamos un disparo por 
            delayMicroseconds(10);
  
            digitalWrite(PinSenTrig1, LOW);
  
            tiempo1 = pulseIn(PinSenEcho1, HIGH);
            distancia1 = tiempo1/58.3;     //especifiacion de fabricante sensor echo

            digitalWrite(led, HIGH);
            delay(200);
                       
          }