Buenas a todos una pequeña actualización, ya que no e tenido mucho tiempo para invertir en el proyecto solo e modificado el código en la parte de millis por el motivo de paso por 0 a los 50 días aproximadamente según en varios post recomendaban restar para evitar esto no se si sera la forma correcta o si estoy equivocado o entendi mal.
Antes
if (millis() >= (TiempoInicial2 + tiempoFuncion2))
{
digitalWrite(abrirSeguros, LOW);
digitalWrite(cerrarSeguros, LOW);
digitalWrite(abrirBaul, LOW);
flagSeguros = 0;
}
Ahora
if (millis() - tiempoInicial1 >= tiempoFuncional1) // Desactivacion pines de seguros
{
digitalWrite(abrirSeguros, LOW);
digitalWrite(cerrarSeguros, LOW);
digitalWrite(abrirBaul, LOW);
tiempoInicial1 = 0;
flagSeguros = 0;
}
Codigo completo
/*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,
estadobotonValed = 0,
estadopulsadorCapo = 0, // 0(Abierto)/ 1(Cerrado)
estadopulsadorPuertas = 0, // 0(Abierto)/ 1(Cerrado)
flagSeguros = 0,
armadoAutomatico = 0,
armadoAlarma = 0;
long estadoControl = 0;
int estadoVelocidad = 0,
contSirena = 0,
flagSirena = 0,
estadoSirena = LOW;
/* Temporizador (Millis) */
unsigned long tiempoInicial1; // Tiempo Seguros
const long tiempoFuncional1 = 500; // Tiempo Seguros
unsigned long tiempoInicial2; // Tiempo Alerta iluminacion
const long tiempoFuncional2 = 1200; // Tiempo Alerta iluminacion
unsigned long tiempoInicial3; // Tiempo Sirena
const long tiempoFuncional3 = 100; // Tiempo Sirena
unsigned long tiempoInicial4; // Armado Automatico Alarma
const long tiempoFuncional4 = 5000; // Armado Automatico alarma
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");
}
/* else
{
Serial.print("codigo Recibido ");
Serial.println(estadoControl);
} */
mySwitch.resetAvailable();
}
}
void asignacionPulsadores()
{
estadoIgnicion = digitalRead(ignicion);
estadoVelocidad = digitalRead(velocidad);
estadobotonValed = digitalRead(botonValet);
estadopulsadorCapo = digitalRead(pulsadorCapo);
estadopulsadorPuertas = digitalRead(pulsadorPuertas);
}
void estadoSeguros(int estadoPuertas)
{
digitalWrite(estadoPuertas, HIGH);
digitalWrite(alertaIluminacion, HIGH); // En caso de utilizar señal negativa para encender relay como alternativa utilizar un blink
tiempoInicial1 = millis();
tiempoInicial2 = millis();
flagSeguros = 1;
}
void loop()
{
lecturaDatos();
/*Control Automatico*/
/*Control Manual */
// Radio control y comando bluetooth
if (((estadoControl == 11227985) || comandos == 'a') && (flagSeguros == 0)) // Comando y codigo para abir puertas
{
estadoSeguros(abrirSeguros);
flagSirena = 3;
contSirena = 0;
}
if (((estadoControl == 11227986) || comandos == 'c') && (flagSeguros == 0)) // Comando y codigo para cerrar puertas
{
estadoSeguros(cerrarSeguros);
flagSirena = 2;
contSirena = 0;
}
if (((estadoControl == 11227988) || comandos == 'b') && (flagSeguros == 0)) // Comando y codigo para abir el baul
{
estadoSeguros(abrirBaul);
flagSirena = 4;
contSirena = 0;
}
// Apagado de pines millis
if (millis() - tiempoInicial1 >= tiempoFuncional1) // Desactivacion pines de seguros
{
digitalWrite(abrirSeguros, LOW);
digitalWrite(cerrarSeguros, LOW);
digitalWrite(abrirBaul, LOW);
tiempoInicial1 = 0;
flagSeguros = 0;
}
if (millis() - tiempoInicial2 >= tiempoFuncional2) // Desactivacion pines de alerta iluminacion
{
digitalWrite(alertaIluminacion, LOW);
tiempoInicial2 = 0;
}
if (contSirena < flagSirena) // Blink Sirena (Optimizar si se puede)
{
if (millis() - tiempoInicial3 >= tiempoFuncional3)
{
tiempoInicial3 = millis();
if (estadoSirena == LOW)
{
estadoSirena = HIGH;
}
else
{
estadoSirena = LOW;
contSirena++;
}
}
}
digitalWrite(sirena, estadoSirena);
// Limpieza de variables
estadoControl = 0;
comandos = ' ';
}
Adjuntare todos los archivos que tenga al inicio del proyecto, también adjunto 2 videos funcionando tanto por rf como por bluetooth solo en modo manual, ahora intentaré añadir un modo para que me cierre las puertas después de un tiempo como una alarma común luego seguire implementando las sugerencias de RIG empezando por los vidrios automaticos.
Videos.
Funcionamiento contro RF
Funcionamiento por bluetooth