Você tem que usar uma interrupção e contar o tempo entre cada um dos pulsos, se passar mais de 2 segundos ele liga o pino por 2 segundos
volatile unsigned int UltimoPulso;
int Pino_PULSO = 2;
int Pino_Alerta = 3;
void FuncSensor()
{
UltimoPulso = millis();
}
void setup()
{
pinMode(Pino_PULSO, INPUT);
pinMode(Pino_Alerta, OUTPUT);
attachInterrupt(0, FuncSensor, RISING);
UltimoPulso = millis();
sei(); // habilita interrupção
}
void loop()
{
if ((UltimoPulso + 1000) < millis())
{
cli(); // desabilita Interrupção
digitalWrite(Pino_Alerta, HIGH);
delay(2000);
digitalWrite(Pino_Alerta, LOW);
UltimoPulso = millis();
sei(); // habilita Interrupção
}
}
Esse é o mínimo do mínimo para fazer.
PS Usei o delay apenas para encurtar o código