Hola a todos, estoy tratando de controlar dos electrovalvulas con arduino y un modulo relé de doble canal. Mi problema es que en el código que tengo solo activa un relé( el que tiene el tiempo mas reciente) y el otro lo ignora. Por favor alguna idea de que esta mal en mi codigo. Gracias de antemano
Moderador:
Por favor, lee las Normas del foro y edita tu código usando etiquetas de código.
Ve a edición, luego selecciona todo el error que has publicado, lo cortas y click en </>
Así como lo tienes escrito, al ocurrir el 1er evento. y como no reseteas las variables de control hasta las 02:00, cualquier evento posterior se ignora.
Necesitas otro par de variables de control para el 2do. relé.
O sea, agregar por ej.
Otra posibilidad, que yo veo más lógica, es resetear las variables en el evento "contrario", o sea
bool evento_inicio = true;
bool evento_fin = false;
// en cada evento de encendido
Serial.println( "Rele encendido" );
evento_inicio = false;
evento_fin = true;
}
// en cada evento de apagado
Serial.println( "Rele apagado" );
evento_fin = false;
evento_inicio = true;
}
Así te va a funcionar en el código tal cual lo has planteado pero tiene el problema que no te permite solapar los eventos, por ej. encender un relé 18:53, el otro 18:54 y apagarlo 18:55 pero al 1ro apagarlo 19:01.
Además yo modificaría el orden de las comparaciones para que los horarios queden de menor a mayor.
Lo mejor, creo, es mezclar ambas soluciones, usar 2 pares de variables de control pero resetearlas como te indico más arriba.
Y te olvidas de resetearlas a las 02:00, que no entiendo por qué lo has ideado así y, para ser sincero, no le veo sentido.
Saludos
PD: Por favor corrige el código como ya te han solicitado
Hola, gracias por responder.
Disculpas por no poner el boceto entre (</>) leeré con mas detenimiento las reglas.
Ok entiendo el error aprecio mucho la ayuda.
Hola, gracias por responder.
La idea de resetearlo a las 2 era para que la rutina continúe diariamente.
Entiendo el error, lo intentare como me indicas, aprecio mucho la ayuda, saludos.
En #4 no te expliqué el por qué de setear/resetear las variables de control de esa forma.
Ubiquémonos en momento de inicio del loop inmediatamente luego de haberse ejecutado el setup() e imaginemos que trabajamos con un solo relé para facilitar la explicación.
El programa solo debería esperar eventos de encendido del relé porque no tiene sentido un evento de apagado todavía ya que el relé está apagado por defecto.
Entonces la variable de control de encendido, según como has planteado tu lógica, debe ser verdadera y la de control de apagado debe ser falsa.
En otras palabras, ¿Espera el encendido? Si. ¿Espera el apagado? No, ya está apagado.
Una vez detectado el horario de encendido, pones en falso la variable de control de encendido, para que éste no se repita hasta que previamente se haya apagado, y entonces pones en verdadera la variable de control de apagado para habilitar la espera de este segundo evento.
Otra vez, ¿Espera el encendido? No, ya está encendido. ¿Espera el apagado? Si.
Cuando ocurre el apagado, pones su variable de control en falso (porque ese relé ya se apagó) y pones la variable de control de encendido en verdadero para habilitar la espera de delnuevo encendido.
Ahora, como al principio, ¿Espera el encendido? Si. ¿Espera el apagado? No, ya se apagó.
Lo mismo para el resto de los relés con sus respectivas variables de control.
Espero sirva la explicación (si acaso te hiciera falta ).