Alarma de seguridad para Automóvil

Buenas a todos actualizo el proyecto, e añadido el armado automático a un cierto tiempo además si está armada la alarma y se abre una puerta o capó se activa la sirena por un cierto tiempo en esta parte se puede añadir un relay que corte la alimentación de las bobinas para que no lo puedan encender el vehiculo, en mi caso no le pondré ya que se necesita la llave para poder encenderlo. Me falta añadir lo que es la luz de cortesía.

Ahora para lo que es los vidrios automáticos no se si sea mejor utilizar otro microcontrolador para controlar de forma individual cada ventana y añadir las protecciones para lo cual se utilizará 1 puente h para cada ventana o dos l298n para las 4 y que cada puente h lleve un sensor para medir el consumo como el ACS712 o ustedes que me recomiendan.

Adjunto el codigo que tengo hasta el momento:

/*Librerias*/
#include <Arduino.h>
#include <RCSwitch.h> //Libreria para control remoto.
/*Definiciones Entradas y Salidas */
const int sirena = 13,
          abrirBaul = 12,
          luzCortecia = 11,
          alertaIluminacion = 10,
          cerrarSeguros = 9,
          abrirSeguros = 8,
          ignicion = 7,
          velocidad = 6,
          botonValet = 5,
          pulsadorCapo = 4,
          pulsadorPuertas = 3,
          controlRadio = 2,
          subirVentanas = A4,
          bajarVentanas = A5;
RCSwitch mySwitch = RCSwitch();
/*Variables y Constantes*/
char comandos;
bool estadoIgnicion = 0,            // 0(Apagado) / 1(Prendido)
    estadobotonValed = 0,
    estadopulsadorCapo = 0,         // 0(Abierto) / 1(Cerrado)
    estadopulsadorPuertas = 0,      // 0(Abierto) / 1(Cerrado)
    armadoAutomatico = 0,
    armadoAlarma = 0,
    flagAlarma = 0,
    flagIluminacion = 0,
    flagSirena = 0,
    flagSeguros = 0,
    flagArmado = 0,
    estadoSirena = LOW;
long estadoControl = 0;
int estadoVelocidad = 0,
    contSirena = 0,
    blinkSirena = 0;
/* Temporizador (Millis) */
unsigned long tiempoInicial1;                         //Tiempo desactivacion de seguros
const unsigned long tiempoFuncional1 = 700;           //Tiempo desactivacion de seguros
unsigned long tiempoInicial2;                         // Tiempo Alerta iluminacion
const unsigned long tiempoFuncional2 = 1200;          // Tiempo Alerta iluminacion
unsigned long tiempoInicial3;                         // Tiempo Sirena
const unsigned long tiempoFuncional3 = 100;           // Tiempo Sirena
unsigned long tiempoInicial4;                         // Armado Automatico Alarma
const unsigned long tiempoFuncional4 = 10000;         // Armado Automatico alarma
unsigned long tiempoInicial5;                         // Activacion de Sirena y luces
const unsigned long tiempoFuncional5 = 10000;         // Activacion de Sirena y luces
void setup()
{
  Serial.begin(115200);
  pinMode(sirena, OUTPUT);
  pinMode(abrirBaul, OUTPUT);
  pinMode(luzCortecia, OUTPUT);
  pinMode(alertaIluminacion, OUTPUT);
  pinMode(cerrarSeguros, OUTPUT);
  pinMode(abrirSeguros, OUTPUT);
  pinMode(subirVentanas, OUTPUT);
  pinMode(bajarVentanas, OUTPUT);
  pinMode(ignicion, INPUT);
  pinMode(velocidad, INPUT);                        // Comprobar si es posible incluirlo
  pinMode(botonValet, INPUT);                       // Posiblemente NO
  pinMode(pulsadorCapo, INPUT);
  pinMode(pulsadorPuertas, INPUT);
  pinMode(controlRadio, INPUT);
  mySwitch.enableReceive(0);                        // pin 2 para control
}
void lecturaDatos()
{
  if (Serial.available() > 0)
  {
    comandos = Serial.read();
  }
  if (mySwitch.available())
  {
    estadoControl = mySwitch.getReceivedValue();
    if (estadoControl == 0)
    {
      Serial.println("error de codigo");
    }
    {
      Serial.print("codigo Recibido ");
      Serial.println(estadoControl);
    }
    mySwitch.resetAvailable();
  }
}
void pulsadores()
{
  estadoIgnicion = digitalRead(ignicion);
  estadoVelocidad = digitalRead(velocidad);
  estadobotonValed = digitalRead(botonValet);
  estadopulsadorCapo = digitalRead(pulsadorCapo);
  estadopulsadorPuertas = digitalRead(pulsadorPuertas);
}
void estadoSeguros(int estadoPuertas)
{
  digitalWrite(estadoPuertas, HIGH);

  tiempoInicial1 = millis();
  tiempoInicial2 = millis();
  flagSeguros = 1;
  if (estadoIgnicion == 0)
  {
    digitalWrite(alertaIluminacion, HIGH); // En caso de utilizar señal negativa para encender relay como alternativa utilizar un blink
    flagIluminacion = 1;
    flagSirena = 1;
  }
}
void loop()
{
  lecturaDatos();
  pulsadores();

  /*Control Automatico*/
  /*Armado Automatico 30 segundo */
  if ((estadoIgnicion == 0) && (estadoIgnicion == 0) && (armadoAutomatico == 0) && (estadopulsadorPuertas == 1) && (estadopulsadorCapo == 1))
  {
    if (millis() - tiempoInicial4 >= tiempoFuncional4)
    {
      estadoSeguros(cerrarSeguros);
      armadoAutomatico = 1; // Para evitar que se vuelva armar la alrma cada cierto tiempo.
      flagSirena = 3;       // Sonidos Armado de la Alarma.
      contSirena = 0;
    }
  }
  if ((estadopulsadorPuertas == 0) || (estadopulsadorCapo == 0) || (estadoIgnicion == 1)) // Mientras las puertas esten abiertas o el vehiculo encendido
  {
    tiempoInicial4 = millis();
  }
  if ((armadoAutomatico == 1) && ((estadopulsadorPuertas == 0) || (estadopulsadorCapo == 0)||(estadoIgnicion == 1))) // Alarma por apertura de puertas o capo
  {
    digitalWrite(sirena, HIGH);
    digitalWrite(alertaIluminacion, HIGH);
    flagAlarma = 1;
    tiempoInicial5 = millis();
  }
  /*Control Manual */
  // Radio control y comando bluetooth
  if (((estadoControl == 11227985) || comandos == 'a') && (flagSeguros == 0)) // Comando y codigo para abir puertas
  {
    estadoSeguros(abrirSeguros);
    if (estadoIgnicion == 0)
    {
      armadoAutomatico = 0;
      blinkSirena = 3;
      contSirena = 0;
      tiempoInicial4 = millis();
    }
  }
  if (((estadoControl == 11227986) || comandos == 'c') && (flagSeguros == 0)) // Comando y codigo para cerrar puertas
  {
    estadoSeguros(cerrarSeguros);
    if (estadoIgnicion == 0)
    {
      blinkSirena = 2;
      contSirena = 0;
      armadoAutomatico = 1;
    } 
  }
  if (((estadoControl == 11227988) || comandos == 'b') && (flagSeguros == 0)) // Comando y codigo para abir el baul
  {
    estadoSeguros(abrirBaul);
    if (estadoIgnicion == 0)
    {
      blinkSirena = 4;
      contSirena = 0;
    }
  }
  if ((flagSeguros == 1) && (millis() - tiempoInicial1 >= tiempoFuncional1)) // Desactivacion pines de seguros
  {
    digitalWrite(abrirSeguros, LOW);
    digitalWrite(cerrarSeguros, LOW);
    digitalWrite(abrirBaul, LOW);
    flagSeguros = 0;
  }
  if ((flagIluminacion == 1) && (millis() - tiempoInicial2 >= tiempoFuncional2)) // Desactivacion pines de alerta iluminacion
  {
    digitalWrite(alertaIluminacion, LOW);
    flagIluminacion = 0;
  }
  if ((flagSirena == 1) && (contSirena < blinkSirena)) // Blink Sirena (Optimizar si se puede)
  {
    if (millis() - tiempoInicial3 >= tiempoFuncional3)
    {
      tiempoInicial3 = millis();

      if (estadoSirena == LOW)
      {
        estadoSirena = HIGH;
      }
      else
      {
        estadoSirena = LOW;
        contSirena++;
      }
    }
    digitalWrite(sirena, estadoSirena);
  }
  if ((flagAlarma == 1) && (millis() - tiempoInicial5 >= tiempoFuncional5))
  {
    digitalWrite(sirena, LOW);
    digitalWrite(alertaIluminacion, LOW);
    flagAlarma = 0;
  }
  estadoControl = 0; // Limpieza de variables
  comandos = ' ';    // Limpieza de variables
}