Compteur de jours + module RTC

Salut à tous,

Je bloque sur la création d'un compteur de jours,
Je me suis lancé dans la fabriquation d'un systeme d'arrosage automatique, je récupere l'heure avec un module RTC (librairie RTC.lib).

Je souhaite déclencher l'arrosage tous les 3 jours, hors je ne sais pas comment compter les jours...
Ca doit etre tout con mais je bloque :astonished:

Merci,

bonjour,
pourquoi ne pas partir sur les jours?
dimanche, mercredi, etc...
0-1-2-3-4-5-6 de mémoire
dimanche début de semaine ==> 0

Bonjour

La manière académique de traiter les calculs de date est de raisonner sur un simple nombre entier, qui représente le nombre de jours écoulés depuis une référence fixe, soit le 1er janvier 2000 pour un RTC.

Ce nombre peut être calculé à partir de la date jour+mois+année par exemple avec la fonction ci-dessous :

uint32_t jours(uint8_t annee, uint8_t mois, uint8_t jour) //Attention année sur 2 chiffres uniquement (sans siècle)
{
  //calcul nb jours écoulés depuis le 01/01/2000
  uint32_t nbjours = (365UL * annee) + ((annee+3)>>2) + jour - 1;
  switch (mois)
  {
    case  2 : nbjours +=  31; break;
    case  3 : nbjours +=  59; break;
    case  4 : nbjours +=  90; break;
    case  5 : nbjours += 120; break;
    case  6 : nbjours += 151; break;
    case  7 : nbjours += 181; break;
    case  8 : nbjours += 212; break;
    case  9 : nbjours += 243; break;
    case 10 : nbjours += 273; break;
    case 11 : nbjours += 304; break;
    case 12 : nbjours += 334;
  }
  if ((mois > 2) && (annee&3 == 0)) nbjours++; //le 29/02 est passé
  return nbjours;
}

A priori tu n'as pas besoin de la fonction qui fait le calcul inverse, mais ça existe aussi.

Un truc du style :

 uint32_t nbjours = jours(RTC.year() - 2000, RTC.month(), RTC.day());
if (nbjours >= nbjours_prec + 3)
{
  nbjours_prec = nbjours;
  arroser();
}