programmateur horaire avec interval

Bonjour,
Je vais essayer de me diriger vers la gestion du temps grâce à unixtime.
Je suis arrivé au code ci-dessous, qui fonctionne, mais me parait loin d'être propre.
Pouvez-vous s'il vous plaît, m'orienter pour poursuivre mon programme et surtout me conseiller pour améliorer ce début de code afin que je parte sur de bonnes bases.
Merci d'avance.

//  le but final est de pouvoir déclencher 3 relais à des heures programmés et suivant un nbr de déclenchements choisi et une durée programmée.
//ex: R1Relai sera déclenché 3 fois pendant 20 secondes à un interval de 3 heures. Le premier déclenchement aura lieu à 11h00
//ex: P2_Relai sera déclenché 2 fois pendant 3 minutes à un interval de 2h20. Le premier déclenchement aura lieu à 07h00
//ex: P3_Relai sera déclenché 6 fois pendant 1 minute à un interval de 1 heure. Le premier déclenchement aura lieu à 15h00
//voici ou je souhaiterai arriver.

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

RTC_DS1307 rtc;

const int R1Relai  = 48;
const int R2Relai  = 50;
const int R3Relai  = 52;

long R1HeureStart    = 17;                  //Heure de déclenchements du relai
long R2HeureStart    = 13;
long R3HeureStart    = 15;

long R1interval;                            //Interval de déclenchement
long R1FoisParJour   = 1;                   //Nbr de déclenchement par 24h
long R1Duree         = 10;                  //Durée d'activation en secondes

//---------------------------------------- Initialisation des pompes Terminer Reglage
void initialiserRelais()
{
  pinMode(R1Relai, OUTPUT);
  pinMode(R2Relai, OUTPUT);
  pinMode(R3Relai, OUTPUT);
  digitalWrite (R1Relai, HIGH);
  digitalWrite (R2Relai, HIGH);
  digitalWrite (R3Relai, HIGH);
}

//---------------------------------------- SETUP
void setup() {
  Serial.begin(9600);
  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }

  if (! rtc.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    Serial.println("PROGRAMME DECLENCHEMENT DE RELAI");
  }

  initialiserRelais();
}

//---------------------------------------- LOOP
void loop() {
  delay(600);                                                                         //Doit être à 1000 pour 1 seconde, lorsque les Serial.print seront supprimés
  DateTime now = rtc.now();
  Serial.println();

  DateTime heureActuelle(2000, 01, 01, now.hour(), now.minute(), now.second());       //Heure actuelle
  Serial.print("1-heureActuelle: ");
  Serial.print(heureActuelle.hour()) && Serial.print(':') && Serial.print(heureActuelle.minute()) && Serial.print(':') && Serial.print (heureActuelle.second());
  long heureActuelle2 = (heureActuelle.unixtime());
  Serial.print(" soit: ") && Serial.print(heureActuelle2) && Serial.println("s.");    //en secondes UnixTime

  Serial.print("2-heureRefBase : 00:00:00 ");
  DateTime HeureRef(2000, 01, 01, 0, 0, 0);                                          //Heure de Référence pour les calculs 00:00:00 //Après les tests, remplacer les minutes par 0
  long heureRefBase = (HeureRef.unixtime());
  Serial.print(" soit: ") && Serial.print(heureRefBase) && Serial.println("s.");      //en secondes UnixTime

  long R1HeureReglerStart =  heureRefBase + (R1HeureStart * 3600);
  Serial.print("3-R1HeureReglerStart: ");
  Serial.print(R1HeureReglerStart / 3600) && Serial.print("h, ") && Serial.print(R1HeureReglerStart / 60) && Serial.print("m, ") && Serial.print(R1HeureReglerStart) && Serial.println("s.");

  long R1HeureStartDans = R1HeureReglerStart - heureActuelle2 ;
  Serial.print( "4-R1HeureStartDans: ");
  Serial.print(R1HeureStartDans / 3600) && Serial.print("h, ") && Serial.print(R1HeureStartDans / 60) && Serial.print("m, ") && Serial.print(R1HeureStartDans) && Serial.println("s.");

  R1interval = 86400 / R1FoisParJour;
  Serial.print(R1FoisParJour) && Serial.print(" déclenchement par 24h, avec un interval de: ") && Serial.print(R1interval / 3600) && Serial.print("h, ");
  Serial.print(R1interval / 60) && Serial.print("m, ") && Serial.print(R1interval) && Serial.println("s.");

  switch (R1FoisParJour)
  {
    case 1:     // 1 fois par jour
      if ((heureActuelle2 >= R1HeureReglerStart) && (heureActuelle2 < (R1HeureReglerStart + R1Duree)))
      {
        digitalWrite (R1Relai, LOW);            //START du relai
      }
      if (heureActuelle2 >= (R1HeureReglerStart + R1Duree))
      {
        digitalWrite (R1Relai, HIGH);           //STOP du relai après la durée R1Relai
      }
      break;

    case 2:     // 2 fois par jour
      {
        // 1er déclenchement à l'heure R1HeureReglerStart
        // 2eme déclenchement après l'interval R1interval
      }
      break;
  
 /*   //  ------------------------------------------ ETC
    case 3:     // 3 fois par jour
      {
        // 1er déclenchement à l'heure R1HeureReglerStart
        // 2eme déclenchement après l'interval R1interval
        // 3eme déclenchement après l'interval R1interval
      }
      break;
    case 4:     // 3 fois par jour
      {
        // 1er déclenchement à l'heure R1HeureReglerStart
        // 2eme déclenchement après l'interval R1interval
        // 3eme déclenchement après l'interval R1interval
        // 4eme déclenchement après l'interval R1interval
      }
      break;*/
  }
  Serial.println("************************************************************");
}