Arduino + relé accione alarma y de 15 de tiempo a pasar

Hola soy novato programando en Arduino y tengo el siguiente proyecto que el arduino :
Una puerta con un switch magnetico lea el estado de la puerta y que si esta abierta de un tiempo de 15 segundos para cruzar sin activar el relé se cierra la puerta en ese lapso(15 segundos) no active lo trate de hacer con estados o lo que necesito es un trhead (que lea el estado de la puerta mientras cuente los 15 segundos) .
CODIGO:

#include "Timer.h"

//ESTADOS
#define NORMAL 0
#define PRE_ALARMA 1
#define ALARMA 2

int sensor=8;
#define PIN_TILT 8
int rele=7;
int a=0;
#define TIEMPO_PRE_ALARMA 10000 /
//Timer
Timer t;
int timer_id;
//Variables temporales
unsigned long tiempo_deteccion = 0;
unsigned long tiempo_prealarma = 0;

//Variable con el estado
int estado = NORMAL; //Inicio en estado normal

int state; // 0 close - 1 open wwitch

void setup()
{
pinMode(PIN_TILT, INPUT_PULLUP);
pinMode(rele, OUTPUT);

comprueba_tilt(NORMAL);

}

void loop()
{
t.update();
switch (estado) {
case NORMAL:
comprueba_tilt(NORMAL);
Serial.println("NORMAL");

break;
case PRE_ALARMA:
actualiza_alarma(PRE_ALARMA);
Serial.println("PREALARMA");
break;
case ALARMA:
if (!comprueba_tilt(ALARMA))
actualiza_alarma(NORMAL);
Serial.println("ALARMA");
break;
}
#if DEBUG
imprime_valiables();
#endif

}

boolean comprueba_tilt(int valor_estado) {
//Devuelve 1 si está activo y 0 si no está activo
int valor_tilt = digitalRead(PIN_TILT); //es un INPUT_PULLUP activo = 0
#if DEBUG
Serial.println("Valor_tilt = " + (String)valor_tilt);
#endif
if ( (valor_tilt==HIGH )) { //Tilt activado en vertical leo 1 al poner en vertical
actualiza_alarma(PRE_ALARMA);
return 1;
}

void blink()
{
static boolean output = HIGH;
#if DEBUG
Serial.println("Blink");
output ? Serial.println("beep") : Serial.println("no beep");
#endif

}

void actualiza_alarma(int valor_nuevo_estado) {
//Paso de un estado a otro
estado = valor_nuevo_estado;

switch (estado) {
case NORMAL:
Serial.println("ENTRO EN ESTADO NORMAL");
t.stop(timer_id);
//BORRAR digitalWrite(PIN_LED, LOW);

break;
case PRE_ALARMA:
Serial.println("ENTRO EN ESTADO PRE-ALARMA");
tiempo_prealarma = millis();
timer_id = t.every(1000, blink);
break;
case ALARMA:
Serial.println("ENTRO EN ESTADO ALARMA");
t.stop(timer_id);
digitalWrite(rele, LOW);

break;
}
}

Moderador
Por favor edita tu post usando etiquetas de código.

Normas del foro