programmateur horaire avec interval

Voici, j'en suis là, ça a l'air de fonctionner.

Maintenant je souhaiterai faire mon interval et déclencher suivant la durée de l'interval sur 24h.
Ex: P1_nbrDeclenchement = 3 sur 24h cela fait un 1er déclenchement à l'heure de réf, un 2e 8h après et un 3e 8h après.

Donc pour l'interval je pense faire:
unsigned long P1_interval = 86400 / P1_nbrDeclenchement ;

Et là je sèche :confused:
Pourriez vous m'aiguiller?
Merci par 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: P1_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


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

RTC_DS1307 rtc;

const int P1_Relai  = 48;
const int P2_Relai  = 50;
const int P3_Relai  = 52;

unsigned long heure_ActuelleEnSeconde;

//Start de référence pour le calcul des déclenchements suivant
//il est souvent pratique de représenter un moment de la journée par le nombre de secondes écoulées depuis minuit.
// par exemple pour 11h20 et 30 secondes, on écrirait: unsigned long t = 11*3600ul + 20*60 + 30; // le ul pour quel le calcul se fasse bien en unsigned long
unsigned long P1_RefStart = 19 * 3600ul + 10 * 60 + 0; //18h  32m  30sec.  le ul pour quel le calcul se fasse bien en unsigned long
unsigned long P2_RefStart = 11 * 3600ul + 15 * 60 + 20; //11h  15m  20sec.  le ul pour quel le calcul se fasse bien en unsigned long
unsigned long P3_RefStart = 15 * 3600ul + 25 * 60 + 35; //15h  15m  35sec.  le ul pour quel le calcul se fasse bien en unsigned long

// Durée du déclenchement en secondes.
unsigned long P1_Duree = 10;
unsigned long P2_Duree = 15;
unsigned long P3_Duree = 20;

// Arrêt de référence calculé.
unsigned long P1_RefStop = P1_RefStart + P1_Duree;
unsigned long P2_RefStop = P2_RefStart + P2_Duree;
unsigned long P3_RefStop = P3_RefStart + P3_Duree;

// nbr_declenchement_Px  sera modifier suivant les besoins.
// ex: si nbr_declenchement_Px = 3, 1 déclenchement à Px_RefHeure puis le 2e et le 3e déclenchement après interval de x minutes (là aussi modifiable)
uint16_t P1_nbrDeclenchement = 2;              //valeur modifiable suivant les besoins
uint16_t P2_nbrDeclenchement = 3;              //valeur modifiable suivant les besoins
uint16_t P3_nbrDeclenchement = 4;              //valeur modifiable suivant les besoins

// interval en secondes entre 2 déclenchements sur la base de 24h.
unsigned long P1_interval = 86400 / P1_nbrDeclenchement ;
unsigned long P2_interval = 86400 / P2_nbrDeclenchement ;
unsigned long P3_interval = 86400 / P3_nbrDeclenchement ;

//Verif si relai actif Oui/Non
boolean P1_Actif;
boolean P2_Actif;
boolean P3_Actif;

//---------------------------------------- SETUP
void setup() {
  //Wire.begin();
  Serial.begin(9600);
  Serial.println("Programme Test declenchement de relai");

  if (! rtc.begin()) {
    Serial.println("RTC non présent");
    while (1);
  }

  if (! rtc.isrunning()) {
    Serial.println("RTC n'est pas actif!");
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));// Reglage du RTC à la date & heure de la compilation du sketch
  }

  initialisation();
}

//---------------------------------------- LOOP
void loop() {
  heureActuelleEnseconde();
  P1_Start();
  delay(1000);
}

//---------------------------------------- Initialisation
void initialisation()
{
  pinMode(P1_Relai, OUTPUT);
  pinMode(P2_Relai, OUTPUT);
  pinMode(P3_Relai, OUTPUT);
  digitalWrite (P1_Relai, HIGH);
  digitalWrite (P2_Relai, HIGH);
  digitalWrite (P3_Relai, HIGH);

  P1_Actif = false;               //Variable pour voir l'état du relai
  P2_Actif = false;
  P3_Actif = false;
}

//---------------------------------------- Heure actuelle en Seconde depuis Minuit
void heureActuelleEnseconde()
{
  DateTime now = rtc.now();
  Serial.println("");
  Serial.print("Heure  actuelle: ");
  Serial.print(now.hour());
  Serial.print(":");
  Serial.print(now.minute());
  Serial.print(":");
  Serial.println(now.second());

  // on mets l'heure actuelle en nbr de secondes depuis minuit
  heure_ActuelleEnSeconde = (now.hour() * 3600ul) + (now.minute() * 60) + (now.second());
  Serial.print("En secondes: ");
  Serial.print(heure_ActuelleEnSeconde);
  Serial.println("");
}

//---------------------------------------- P1 Déclenchement
void P1_Start()
{
  Serial.print("P1  Start à: ");
  Serial.println(P1_RefStart);
  Serial.print("P1    Durée: ");
  Serial.println(P1_Duree);
  Serial.print("P1   Stop à: ");
  Serial.println(P1_RefStop);
  Serial.print("P1    Actif: ");
  Serial.println(P1_Actif);

  if ((heure_ActuelleEnSeconde >= P1_RefStart) && (heure_ActuelleEnSeconde < P1_RefStop))
  {
    P1_Actif = true;
    Serial.print("dbg_001");
    digitalWrite (P1_Relai, LOW);
  }

  if (heure_ActuelleEnSeconde >= P1_RefStop)
  {
    P1_Actif = false;
    Serial.print("dbg_002");
    digitalWrite (P1_Relai, HIGH);
  }

}