Bonjour,
Est-il possible de simplifier ce code, il fonctionne plutôt bien, mais comme je débute, il n'est pas du tout optimiser. Il est pour 1 relai et je dois le modifier pour 3 relais, à part le copier/coller, je ne vois pas trop de solution plus élégante.
Merci par avance pour votre aide.
// 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);
}
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() {
DateTime now = rtc.now();
Serial.println();
DateTime H_EnCours(2000, 01, 01, now.hour(), now.minute(), now.second()); //Heure actuelle
DateTime H_Ref(2000, 01, 01, 0, 52, 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_Start00 = (R1_H_ReglerStart + R1_Duree);
unsigned long R1_Start01 = (R1_Start00 + R1_Interval + R1_Duree);
unsigned long R1_Start02 = (R1_Start01 + R1_Interval + R1_Duree);
unsigned long R1_Start03 = (R1_Start02 + R1_Interval + R1_Duree);
unsigned long R1_Start04 = (R1_Start03 + R1_Interval + R1_Duree);
unsigned long R1_Start05 = (R1_Start04 + R1_Interval + R1_Duree);
unsigned long R1_Start06 = (R1_Start05 + R1_Interval + R1_Duree);
unsigned long R1_Start07 = (R1_Start06 + R1_Interval + R1_Duree);
unsigned long R1_Start08 = (R1_Start07 + R1_Interval + R1_Duree);
unsigned long R1_Start09 = (R1_Start08 + R1_Interval + R1_Duree);
unsigned long R1_Start10 = (R1_Start09 + R1_Interval + R1_Duree);
unsigned long R1_Start11 = (R1_Start10 + R1_Interval + R1_Duree);
unsigned long R1_Start12 = (R1_Start11 + R1_Interval + R1_Duree);
if (R1_FoisJour >= 1 ) //Start 1
{ if ((H_Actuelle >= R1_H_ReglerStart) && (H_Actuelle < R1_Start00)) digitalWrite (R1_Relai, LOW);
if ((H_Actuelle >= R1_Start00) && (H_Actuelle < R1_Start01)) digitalWrite (R1_Relai, HIGH);
}
if (R1_FoisJour >= 2 ) //Start 2
{ if ((H_Actuelle >= R1_Start01) && (H_Actuelle < (R1_Start01 + R1_Duree))) digitalWrite (R1_Relai, LOW);
if ((H_Actuelle >= (R1_Start01 + R1_Duree)) && (H_Actuelle < R1_Start02)) digitalWrite (R1_Relai, HIGH);
}
if (R1_FoisJour >= 3 ) //Start 3
{ if ((H_Actuelle >= R1_Start02) && (H_Actuelle < (R1_Start02 + R1_Duree))) digitalWrite (R1_Relai, LOW);
if ((H_Actuelle >= (R1_Start02 + R1_Duree)) && (H_Actuelle < R1_Start03)) digitalWrite (R1_Relai, HIGH);
}
if (R1_FoisJour >= 4 ) //Start 4
{ if ((H_Actuelle >= R1_Start03) && (H_Actuelle < (R1_Start03 + R1_Duree))) digitalWrite (R1_Relai, LOW);
if ((H_Actuelle >= (R1_Start03 + R1_Duree)) && (H_Actuelle < R1_Start04)) digitalWrite (R1_Relai, HIGH);
}
if (R1_FoisJour >= 5 ) //Start 5
{ if ((H_Actuelle >= R1_Start04) && (H_Actuelle < (R1_Start04 + R1_Duree))) digitalWrite (R1_Relai, LOW);
if ((H_Actuelle >= (R1_Start04 + R1_Duree)) && (H_Actuelle < R1_Start05)) digitalWrite (R1_Relai, HIGH);
}
if (R1_FoisJour >= 6 ) //Start 6
{ if ((H_Actuelle >= R1_Start05) && (H_Actuelle < (R1_Start05 + R1_Duree))) digitalWrite (R1_Relai, LOW);
if ((H_Actuelle >= (R1_Start05 + R1_Duree)) && (H_Actuelle < R1_Start06)) digitalWrite (R1_Relai, HIGH);
}
if (R1_FoisJour >= 7 ) //Start 7
{ if ((H_Actuelle >= R1_Start06) && (H_Actuelle < (R1_Start06 + R1_Duree))) digitalWrite (R1_Relai, LOW);
if ((H_Actuelle >= (R1_Start06 + R1_Duree)) && (H_Actuelle < R1_Start07)) digitalWrite (R1_Relai, HIGH);
}
if (R1_FoisJour >= 8 ) //Start 8
{ if ((H_Actuelle >= R1_Start07) && (H_Actuelle < (R1_Start07 + R1_Duree))) digitalWrite (R1_Relai, LOW);
if ((H_Actuelle >= (R1_Start07 + R1_Duree)) && (H_Actuelle < R1_Start08)) digitalWrite (R1_Relai, HIGH);
}
if (R1_FoisJour >= 9 ) //Start 9
{ if ((H_Actuelle >= R1_Start08) && (H_Actuelle < (R1_Start08 + R1_Duree))) digitalWrite (R1_Relai, LOW);
if ((H_Actuelle >= (R1_Start08 + R1_Duree)) && (H_Actuelle < R1_Start09)) digitalWrite (R1_Relai, HIGH);
}
if (R1_FoisJour >= 10 ) //Start 10
{ if ((H_Actuelle >= R1_Start09) && (H_Actuelle < (R1_Start09 + R1_Duree))) digitalWrite (R1_Relai, LOW);
if ((H_Actuelle >= (R1_Start09 + R1_Duree)) && (H_Actuelle < R1_Start10)) digitalWrite (R1_Relai, HIGH);
}
if (R1_FoisJour >= 11 ) //Start 11
{ if ((H_Actuelle >= R1_Start10) && (H_Actuelle < (R1_Start10 + R1_Duree))) digitalWrite (R1_Relai, LOW);
if ((H_Actuelle >= (R1_Start10 + R1_Duree)) && (H_Actuelle < R1_Start11)) digitalWrite (R1_Relai, HIGH);
}
if (R1_FoisJour >= 12 ) //Start 12
{ if ((H_Actuelle >= R1_Start11) && (H_Actuelle < (R1_Start11 + R1_Duree))) digitalWrite (R1_Relai, LOW);
if (H_Actuelle >= (R1_Start11 + R1_Duree)) digitalWrite (R1_Relai, HIGH);
}
delay(1000); // Mettre la valeur a 1000 pour 1 seconde
}