/*Librerias*/ #include #include //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, estadobotonValed = 0, estadopulsadorCapo = 0, estadopulsadorPuertas = 0, armadoAutomatico = 0, armadoAlarma = 0, flagAlarma = 0, flagIluminacion = 0, flagSirena = 0, flagSeguros = 0, flagArmado = 0, flagLuzCortecia = 0, estadoLuzCortecia = 0, estadoSirena = LOW, j = 0, flagApagado; long codigoControl = 0; int estadoVelocidad = 0, contSirena = 0, blinkSirena = 0, i = 0; /* Temporizador (Millis) */ unsigned long tiempoInicial1; 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 = 30000; // Armado Automatico alarma unsigned long tiempoInicial5; // Activacion de Sirena y luces const unsigned long tiempoFuncional5 = 120000; // Activacion de Sirena y luces unsigned long tiempoInicial6; // luz de cortecia const unsigned long tiempoFuncional6 = 30000; // luz de cortecia unsigned long tiempoInicial7; // Efecto fade luz de cortecia const unsigned long tiempoFuncional7 = 30; // Efecto fade luz de cortecia 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()) { codigoControl = mySwitch.getReceivedValue(); if (codigoControl == 0) { Serial.println("error de codigo"); } { Serial.print("codigo Recibido "); Serial.println(codigoControl); } mySwitch.resetAvailable(); } } void pulsadores() { estadoIgnicion = digitalRead(ignicion); // 0(Apagado) / 1(Prendido) estadoVelocidad = digitalRead(velocidad); estadobotonValed = digitalRead(botonValet); estadopulsadorCapo = digitalRead(pulsadorCapo); // 0(Abierto) / 1(Cerrado) estadopulsadorPuertas = digitalRead(pulsadorPuertas); // 0(Abierto) / 1(Cerrado) } 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) && (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 = 1; // Activa estado de sirena. blinkSirena = 5; // Sonidos Armado de la Alarma. contSirena = 0; // Reinicia el contdor de sirena. Serial.println("Alarma Armada"); // Borrar o poner como monetario. } } 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(); } /*luz de cortecia */ /*Encendico durante 30 segundo */ if (estadoIgnicion == 1) { if (j == 0) { estadoLuzCortecia = 1; tiempoInicial7 = millis(); j = 1; } flagLuzCortecia = 0; } else { j = 0; } if (estadoIgnicion == 0) { if (flagApagado == 0) { i = 255; tiempoInicial6 = millis(); flagLuzCortecia = 1; flagApagado = 1; } } else { flagApagado = 0; } if ((estadopulsadorPuertas == 0) && (estadoIgnicion == 0)) { i = 255; tiempoInicial6 = millis(); flagLuzCortecia = 1; } /*Control Manual */ // Radio control y comando bluetooth if (((codigoControl == 11227986) || comandos == 'a') && (flagSeguros == 0)) // Comando y codigo para abir puertas { estadoSeguros(abrirSeguros); if (estadoIgnicion == 0) { armadoAutomatico = 0; blinkSirena = 3; contSirena = 0; tiempoInicial4 = millis(); Serial.println("Puertas Abiertas"); // Borrar o poner como comentario. flagLuzCortecia = 1; i = 255; tiempoInicial6 = millis(); } } if (((codigoControl == 11227985) || comandos == 'c') && (flagSeguros == 0)) // Comando y codigo para cerrar puertas { estadoSeguros(cerrarSeguros); if (estadoIgnicion == 0) { blinkSirena = 2; contSirena = 0; armadoAutomatico = 1; Serial.println("Puertas Cerradas"); // Borrar o poner como comentario. estadoLuzCortecia = 1; tiempoInicial7 = millis(); } } if (((codigoControl == 11227988) || comandos == 'b') && (flagSeguros == 0)) // Comando y codigo para abir el baul { estadoSeguros(abrirBaul); if (estadoIgnicion == 0) { blinkSirena = 4; contSirena = 0; Serial.println("Baul abierto"); // Borrar o poner como comentario. } } 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 ((flagAlarma == 1) && (millis() - tiempoInicial5 >= tiempoFuncional5)) // Apagado despues de 30 segundo de activacion de la alarma { digitalWrite(sirena, LOW); digitalWrite(alertaIluminacion, LOW); flagAlarma = 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 ((flagLuzCortecia == 1) && (millis() - tiempoInicial6 >= tiempoFuncional6)) // Luz de Cortecia (Optimizar si se puede) { estadoLuzCortecia = 1; tiempoInicial7 = millis(); flagLuzCortecia = 0; } if ((estadoLuzCortecia == 1) && (millis() - tiempoInicial7 > tiempoFuncional7)) // Luz de Cortecia (Optimizar si es posible) { tiempoInicial7 = millis(); if (i > 0) { i--; } else { estadoLuzCortecia = 0; } } analogWrite(luzCortecia, i); codigoControl = 0; // Limpieza de variables comandos = ' '; // Limpieza de variables }