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
}