programmateur horaire avec interval

là vous ne pouvez plus compter le nombre de secondes depuis minuit, puisque rajouter 8 ou 16h à une certaine heure va vous emmener parfois au lendemain...

Il faut donc gérer cela un peu de la façon actuelle, avec un nombre représentant l'heure, mais il faut que ce nombre soit capable de représenter n'importe quel jour... pour cela il y a ce que l'on appelle l'unix time, c'est à dire le nombre de secondes écoulées depuis le 1er janvier 1970 00:00:00 UTC ou si vous voulez restez lié à votre RTC, elles compte souvent depuis le 1/1/2000

Votre RTClib (si vous utilisez cette librairie (adafruit/RTClib) ?) vous permette d'obtenir l'heure courante en unixtime: vous verrez que la classe DateTime contient deux méthodes secondstime() et unixtime()

    // 32-bit times as seconds since 1/1/2000
    long secondstime() const;   
    // 32-bit times as seconds since 1/1/1970
    uint32_t unixtime(void) const;

qui sont faites pour cela.

Il y a aussi une classe TimeSpan pour représenter une durée (obtenue par soustraction de deux DateTime ou par création directe et qui vous donne aussi une fonction totalseconds()

Représentez vos valeurs de départ sous forme de DateTime, vous en retirez l'unixtime par exemple et ensuite vous pouvez faire des additions avec le totalseconds() de votre intervalle pour trouver le prochain créneau horaire

ou alors, travaillez directement avec des objets DateTime et TimeSpan pour gérer le temps