/*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 == 34) || comandos == 't') && (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
}
/*
Azul Amarillo = 12v
Blanco Negro = GND
Rosado verde = Sirena (+)
Rojo blanco = Detector de puertas y luz de cortecia
Morado amarillo = Pulsador de capo (-)
Azul rojo = Abre seguros (-)
Verde amarillo = Cierra seguros (-)
Amarillo verde = Señal de parada (-)
Negro amarillo = Ignición (+)
Verde rojo = Horn (-)
Rojo blanco = Luz de cortecia baúl (-)
Azul negro = Detector de llave (-)
Violeta blanco Velocidad ECU (+)
*/