sensor magnetico de puerta y arduino ,problema con codigo.

Hola. Entiendo que lo que quiere es que una vez pasado los cinco segundos se apague el LED y que no se vuelva a encender aunque la señal siga a nivel bajo. Si es así, es que tal como lo tienes, una vez transcurrido los cinco segundos todo vuelve a empezar y se vuelve a detectar la señal a nivel bajo, inmediatamente se vuelve a encender el LED y vuelve a esperar otros cinco segundos... así hasta que la señal se vuelva a poner a nivel alto.

La solución es esperar a que se ponga a nivel alto justo después de apagar el LED pasado los cinco segundos. Para ello puede poner un while. No es la opción más deseable ya que te bloquea el resto del programa y no puedes hacer nada y es susceptible a los rebotes, si al volver a conectar el circuito no lo hace "limpiamente", se vuelve a disparar la alarma.

El código con el while que no hace otra cosa que esperar a que vuelva a estar a nivel alto:

int pulsador=0;

void setup() {
  pinMode(4, OUTPUT);
  pinMode(8, INPUT);
}

void loop() {
  pulsador = digitalRead(8);

  if (pulsador == HIGH) {
    digitalWrite(4, LOW);
  }

  if (pulsador == LOW) {
    digitalWrite(4, HIGH);
    delay(5000);
    digitalWrite(4, LOW); 
    while (digitalRead(8) == LOW) { }; // <--- No continúa mientras la señal se mantenga a nivel bajo
  }
}