potager connecté // gestion arrosage et lumiere avec ephemeris et RTC

Bonjour, comprenez vous toutes les fonctions que vous avez en début de code? (bcd_to_decimal(), decimal_to_bcd(), read_current_datetime(), ...)

--> si vous ne les comprenez pas, autant prendre une librairie qui va vous simplifier grandement la vie et votre code pour démarrer...

avec une DS1307 ou DS3231 vous pouvez utiliser la librairie RTClib

Ensuite pour tester si le moment courant est entre deux instants bien définis de la journée, il suffit de calculer le nombre de secondes depuis minuit et de comparer

voici à quoi pourrait ressembler un code qui teste si on est entre 8h15 et 19h22 chaque jour et au moment de la bascule, effectuer une action

#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 rtc;

// on définit l'heure de début et de fin en comptant le nombre de secondes depuis minuit
const uint32_t debut =  8 * 3600ul + 15 * 60ul + 0 ; // 08:15:00
const uint32_t fin   = 19 * 3600ul + 22 * 60ul + 0 ; // 19:22:00

bool systememActif = false;

void setup()
{
  Serial.begin(115200);
  if (! rtc.begin()) {
    Serial.println(F("Horloge absente"));
    while (true); // on s'arrête
  }

  if (! rtc.isrunning()) {
    Serial.println(F("Initialiser la RTC !!"));
    // pour mettre la date 1 fois, décommenter une des lignes en fonction de ce que vous voulez
    // chargez et faite tourner le code puis commentez à nouveau la ligner et rechargez le code
    // rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // pour mettre à la date de dernière compilation
    // rtc.adjust(DateTime(2019, 3, 24, 10, 0, 0)); // pour mettre à 24 mars 2109 à 10h du matin
  }
}

void loop()
{
  DateTime maintenant = rtc.now();
  // ------------------------------------------------------------------
  // la classe DateTime vous permet d'interroger le moment présent par:
  //    ** année dans maintenant.year()
  //    ** mois dans maintenant.month()
  //    ** jour dans maintenant.day()
  //    ** heure dans maintenant.hour()
  //    ** minute dans maintenant.minute()
  //    ** seconde dans maintenant.second()
  // ------------------------------------------------------------------

  uint32_t moment = maintenant.hour() * 3600ul + maintenant.minute() * 60ul + maintenant.second() ; // nombre de secondes depuis minuit


  if ((moment >= debut) && (moment <= fin)) {  // est-on entre 8h15 et 19h22 ?
    if (!systememActif) {    // si oui, vient-on d'activer le système ?
      Serial.println(F("Allumage"));
      // >>>>>>> ici allumer ce que vous voulez <<<<<<<<<<
      systememActif = true; // on mémorise que l'on vient d'allumer le système
    }
  } else {
    if (systememActif) {
      Serial.println(F("Extinction"));
      // >>>>>>> ici éteindre  ce que vous voulez <<<<<<<<<<
      systememActif = false; // on mémorise que l'on vient d'éteindre le système
    }
  }

  // ici on peut faire autre chose
  delay(1000); // par exemple attendre une seconde avant de ré-interroger l'horloge 
}