const int pulso = 2; // pulso de activacion para abir y cerrar
const int p_cerrada = 3; // sensor de puerta cerrada
const int p_abierta = 4; // sensor de puerta abierta
const int relaya = 6; // rele de activacion de apertura
const int relayc = 7; // rele de activacion de cerrado
short boton = 1;
short abrir = 1, abrirAnt = 0;
short flag_abre = 0;
short flag_cierra = 0;
short f_c_abrir = 1;
short f_c_cerrar = 1;
int estado, estadoAnt = 0;
void setup() {
pinMode(pulso, INPUT); // pulso de activacion para abir y cerrar
pinMode(p_cerrada, INPUT); // sensor de puerta cerrada
pinMode(p_abierta, INPUT); // sensor de puerta abierta
pinMode(relaya, OUTPUT); // rele de activacion de apertura
pinMode(relayc, OUTPUT); // rele de activacion de cerrado
delay(200);
Serial.begin(115200);
}
void loop() {
estado = digitalRead(pulso);
if (estado && !estadoAnt ){
Serial.println(estado?"Pulsado":"No Pulsado");
abrir = 1-abrir;
if (abrir != abrirAnt) {
Serial.println(abrir?"Abro":"Cierro");
delay(50);
}
abrirAnt = abrir;
}
estadoAnt = estado;
f_c_abrir = digitalRead(p_abierta);
f_c_cerrar = digitalRead(p_cerrada);
//*********************************************************************
// RUTINAS PARA LEER LOS FINALES DE CARRERA
//*********************************************************************
if (!f_c_abrir) { // Si se activa el final de carrera de abrir
if (flag_abre) {
digitalWrite(relaya, 0); // detiene el motor
boton = 1;
flag_abre = 0;
}
}
if (!f_c_cerrar) { // Si se activa el final de carrera puerta cerrada
if (flag_cierra) {
digitalWrite(relayc, 0); // detiene el motor
flag_cierra = 0;
boton = 2;
}
}
//*********************************************************************
// RUTINAS PARA ACTIVAR EL MOTOR EN MODO APERTURA O CIERRE
//*********************************************************************
if (boton == 1 && !abrir) { // Si hemos pulsado abrir
digitalWrite(relayc, 1); // se activa el motor en modo cierre
flag_cierra = 1; // Fija el final de carrera para el motor
}
if (boton == 2 && !abrir) { // si el porton esta cerrado y hemos pulsado abrir
digitalWrite(relaya, 1); // activa el motor para abrir
flag_abre = 1; // Activa bandera cierra
}
}