programmateur horaire avec interval

hello
j'ai joué avec ton code mais sans le tester

//  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: R1_Relai 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;
char daysOfTheWeek[7][12] = {"Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"};

const int R1_Relai  = 48;
const int R2_Relai  = 50;
const int R3_Relai  = 52;

unsigned long R1_H_Start    = 11;                             //Heure de déclenchements du relai
unsigned long R2_H_Start    = 13;
unsigned long R3_H_Start    = 15;

unsigned long R1_FoisJour   = 2;                              //Nbr de déclenchement par 24h
unsigned long R1_Interval   = 86400 / (R1_FoisJour * 2000);   //Supprimer le * XXXX qui sert aux tests //Interval de déclenchement par 24h(86400s)
unsigned long R1_Duree      = 16;                             //Durée d'activation en secondes


//---------------------------------------- Initialisation des pompes Terminer Reglage
void initialiserRelais()
{
  pinMode(R1_Relai, OUTPUT);
  pinMode(R2_Relai, OUTPUT);
  pinMode(R3_Relai, OUTPUT);
  digitalWrite (R1_Relai, HIGH);
  digitalWrite (R2_Relai, HIGH);
  digitalWrite (R3_Relai, HIGH);
}

//---------------------------------------- SETUP
void setup() 
{
  Serial.begin(9600);
  if (! rtc.begin()) 
  {
    Serial.println("Couldn't find RTC");
    while (1);
  }
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    Serial.println("PROGRAMME DECLENCHEMENT DE RELAI");
    initialiserRelais();
    DateTime now = rtc.now(); 
}

//---------------------------------------- LOOP
void loop() {
 DateTime now = rtc.now();
 Serial.print(now.hour());Serial.print(" ");Serial.print(now.minute());Serial.print(" ");Serial.print(now.second());Serial.print(" ");

  DateTime H_EnCours(2000, 01, 01, now.hour(), now.minute(), now.second());        //Heure actuelle
  DateTime H_Ref(2000, 01, 01, 0, 27, 0);                                          //Heure de Référence pour les calculs 00:00:00 //Après les tests, remplacer les minutes par 0

  unsigned long J_Actuel          = now.dayOfTheWeek();
  unsigned long H_Actuelle        = H_EnCours.unixtime();
  unsigned long H_RefCalcul       = H_Ref.unixtime();
  unsigned long R1_H_ReglerStart  = H_RefCalcul + (R1_H_Start * 3600);
  unsigned long R1_H_StartDans    = R1_H_ReglerStart - H_Actuelle ;
  unsigned long R1_Start[13];
   R1_Start[00] = (R1_H_ReglerStart + R1_Duree);
   R1_Start[01] = (R1_Start[00] + R1_Interval + R1_Duree);
   R1_Start[02] = (R1_Start[01] + R1_Interval + R1_Duree);
   R1_Start[03] = (R1_Start[02] + R1_Interval + R1_Duree);
   R1_Start[04] = (R1_Start[03] + R1_Interval + R1_Duree);
   R1_Start[05] = (R1_Start[04] + R1_Interval + R1_Duree);
   R1_Start[06] = (R1_Start[05] + R1_Interval + R1_Duree);
   R1_Start[07] = (R1_Start[06] + R1_Interval + R1_Duree);
   R1_Start[ 8] = (R1_Start[07] + R1_Interval + R1_Duree);
   R1_Start[ 9] = (R1_Start[ 8] + R1_Interval + R1_Duree);
   R1_Start[10] = (R1_Start[ 9] + R1_Interval + R1_Duree);
   R1_Start[11] = (R1_Start[10] + R1_Interval + R1_Duree);
   R1_Start[12] = (R1_Start[11] + R1_Interval + R1_Duree);
//*********************************************************  debut traitement pour relais 1  *********************************************************
 if (R1_FoisJour >= 1 )        //Start 1
  {     
    if ((H_Actuelle >= R1_H_ReglerStart) && (H_Actuelle < R1_Start[00]))         {digitalWrite (R1_Relai, LOW) ;Serial.println(F("relai 1 OFF"));} 
    if ((H_Actuelle >= R1_Start[00]) && (H_Actuelle < R1_Start[01]))             {digitalWrite (R1_Relai, HIGH);Serial.println(F("relai 1 ON "));}
  }
 for(byte F=2;F<12;F++)
 {
  if (R1_FoisJour >= F )        //Start 1 à 11
  {      
 if ((H_Actuelle >= R1_Start[F-1]) && (H_Actuelle < (R1_Start[F-1] + R1_Duree)))  {digitalWrite (R1_Relai, LOW) ;Serial.println(F("relai 1 OFF"));}    
 if ((H_Actuelle >= (R1_Start[F-1] + R1_Duree)) && (H_Actuelle < R1_Start[F]))    {digitalWrite (R1_Relai, HIGH);Serial.println(F("relai 1 ON "));}
  }
}
  if (R1_FoisJour >= 12 )       //Start 12
  { Serial.println("12 eme");
    if ((H_Actuelle >= R1_Start[11]) && (H_Actuelle < (R1_Start[11] + R1_Duree))) {digitalWrite (R1_Relai, LOW) ;Serial.println(F("relai 1 OFF"));}
    if  (H_Actuelle >= (R1_Start[11] + R1_Duree))                                 {digitalWrite (R1_Relai, HIGH);Serial.println(F("relai 1 ON "));}
  }
//***********************************************************  fin traitement pour relais 1 *********************************************************
    delay(1000);                                                                 // Mettre la valeur a 1000 pour 1 seconde
}