Saludos, esta seria mi primera consulta, tengo ya un tiempo estudiando la programación con Arduino y en base a lo que he logrado aprender hice un pequeño código para controlar a través de un motor un portón eléctrico, el mismo lo tengo ya funcionando y no me ha presentado problemas aun, les dejare el código para que lo vean... Solo que ahora quiero agregarle que funcione paso a paso, si estaba abriendo y presiono el botón que pare y que cuando vuelva a presionar el botón cierre, igual para cuando este cerrando...
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;
short flag_abre = 0;
short flag_cierra = 0;
short f_c_abrir=1;
short f_c_cerrar=1;
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);
}
void loop() {
while (true) {
abrir=digitalRead(pulso);
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
}
}
}