Una ayuda u orientacion en comparacion fechas y horas

buenas tardes, llevo algo asi como un mes a ratos perdidos intentando sacar un codigo, pero cada vez doy mas palos de ciego.

Necesito comparar 2 fechas, una de inicio y otra de parada y dentro de esas 2 fechas que arduino lea la hora de encendido y la otra de apagado y cada dia arranque 5 minutos antes y termine 5 minutos despues, hasta completar el dia de la segunda fecha las horas maximas y ya se quede asi.

Un ejemplo: necesito que una bomba de agua empiece a funcionar el dia 15 de mayo a las 14.00h y termine a las 16.00h. el dia 16 arranque a las 13.55h y pare a las 16.05h y que cada dia posterior empiece a arrancar 5 minutos antes y pare 5 minutos despues, eso cada dia haciendolo antes que el anterior; hasta el 15 junio que arrancara a las 11.30h y parara a las 18.30 para quedarse asi un mes mas.

la otra opcion que he pensado, seria poniendo el dia que tiene que tener las horas maximas con el horario de arranque y parada, poniendo unos dias que pueden ser 30, calcule el dia y hora que tendria que empezar y parar a funcionar la bomba de agua.

He realizado varios codigo y en todos he patinado, ya empiezo a quemarme. un saludo

Hola, parece estar muy fácil de hacer con un nano, un rtc, un display I2C, encoder y el relay.
Yo comenzaría por crear una tabla con el inicio y final de cada día expresado en minutos.
Por ejemplo para comenzar a las 14Hs sería 14x60= 840 y finalizar a las 16hs, 16x60=960.
El próximo día serán 5 minutos antes y 5 minutos después.

Entonces, para siete días la tabla sería así:
[const int tablariego[][2] PROGMEM = { {840,960},{835,965},{830,970},{825,975},{820,980},{815,985},{810,990} };
Si todo el proceso lleva 60 días debes completar la tabla.
Necesitas una variable que podríamos llamar int MinutoActual; que se actualiza con el reloj que a las 00:00 vale (0) y a las 23:59 vale (1439).

Para saber en que día del proceso estas solo debes contar los días entre la fecha 15 de mayo y fecha actual y asignarlo a la variable que podría llamarse diaciclo.

Para saber si el relay del la bomba debe estar activo tendrías que hacer algo así

Si (diaciclo es igual o mayor a cero y diaciclo en igual o menor a sesenta) { 
 Si(  MinutoActual  es igual o mayor a tablariego[diaciclo][0] y  MinutoActual es igual o menor a 
     tablariego[diaciclo][0] ) {
     Enciendo el relay:
}
delocontrario {
     Apago el relay;
}
}

Consultar el reloj una vez por minuto es mas que suficiente.

Ahora te cuento que me gusta pensar un poco mas allá del código de arduino para que éste funcione bien, y para ello hay que saber detalladamente de que va este proyecto para pensar en sus fallos. Por ejemplo: Si la bomba se pone las lenta o la presión del agua es mayor se podría superar el nivel de un tanque y eso hay que pensarlo, por lo tanto, si esperar al menos de mi una ayuda debes contar en donde o en que se aplicaría este código.

Saludos
Agradezo que no me editen el post porque mi intención no es poner código que se pueda copiar y pegar, sino hacer un razonamiento de cómo podría hacerse el sistema que el usuario solicita.

Hola, podrias calcular la ecuacion de la recta para cada mes ya sea para 'inicio' y 'fin' despues de todo tienes datos para hacerlo.

Luego con un RTC que te ubique en el mes y el dia puedes decirle al programa:

si es mayo entonces

inicio(hora)=------(en funcion del dia)

fin(hora)=------(en funcion del dia)

si es junio entonces

Saludos.

Buenas noches.

attiny128, por componentes de Arduino no hay problema.
El proyecto a realizar es subir agua con una bomba a una balsa y desde ella se repartirá a varias cepas, según van pasando los días se irá abriendo más llaves de paso y por eso se necesita que la bomba trabaje más tiempo. Todo el tema de circuitos eléctricos y los posibles transitorios por falta u exceso pregón de la bomba está ya calculado y probado con éxito. Se trabaja a través de sistema solar a 12v.

He comentado con 2 amigos metidos en el cauce lo quejas escrito y en un principio sería más cómodo poner la fecha final, la hora encendido y la otra de apagado, y crear el código de tal manera que se pueda varía los dias, y en lugarde 60dias hacerlo en 65 u 89. Cada vez estoy más liado y no sé qué hacer.....

Saludos

No entiendo que es una "balsa" pero si tienes que distribuir agua lo lógico es un depósito o tanque de reserva con capacidad suficiente, entonces la bomba debe trabajar con el límite superior e inferior.

Esperaba que dijeras que quieres automatizar el cultivo de champiñones y explicaras como es el proceso
desde la siembra hasta la recolección para que se te pueda orientar en lenguaje de cpodigo.

Yo abandono aquí porque si tu no sabes lo que quieres hacer, menos lo voy a saber yo con la poca información que das.

Buena suerte.