De nuevo si has leído tanto habrás encontrado respuestas mías donde hablo de una librería que lo hace 10 puntos pero también se puede hacer manualmente digamos.
La libreria se llama TimeAlarms, creo que es lo que necesitas.
El otrro método es similar a lo que tu estabas haciendo.
Convertir el tiempo en segundos y hacer consultas en función de eso. La librería hace lo mismo pero agrega un manejo mas elaborado
Si conviertes la hora, min, seg actuales a segundos tienes siempre un número
Si conviertes tu horario de arranque-parada solo debes consultar si estas o no dentro de ese lapso de tiempo.
Es mas fácil que hacerlo con tantas consultas como veo en tu código, pero tu código esta bien.
Crea una función que devuelva un valor en segundos del dia o mes, empecemos algo diario y luego expandamos a meses.
long conviertoTiempo(int hora, int min, int seg) {
long tmp =hora*3600+min*60+seg;
return tmp;
}
Ahora en tus consultas solo estableces la hora de consulta digamos 8:00:00 arranca y 10:30:30 apaga
long arranca = conviertoTiempo(8,0,0);
long apaga = conviertoTiempo(10,30,30);
Acá se visualiza que usar una structura que arrastre todo lo relevante sería muy util. Algo como esto
structure _tiempos {
long start;
long stop;
bool status;
}
En las deficiones globales.
// defines asi
_tiempos tiempoControl;
En el setup puedes definir esto
// con estos pasos asigno los valores a mi estructura
tiempoControl.start = conviertoTiempo(8,0,0);
tiempoControl.stop = conviertoTiempo(10,30,30);
tiempoControl.status = false; // indico que no se ha usado.
y en el loop tus acciones
long ahora = conviertoTiempo(now.hour(), now.minute(), now.second();
if ( ahora >= tiempoControl.start && !tiempoControl.status) {
// enciendes lo que corresponda
tiempoControl.status = true; // me sirve para accionarlo 1 sola vez
}
if ( ahora > =tiempoControl.stop && tiempoControl.status) {
// apagas lo que corresponda
tiempoControl.status = false; // me sirve para apagarlo 1 sola vez
}
EDITO: Estoy observando que TimeAlarms no contempla el uso de meses asi que en principio no te servirá.
Queda ampliar la idea que te he dado si es que resuslta de tu agrado..
Viendo la librería observo que eran intención del programador continuar y crear estas opciones
// new time based alarms should be added just before dtLastAlarmType
typedef enum {
dtNotAllocated,
dtTimer,
dtExplicitAlarm,
dtDailyAlarm,
dtWeeklyAlarm,
dtLastAlarmType
} dtAlarmPeriod_t ; // in future: dtBiweekly, dtMonthly, dtAnnual
Pero se aburrió, hace 4 años que no la modifica o mejora.
Sería un trabajo interesante para que nuestro foro completara.