Bonjour, depuis quelques année j'utilise le programme de Julien Monterrin " Programmateur Horaire Multivoies" que j'ai un peu modifié.
Ce programmateur horaire commande une pompe et des électrovannes pour arroser mon jardin, voie 1 la serre, voies 2-3-4-5 différents arroseurs et une position manuelle qui me permet d'enclencher la pompe en dehors des plages horaires si besoin.
Le problème est que si il pleut assez bien le système se met en marche, donc trop d'eau sur le jardin
J'aimerais modifier le programme et lui adjoindre un programme de détection d'humidité pour un fonctionnement plus optimal, c-à-d, que lorsqu'il pleut, la voie 1 (Serre) soit active mais pas les autres voies.
J'ai essayé en vain d'y intercaller un sketch de détection d'humidité mais ça ne fonctionne pas , soit c'est pas un bon sketch, soit je m'y prends mal.
Quel programme intercaller et surtour comment ?
Merci de m'avoir lu
Voici le code
[code]
// ARDUINO MEGA 6 Voies
#include <LiquidCrystal.h>
#include <Wire.h>
#include <RTClib.h>
RTC_DS3231 RTC;
byte i;
// Init Shield LCD
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
//Variables mise à jour Horloge
byte TabMaH[6] = {17, 1, 1, 0, 0, 0};
byte MaH; int BpH; byte DrapH; byte SelH; byte ColH; byte MaxH; byte MinH; byte CurH; byte CurligH;
// Variables mise à jour de la plage horaire
int Bp; int MaJ; int Flag; int Vo; int Lig; int Sel; ; int Col; int Val; int Max; int Cur; int CurLig;
// Table Evenements chaque ligne correspond a une voie. Sur la ligne, on trouve H depart, M Depart, H Arret, M Arret..
int TabEvt [6][4] =
{
{20, 0, 20, 10},
{20, 11, 20, 16},
{20, 17, 20, 22},
{20, 23, 20, 28},
{20, 29, 20, 34},
{20, 35, 20, 40}
};
byte PinSorties[6] = {23, 25, 27, 29, 31, 33}; // byte PinSorties[6] = {17,16,11,12,2,3}; pour 6 voies
void setup() {
Wire.begin();
RTC.begin();
lcd.begin(16, 2);
pinMode(2, INPUT); //defini D2 comme entrée switch, entre D2 et GND + R entre D2 et +5v
pinMode(3, OUTPUT); //defini D3 comme sortie EV Manuel
// RTC.adjust(DateTime(__DATE__, __TIME__));
// Initialisation D23,D25,D27,D29,D31,D33 en sorties ----- Initialisation A2,A3,2,3,11,12 en sorties pour 6 voies
for ( i = 0; i < 6; i++ ) {
pinMode(PinSorties[i], OUTPUT);
digitalWrite (PinSorties[i], LOW);
} // pour 6 voiesfor ( i = 0; i <6; i++ ) {pinMode(PinSorties[i], OUTPUT); digitalWrite (PinSorties[i], LOW);}
Serial.begin(9600);
// Saisie MaJ Date,Heure ?
lcd.setCursor(0, 0); lcd.print("Maj Date,Heure ?");
lcd.setCursor(0, 1); lcd.print("Sel: O Right: N");
MaH = 1;
// Mise à jour Date Heure
while (MaH == 1) {
BpH = analogRead (0); delay(100); lcd.setCursor(0, 0);
//Sortie mise à jour
if (BpH < 50) {
if (DrapH == 2) {
RTC.adjust(DateTime(TabMaH[0], TabMaH[1], TabMaH[2], TabMaH[3], TabMaH[4], TabMaH[5]));
}
lcd.clear(); lcd.setCursor(0, 0); lcd.print("Fin saisie"); delay(2000); lcd.clear();
MaH = 0;
}// Fin muise à jour
// Incrémentation
else if (BpH < 200) {
if (DrapH == 2 && TabMaH[ColH] < MaxH) {
TabMaH[ColH] ++;
lcd.setCursor (CurH, CurligH); if (TabMaH[ColH] < 10) {
lcd.print (0);
} lcd.print(TabMaH[ColH]);
}
delay(200);
}// Fin incrémentation
// Décrémentation
else if (BpH < 380) {
if (DrapH == 2 && TabMaH[ColH] > MinH) {
TabMaH[ColH] --;
lcd.setCursor (CurH, CurligH); if (TabMaH[ColH] < 10) {
lcd.print (0);
} lcd.print(TabMaH[ColH]);
}
delay(200);
}// Fin décrémentation
//Choix valeur à mettre à jour
else if (BpH < 600) {
if (DrapH > 0) {
DrapH = 2;
}
if (SelH < 6) {
SelH++ ;
delay(200);
ColH = SelH - 1;
}
if (SelH == 6) {
SelH = 0;
}
if (ColH == 0) {
lcd.setCursor(7, 0);
lcd.print ("**");
MaxH = 50;
MinH = 10;
CurH = 7;
CurligH = 0;
}
else if (ColH != 0) {
lcd.setCursor(7, 0);
if (TabMaH[0] < 10) {
lcd.print (0);
} lcd.print (TabMaH[0]);
}
if (ColH == 1) {
lcd.setCursor(10, 0);
lcd.print ("**");
MaxH = 12;
MinH = 1;
CurH = 10;
CurligH = 0;
}
else if (ColH != 1) {
lcd.setCursor(10, 0);
if (TabMaH[1] < 10) {
lcd.print (0);
} lcd.print (TabMaH[1]);
}
if (ColH == 2) {
lcd.setCursor(13, 0);
lcd.print ("**");
MaxH = 31;
MinH = 1;
CurH = 13;
CurligH = 0;
}
else if (ColH != 2) {
lcd.setCursor(13, 0);
if (TabMaH[2] < 10) {
lcd.print (0);
} lcd.print (TabMaH[2]);
}
if (ColH == 3) {
lcd.setCursor(7, 1);
lcd.print ("**");
MaxH = 23;
MinH = 0;
CurH = 7;
CurligH = 1;
}
else if (ColH != 3) {
lcd.setCursor(7, 1);
if (TabMaH[3] < 10) {
lcd.print (0);
} lcd.print (TabMaH[3]);
}
if (ColH == 4) {
lcd.setCursor(10, 1);
lcd.print ("**");
MaxH = 59;
MinH = 0;
CurH = 10;
CurligH = 1;
}
else if (ColH != 4) {
lcd.setCursor(10, 1);
if (TabMaH[4] < 10) {
lcd.print (0);
} lcd.print (TabMaH[4]);
}
if (ColH == 5) {
lcd.setCursor(13, 1);
lcd.print ("**");
MaxH = 59;
MinH = 0;
CurH = 13;
CurligH = 1;
}
else if (ColH != 5) {
lcd.setCursor(13, 1);
if (TabMaH[5] < 10) {
lcd.print (0);
} lcd.print (TabMaH[5]);
}
}//Fin choix valeuyr
//Affichage ecran saisie
else if (BpH < 800) {
lcd.clear(); lcd.setCursor(0, 0); lcd.print (" Date: / / "); lcd.setCursor(0, 1); lcd.print ("Heure: : : ");
lcd.setCursor (7, 0); if (TabMaH[0] < 10) {
lcd.print (0);
} lcd.print(TabMaH[0]);
lcd.setCursor (10, 0); if (TabMaH[1] < 10) {
lcd.print (0);
} lcd.print(TabMaH[1]);
lcd.setCursor (13, 0); if (TabMaH[2] < 10) {
lcd.print (0);
} lcd.print(TabMaH[2]);
lcd.setCursor (7, 1); if (TabMaH[3] < 10) {
lcd.print (0);
} lcd.print(TabMaH[3]);
lcd.setCursor (10, 1); if (TabMaH[4] < 10) {
lcd.print (0);
} lcd.print(TabMaH[4]);
lcd.setCursor (13, 1); if (TabMaH[6] < 10) {
lcd.print (0);
} lcd.print(TabMaH[5]);
DrapH = 1;
}// Fin Affichage
}//Fin While Maj Heure
// Saisie Plages Horaires
lcd.setCursor(0, 0); lcd.print("Maj Horaires ?"); lcd.setCursor(0, 1); lcd.print("Sel: O Right: N");
MaJ = 1;
// Mise à jour plages horaires
while (MaJ == 1) {
Bp = analogRead (0);
delay(100);
lcd.setCursor(0, 0);
//Sortie mise à jour
if (Bp < 50) {
lcd.clear(); lcd.setCursor(0, 0); lcd.print("Fin saisie"); delay(2000); lcd.clear(); MaJ = 0;
Serial.println(Bp);
} // Fin Sortie
// Incrémentation
else if (Bp < 200) {
Serial.println(Bp);
if (Flag == 2) {
if (Val < Max) {
Val++; TabEvt[Lig][Col] = Val; delay(200); lcd.setCursor(Cur, CurLig);
if (Val < 10) {
lcd.setCursor(Cur, CurLig);
lcd.print ("0");
}
lcd.print (Val);
}
}
}// Fin Incrémentaio
// Dérémentation
else if (Bp < 380) {
Serial.println(Bp);
if (Flag == 2) {
if (Val > 0) {
Val--; TabEvt[Lig][Col] = Val; delay(200); lcd.setCursor(Cur, CurLig);
if (Val < 10) {
lcd.setCursor(Cur, CurLig);
lcd.print ("0");
}
lcd.print (Val);
}
}
}// Fin Décvrémentation
// Affichage Plage horaire, sélection Colonne
else if (Bp < 600) {
Serial.println(Bp);
if ( Flag > 0 ) {
Flag = 2;
if (Sel < 6) {
Sel++;
delay(200);
Col = Sel - 1;
}
if (Col == 0) {
lcd.setCursor(9, 0);
lcd.print ("**");
Val = TabEvt[Lig][Col];
Max = 23;
Cur = 9;
CurLig = 0;
}
else if (Col != 0) {
lcd.setCursor(9, 0);
if (TabEvt[Lig][0] < 10) {
lcd.print (0);
} lcd.print (TabEvt[Lig][0]);
}
if (Col == 1) {
lcd.setCursor(12, 0);
lcd.print ("**");
Val = TabEvt[Lig][Col];
Max = 59;
Cur = 12;
CurLig = 0;
}
else if (Col != 1) {
lcd.setCursor(12, 0);
if ( TabEvt[Lig][1] < 10) {
lcd.print (0);
} lcd.print (TabEvt[Lig][1]);
}
if (Col == 2) {
lcd.setCursor(9, 1);
lcd.print ("**");
Val = TabEvt[Lig][Col];
Max = 23;
Cur = 9;
CurLig = 1;
}
else if (Col != 2) {
lcd.setCursor(9, 1);
if ( TabEvt[Lig][2] < 10) {
lcd.print (0);
} lcd.print (TabEvt[Lig][2]);
}
if (Col == 3) {
lcd.setCursor(12, 1);
lcd.print ("**");
Val = TabEvt[Lig][Col];
Max = 59;
Cur = 12;
CurLig = 1;
}
else if (Col != 3) {
lcd.setCursor(12, 1);
if ( TabEvt[Lig][3] < 10) {
lcd.print (0);
} lcd.print (TabEvt[Lig][3]);
}
if (Sel == 6) {
Sel = 0;
}
}
}// Fin Plages Horaires
// Afficage Voies,sélection ligne
else if (Bp < 800) {
Serial.println(Bp);
lcd.clear();
//Max = 23; Cur = 9; CurLig = 0;
Flag = 1;
if (Vo < 6) {
Vo++;
delay(300);
Lig = Vo - 1;
}
lcd.setCursor(0, 0); lcd.print ("V: On: : "); lcd.setCursor(0, 1); lcd.print (" Off: : ");
lcd.setCursor(2, 0); lcd.print (Vo);
lcd.setCursor(9, 0); if ( TabEvt[Lig][0] < 10) {
lcd.print (0);
} lcd.print (TabEvt[Lig][0]);
lcd.setCursor(12, 0); if ( TabEvt[Lig][1] < 10) {
lcd.print (0);
} lcd.print (TabEvt[Lig][1]);
lcd.setCursor(9, 1); if ( TabEvt[Lig][2] < 10) {
lcd.print (0);
} lcd.print (TabEvt[Lig][2]);
lcd.setCursor(12, 1); if ( TabEvt[Lig][3] < 10) {
lcd.print (0);
} lcd.print (TabEvt[Lig][3]);
if (Vo == 6) {
Vo = 0;
}
Sel = 0;
}// Fin Affichage
}// Fin While Maj Plages Horaires
}// Fin Setup
void loop() {
int lecture = digitalRead(2); //lit la valeur du swtich en D1
if (lecture == HIGH )
{
lcd.setCursor(12, 1);
lcd.print("MANUEL");
digitalWrite(3, HIGH); // allume EV manuel
}
else
{
lcd.setCursor(12, 1);
lcd.print("AUTO");
digitalWrite(3, LOW); //éteint EV manuel
}
DateTime now = RTC.now();
// Afficher l'heure sur la premiêre ligne du LCD
lcd.setCursor(0, 0);
lcd.print("Heure: ");
if (now.hour() < 10) {
lcd.print("0");
}
lcd.print(now.hour());
lcd.print(":");
if (now.minute() < 10) {
lcd.print("0");
}
lcd.print(now.minute());
//lcd.print(":");
//if (now.second() < 10) {
//lcd.print("0");
//}
//lcd.print(now.second());
// Afficher Voies actives sur la deuxième ligne du LCD
lcd.setCursor(0, 1);
lcd.print("Voie:");
// Rechercher si heure actuelle est dans dans la ou les plages horaires
for ( i = 0; i < 6; i++ ) {
if (now.hour() == TabEvt [i][0] && now.minute() == TabEvt [i][1])
{
digitalWrite (PinSorties[i], HIGH);
}
if (now.hour() == TabEvt [i][2] && now.minute() == TabEvt [i][3])
{
digitalWrite (PinSorties[i], LOW);
}
lcd.setCursor(5 + i, 1);
if (digitalRead(PinSorties[i]) == HIGH)
{
lcd.print(i + 1);
}
else {
lcd.print("-");
}
}
delay(1000);
lcd.clear();
}// Fin Loop)
[/code]