Le code est le suivant (parce que pas facile de le lire en PJ depuis un mobile)
(j'ai enlevé votre nom et eMail car les robot scan le web et vous allez vous faire spammer...)
//GESTION AUTOMATISEE DU JARDIN
//Copyright 2019.05 par Yann xxx
//xxxx@libertysurf.fr
#include <SoftwareSerial.h>
#include <Wire.h>
#include <ds3231.h>
#include "DHT.h"
#define DHTPIN 8 //Pin DI8 pour lecture capteur DHT22
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
SoftwareSerial CanalSerieBT(12, 11); // RX, TX
//Declaration variables pour comm BT et calculs
int BluetoothData;
int hum_pc;
int hum_brute;
float batt_brute;
float batt_volts;
float batt_pc;
float Air_hum;
float Air_temp;
int H2OB;
int H2OH;
int tag_RAZ_pompe;
//Declaration variables pour entrées sorties digitales
int pompe = 6;
int capt_H2OB = 7;
int capt_H2OH = 9;
int LED_verte = 2;
int LED_rouge = 3;
struct ts t; //Necessaire pour lecture de l'heure RTC
void setup() {
CanalSerieBT.begin(9600);
pinMode(pompe, OUTPUT); //Pin DO6 pour allumage pompe
pinMode(A1, INPUT); //Pin AI1 pour capteur humidité sol
pinMode(A2, INPUT); //Pin AI2 pour capteur niveau de batterie
pinMode(capt_H2OB, INPUT); //Pin DI7 pour capteur niveau bas H2O
pinMode(capt_H2OH, INPUT); //Pin DI9 pour capteur niveau haut H2O
pinMode(LED_verte, OUTPUT); //Pin DO2 pour allumage LED Verte
pinMode(LED_rouge, OUTPUT); //Pin DO3 pour allumage LED Rouge
Wire.begin();
DS3231_init(DS3231_INTCN);
dht.begin();
}
void loop() {
//Gestion allumage pompe sur commande BT ( remplacer ledpin par DO pompe )
if (CanalSerieBT.available()) {
BluetoothData = CanalSerieBT.read();
if (BluetoothData == '1') {
digitalWrite(pompe, HIGH);
}
if (BluetoothData == '0') {
digitalWrite(pompe, LOW);
}
}
//Gestion affichage heure sur canal BT
DS3231_get(&t);
CanalSerieBT.print("Heure : ");
CanalSerieBT.print(t.hour);
CanalSerieBT.print(":");
CanalSerieBT.print(t.min);
CanalSerieBT.println("");
//Gestion affichage humidité sol sur canal BT
hum_brute = analogRead(1);
hum_pc = map(hum_brute, 0, 702, 0, 100);
CanalSerieBT.print("Humidite Sol : ");
CanalSerieBT.print(hum_pc);
CanalSerieBT.print(" % ");
//Gestion affichage niveau batterie sur canal BT
batt_brute = analogRead(A2);
batt_volts = map(batt_brute, 0, 1023, 0, 14150);
batt_pc = map(batt_volts, 0, 14150, 0, 100);
CanalSerieBT.print("Voltage Batterie = ");
CanalSerieBT.print(batt_volts);
CanalSerieBT.println(" mV");
CanalSerieBT.print("% Batterie = ");
CanalSerieBT.print(batt_pc);
CanalSerieBT.println(" %");
CanalSerieBT.println(".");
//Gestion affichage humidité air et temperature air sur canal BT
// Verification si lecture OK sur module DHT22
if (isnan(Air_hum) || isnan(Air_temp)) {
CanalSerieBT.println("Failed to read from DHT sensor!");
return;
}
Air_hum = dht.readHumidity();
Air_temp = dht.readTemperature();
CanalSerieBT.print("Temperature Air : ");
CanalSerieBT.print(Air_temp);
CanalSerieBT.println(" *C ");
CanalSerieBT.print("Humidite Air : ");
CanalSerieBT.print(Air_hum);
CanalSerieBT.println(" % ");
//Gestion affichage etat des niveaux d'eau sur canal BT
H2OB = digitalRead(capt_H2OB);
H2OH = digitalRead(capt_H2OH);
CanalSerieBT.print("Etat capteur Eau Basse : ");
CanalSerieBT.print(H2OB);
CanalSerieBT.println(" ");
CanalSerieBT.print("Etat capteur Eau Haute : ");
CanalSerieBT.print(H2OH);
CanalSerieBT.println(" ");
//Gestion allumage LED verte et rouge si H2O NOK
if (digitalRead (capt_H2OH) == HIGH) {
digitalWrite(LED_verte, HIGH);
}
else {
digitalWrite(LED_verte, LOW);
}
if (digitalRead (capt_H2OB) == LOW) {
digitalWrite(LED_rouge, HIGH);
}
else {
digitalWrite(LED_rouge, LOW);
}
//Gestion allumage pompe sur programmation fixe
//-- gestion programmation par BT à venir --
if (digitalRead (capt_H2OB) == HIGH && hum_pc < 80 && Air_temp < 26 && Air_hum < 85 && batt_pc > 75 && t.hour > 21 && t.hour < 23 && tag_RAZ_pompe == 0) {
digitalWrite(pompe, HIGH);
delay(60000);
digitalWrite(pompe, LOW);
tag_RAZ_pompe = 1;
}
if (tag_RAZ_pompe == 1 && t.hour > 23 && t.hour < 21) {
tag_RAZ_pompe = 0;
}
delay(50);
}
Je vais faire une recherche pour le timer de 60s, cependant, je ne vois toujours pas pourquoi ma condition n'est pas remplie alors que tous les paramètres sont au vert.
d'accord avec @hbachetti, si vraiment toutes les conditions étaient remplies, vous rentreriez dans le if. Si vous n'entrez pas c'est qu'une condition est fausse (Ou alors que votre relai ne marche pas - avez vous essayé de mettre une LED avec sa résistance de limitation de courant à la place du relai de la pompe ? est-ce que vous êtes en direct sur la pompe d'ailleurs ou vous avez bien un relai qui vous protège ?)
Notez cependant que ce test sera toujours faux:
if (tag_RAZ_pompe == 1 && t.hour > 23 && t.hour < 21) {
tag_RAZ_pompe = 0;
}
l'heure ne peut pas être à la fois plus grande que 23 et plus petite que 21. Donc vous ne remettez jamais tag_RAZ_pompe à 0 (vrai ou faux seraient mieux et faites en un booléen)
le blocage d'une minute veut aussi dire que vous ne testez plus la réception des commandes BT pendant ce temps là...