#include <DHT.h>
#include <RTClib.h>
RTC_DS3231 rtc;
//structure qui contiendra la date complete a analyser
struct dateTest{
String date;
int time;
};
//structure pour connaitre l'etat de la pompe
struct relayPompe{
bool etat;
String datetst;
int timetst;
};
//constante contenant les parametres de référence pour l'activation de la pompe
const int TEMP_FONCTIONNEMENT_POMPE = 300;
const int TEMP_MINIMUM_ENTRE_DEUX_ACTIVATION = 3600;
const float TEMP_REFERENCE = 12;
String lastStart = "0";
DateTime now;
float temperatureEnCelsius;
//declaration des structures
struct relayPompe rp = {false,"",0};
struct dateTest dt_test = {"",0};
//déclaration des constantes
#define brocheDeBranchementDHT 2
#define typeDeDHT DHT22
//instanciation des librairies
DHT dht(brocheDeBranchementDHT, typeDeDHT);
//permet d'afficher les nombres sur deux chiffresstruct
String Vers2Chiffres(byte nombre) {
String resultat = "";
if(nombre < 10)
resultat = "0";
return resultat += String(nombre,DEC);
}
struct dateTest formateDate(DateTime date){
struct dateTest recuperation_date_formatee = {String(date.year(),DEC) + Vers2Chiffres(date.month()) + Vers2Chiffres(date.day()),(date.hour()*3600)+(date.minute()*60)+date.second()};
return recuperation_date_formatee;
}
void testTemp(){
temperatureEnCelsius = dht.readTemperature();
now = rtc.now();
int change = 0 ;
if(temperatureEnCelsius <= TEMP_REFERENCE){
dt_test = formateDate(now);
if(dt_test.date.toInt() == rp.datetst.toInt()){
if( rp.timetst - dt_test.time > TEMP_MINIMUM_ENTRE_DEUX_ACTIVATION ){
change = 1;
}
}
else change = 1;
}
if(change){
rp.etat = true;
rp.datetst = dt_test.date;
rp.timetst = dt_test.time;
}
}
void setup() {
dht.begin();
rtc.begin();
DateTime dt = DateTime(__DATE__, __TIME__);
rtc.adjust(dt);
}
void loop() {
if(rp.etat == false){
testTemp();
}
else {
if(dt_test.time - rp.timetst >= TEMP_FONCTIONNEMENT_POMPE){
rp.etat = false;
}
}