Problema con barrera infrarroja.

Hola amigos, estoy empezando en el mundo de Arduino y requiero su ayuda.

el proyecto que intento desarrollar es un contador de personas por medio de una barrera infrarroja y pantalla led con I2c, el problema radica en que necesito que cuando una persona coloque en LOW la lectura proveniente de los infrarrojos, es decir que este entre el emisor y receptor por mas de 15 segundos encienda una alarma.

por ahora la alarma se enciende a los 15 segundos cuando pasa una persona sin esperar el tiempo de validación (que deberian ser esos 15 segundos).

les anexo el codigo

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3,POSITIVE);
const byte Pinsensor = A1; // Pin del Fototransistor
const byte Pinsensor2 = A2;
const byte ledPin = 9;      // Pin para el led indicador
const byte salida = 11;   //Pin que activa la alarma
int sensorValor = 0;// inicia y guarda el valor inicial del sensor como 0 
int sensorValor2 = 0;
double contador = 0;    // empieza el valor de las personas en 0        
boolean estado = false; // Variable de estado (para la comparacion)
unsigned long Timer;           // Variable para temporizador
const unsigned long Tiempo = 15000;  // Tiempo para timer (15 segundo)


void setup() {
  // Inicializamos la comunicacion serial a 9600 bps:
  Timer = 0; 
  lcd.begin(16, 2);
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT); // el led es salida
  pinMode(Pinsensor, INPUT);// el led receptor o fototransistor es entrada
  pinMode(Pinsensor2, INPUT);
  pinMode(salida, OUTPUT);
   
  
 
}
 
void loop() {
 
  sensorValor = digitalRead(Pinsensor)  ; // el valor del sensorValor dependera de la lectura del fototransistor
  sensorValor2 = digitalRead(Pinsensor2);
  
   
  lcd.setCursor(0, 0);
   lcd.print("personas:");
   lcd.setCursor(0,1);
   lcd.print(contador);
 
 
 if(sensorValor == HIGH  && sensorValor2 == HIGH && estado == false)
  {
   digitalWrite(ledPin, LOW);
   estado = true;
   
   }
   
           
   else if (sensorValor == LOW && sensorValor2 == HIGH &&  estado == true){
    
    digitalWrite(ledPin, HIGH);
    contador = contador +0.5;
     estado = false;

   Timer=millis() + Tiempo;
   
   
      }

if (Timer > 0 && millis() > Timer )              // Ha transcurrido el tiempo programado?
  {
    Timer=0;
    digitalWrite(salida,HIGH);
    delay(5000);
    digitalWrite(salida,LOW);
  }


      

    else if (sensorValor == HIGH && sensorValor2 == LOW && estado == true){
      digitalWrite(ledPin, HIGH);
      contador = contador +0.5;
      estado=false;

       Timer=millis() + Tiempo;
    }


    if (Timer > 0 && millis() > Timer )              // Ha transcurrido el tiempo programado?
  {
    Timer=0;
    digitalWrite(salida,HIGH);
    delay(5000);
    digitalWrite(salida,LOW);
  }

    else if (sensorValor == LOW && sensorValor2 == LOW && estado == true){
      digitalWrite(ledPin, HIGH);
      contador = contador +1;
      estado = false;
      
    Timer=millis() + Tiempo;
  
    }

  if (Timer > 0 && millis() > Timer )              // Ha transcurrido el tiempo programado?
  {
    Timer=0;
    digitalWrite(salida,HIGH);
    delay(5000);
    digitalWrite(salida,LOW);
  }
  
  
 { // Imprimimos el valor en el monitor.
  Serial.print("contador = " );                       
  Serial.println(contador);    
  
  
  
 delay(100);
 }
                    
  }

Agradezco a quien me pueda ayudar.

Te muestro un ejemplo de las funciones que utilizo yo para trabajar con temporizadores, en este caso si pulsas el boton durante 1’5s (1500) o mas, el led se encenderá.

La primera función recoge el tiempo que tiene que esperar para temporizar, la segunda compara para saber si ha llegado a ese tiempo.

Como siempre está recogiendo el tiempo no llega nunca a temporizar, hasta que se pulse.

long pretemp (int tiempo) {
  unsigned long time = millis();
  long ptiempo = time + tiempo;
  return ptiempo;
}

byte temp (long ptiempo) {
  unsigned long time = millis();
  if (time >= ptiempo) return 1;
  else return 0;
}

const byte led = 13;
const byte pulsador = 2;
byte validacion = 0;
long pretiempo = 0;
int tiempo = 1500;


void setup() {
  pinMode(led, OUTPUT);
  pinMode(pulsador, INPUT);
}

void loop() {
  if (digitalRead(pulsador) == LOW) pretiempo = pretemp (tiempo);
  validacion = temp (pretiempo);

  if (validacion == 1) digitalWrite(led, HIGH);
  else digitalWrite(led, LOW);
}