[Conseil] Validité d'un bout de code utilisant TimeSpan

Bonjour à toutes et à tous,

Je suis en train de développer un système de distribution automatisée pour aquarium.
Dans ce cadre là, je dois pouvoir faire des distributions de produit à des moments donné, et reprogrammer cet événement X temps après (ça dépend de la fréquence).

J'ai codé ceci :

if (((now.year()) == tab_programmation[i].annee) && ((now.month()) == tab_programmation[i].mois) && ((now.day()) == tab_programmation[i].jour) && ((now.hour()) == tab_programmation[i].heure) && ((now.minute()) == tab_programmation[i].minutes)) //test pour savoir si un des événements programmé doit se faire
      {
        //Si c'est le cas        
        //Action moteur tab_programmation[i].action A FAIRE
        //Enregistrement de l'action dans le log A FAIRE
        
        //Puis modification de la date
        DateTime futur;
        int rep = tab_prod[tab_moteur[tab_programmation[i].action].numero_produit].repetition_distribution;  //1 pour jour, 2 pour semaine, 3 pour mois
        switch (rep)
          {
            case 1: //journalier
              futur = (now + TimeSpan (0,1,0,0));  //on ajoute un jour
              tab_programmation[i].annee = futur.year();
              tab_programmation[i].mois = futur.month();
              tab_programmation[i].jour = futur.day();
              tab_programmation[i].heure = futur.hour();
              tab_programmation[i].minutes = futur.minute();
              break;
            case 2: //hebdo
              futur = (now + TimeSpan (0,7,0,0));  //on ajoute une semaine
              tab_programmation[i].annee = futur.year();
              tab_programmation[i].mois = futur.month();
              tab_programmation[i].jour = futur.day();
              tab_programmation[i].heure = futur.hour();
              tab_programmation[i].minutes = futur.minute();
              break;
            case 3:  //mensuel
              futur = (now + TimeSpan (1,0,0,0));  //on ajoute 1 mois
              tab_programmation[i].annee = futur.year();
              tab_programmation[i].mois = futur.month();
              tab_programmation[i].jour = futur.day();
              tab_programmation[i].heure = futur.hour();
              tab_programmation[i].minutes = futur.minute();
              break;
            /*default: 
              // if nothing else matches, do the default
              // default is optional
              break;*/
          } 
      }

Mon tablea tab_programmation contient 4 éléments de type structure :

/*Structure Programmation des dates*/
struct PROG_PROD {
  int annee;
  int mois;
  int jour;
  int heure;
  int minutes;
  int action; //sur quel moteur agir
};

et initialisé comme ceci :

  ST_PROG_PROD tab_programmation[4] = {{21, 11, 2016, 8, 55, 1}, {21, 11, 2016, 19, 0, 3}, {26, 11, 2016, 8, 50, 0}, {26, 11, 2016, 8, 40, 2}};

Si j'ai bien codé, l'action qui devrait se dérouler le 21/11/2016 à 8h55 devrait se répéter le 22/11/2016 à 8h55 et donc mon tableau devrait ressembler à ça :

  ST_PROG_PROD tab_programmation[4] = {{22, 11, 2016, 8, 55, 1}, {21, 11, 2016, 19, 0, 3}, {26, 11, 2016, 8, 50, 0}, {26, 11, 2016, 8, 40, 2}};

Vous pensez que ça fait ce que je veux ?
Merci de votre aide, j'utilise TimeSpan pour la première fois et les structures DateTime aussi...
Je précise que le code compile...
Pas encore reçu mon matériel pour tester...

Bonjour,

Tu ne dis pas quelle librairie utilises.
Les paramètres de TimeSpan sont jour, heure, minute, secondes, donc 1 jour -> TimeSpan(1,0,0,0)
Plutôt que de tester annee, jour, ... tu ferais mieux d'utiliser le temps en secondes (par exemple DateTime::unixtime() si tu utilises RTCLib).
Ca simplifie fortement la manipulation des dates/heures (comparaisons, calculs, mémorisation...)
Ce qui donne quelque chose comme ça:

  static DateTime futur = RTC.now();
  DateTime now = RTC.now();
  if (now.unixtime() >= futur.unixtime())
  {
    // traitement des moteurs ...
    switch (rep)
    {
      case 1: //journalier
        futur = futur+TimeSpan(1, 0, 0, 0); //on ajoute un jour
        break;

        // .... autres case
    }
  }

Merci de m'avoir répondu !!!
J'uitlise RTCLib (adafruit) et Timelib.
Donc à priori (mis à part mon erreur dans les paramètres), ça devrait fonctionner comme j'ai fait ?
Je vais regarder ce que tu me propose...