Bonjour et merci pour cette première aide qui m'a bien aiguillé.
Voilà ma petite avancée.
Je vais essayer de tenter l'histoire de l'interval entre les déclenchements.
Tous les conseils et toutes les aides sont les bienvenues. ![]()
// 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
//voici ou je souhaiterai arriver.
#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 = 14 * 3600ul + 56 * 60 + 0; //14h 56m 00sec. 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 = 20;
unsigned long P2_Duree = 30;
unsigned long P3_Duree = 40;
// 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 entre 2 déclenchements (mettre en secondes).
uint16_t P1_interval;
uint16_t P2_interval;
uint16_t P3_interval;
//---------------------------------------- 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
}
initialiserRelais();
}
//---------------------------------------- LOOP
void loop() {
heureActuelleEnseconde();
P1_Start();
}
//---------------------------------------- Initialisation des Relais
void initialiserRelais()
{
pinMode(P1_Relai, OUTPUT);
pinMode(P2_Relai, OUTPUT);
pinMode(P3_Relai, OUTPUT);
digitalWrite (P1_Relai, HIGH);
digitalWrite (P2_Relai, HIGH);
digitalWrite (P3_Relai, HIGH);
}
//---------------------------------------- Heure actuelle en Seconde depuis Minuit
void heureActuelleEnseconde()
{
DateTime now = rtc.now();
// on mets l'heure actuelle en nbr de secondes depuis minuit
heure_ActuelleEnSeconde = (now.hour() * 3600ul) + (now.minute() * 60) + (now.second());
Serial.print("Heure Actuelle en Nbr de secondes écoulées depuis Minuit: ");
Serial.println(heure_ActuelleEnSeconde);
Serial.println("");
delay(1000);
}
//---------------------------------------- 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);
if (P1_RefStart == heure_ActuelleEnSeconde)
{
digitalWrite (P1_Relai, LOW);
}
if (P1_RefStop == heure_ActuelleEnSeconde)
{
digitalWrite (P1_Relai, HIGH);
}
}