// Définition des broches et variables
const int H1_PIN = A0; //Entrée Taux d'humidité
const int L1_PIN = 2; //Entrée lumière WC
const int L2_PIN = 4; //Entrée lumière Salle de Bain
unsigned long previousMillis1 = 0; // Stocke le temps du dernier déclenchement
const long heureMax = 4294967294; // heure de la remise à zéro - 1 milliseconde
const int TL_PIN = 6; //Temporisation lumière aluumée plus de 30 secondes
const long intervalTL = 30000; // Intervalle de la tempo en millisecondes (30 secondes)
const int T1_PIN = 7; //Temporisation VMC 1 5 minutes
const long intervalT1 = 300000; // Intervalle de la tempo en millisecondes (300 secondes)
const int T2_PIN = 8; //Temporisation VMC 2 30 minutes
const long intervalT2 = 1800000; // Intervalle de la tempo en millisecondes (1800 secondes)
const int V1_PIN = 9; //Sortie VMC 1 : vitesse réduite
const int V2_PIN = 10; //Sortie VMC 2 : vitesse importante
const float seuilH1 = 7.5; // Seuil H1 en volts
const float seuilH2 = 6.5; // Seuil H2 en volts
int humid = 0; // Variable de contrôle
bool bascL1L2 = LOW; // bascule mémorisant le front montant L1+L2
unsigned long heureBascTL = 0; // heure de bascule de la tempo TL
unsigned long heureBascTLL1 = 0; // heure de bascule de la tempo T1
unsigned long heureBascTLL2 = 0; // heure de bascule de la tempo T2
void setup() {
pinMode(H1_PIN, INPUT); //Affectation des Entrées / Sorties
pinMode(L1_PIN, INPUT);
pinMode(L2_PIN, INPUT);
pinMode(TL_PIN, OUTPUT); //permet le débug
pinMode(T1_PIN, OUTPUT); //permet le débug
pinMode(T2_PIN, OUTPUT); //permet le débug
pinMode(V1_PIN, OUTPUT);
pinMode(V2_PIN, OUTPUT);
Serial.begin(9600); // Initialisation de la communication série pour le débogage
}
void loop() {
// Lecture des entrées
float analogValue = analogRead(H1_PIN) * (10.0 / 1023.0);
bool L1 = digitalRead(L1_PIN);
bool L2 = digitalRead(L2_PIN);
// lecture du temps actuel
unsigned long heureMillis = millis();
// TL : Temporisation de 30 secondes avec remise à zéro possible
// TL passe à 1 après 30 secondes d'allumage, repasse à 0 dès la fin de l'allumage
if ((L1 || L2) && !bascL1L2) { // Utilisation de && pour vérifier L1 ou L2 et l'état de bascL1L2
bascL1L2 = 1;
unsigned long heureBascTL = millis(); // Mémorisation de l'heure à la transition
if (heureBascTL > heureMax-intervalTL) {
heureBascTL = 0 ;
// On force le passage à zéro 30 secondes avant pour éviter la tempo de 50 jours
}
}
if (!(L1 || L2)) {
// Dès que L1 et L2 sont éteintes on remet à zéro la bascule et la tempo
bascL1L2 = 0;
digitalWrite(TL_PIN, 0);
}
if (bascL1L2 && (millis() - heureBascTL >= intervalTL)) {
digitalWrite(TL_PIN, 1);
// Activation de TL_PIN après au moins 30 secondes d'allumage de L1 ou L2
}
// T1 : Temporisation de 5 minutes sans remise à zéro
if (digitalRead(TL_PIN) && L1) { //Armement de la temporisation
digitalWrite(T1_PIN, 1);
heureBascTLL1 = millis();
if (heureBascTLL1 > heureMax-intervalT1) {
heureBascTLL1 = 0 ;
// On force le passage à zéro 5 minutes avant pour éviter la tempo de 50 jours
}
}
if (digitalRead(T1_PIN) && (millis() - heureBascTLL1 >= intervalT1)) {
digitalWrite(T1_PIN, 0); // Remise à zéro de la temporisation après 5 minutes
}
// T2 : Temporisation de 30 minutes sans remise à zéro
if (digitalRead(TL_PIN) && L2) { //Armement de la temporisation
digitalWrite(T2_PIN, 1);
heureBascTLL2 = millis();
if (heureBascTLL2 > heureMax-intervalT2) {
heureBascTLL2 = 0 ;
// On force le passage à zéro 30 minutes avant pour éviter la tempo de 50 jours
}
}
if (digitalRead(T2_PIN) && (millis() - heureBascTLL2 >= intervalT2)) {
digitalWrite(T2_PIN, 0); // Remise à zéro de la temporisation après 5 minutes
}
// Contrôle du seuil H1
if (analogValue > seuilH1) {
humid = 1;
}
// Contrôle du seuil H2
if (analogValue < seuilH2) {
humid = 0;
}
// V1 : Sortie vitesse réduite de la VMC
digitalWrite(V1_PIN, (digitalRead(T1_PIN) || digitalRead(T2_PIN)));
// V2 : Sortie vitesse forte de la VMC uniquement si l'humidité est forte
digitalWrite(V2_PIN, humid);
// Affichage des valeurs sur le moniteur série (à des fins de débogage)
Serial.print("Valeur A0 : ");
Serial.print(analogValue);
Serial.print(" Humid :");
Serial.print(humid);
//Serial.print(" SeuilH1 : ");
//Serial.print(seuilH1);
//Serial.print(" SeuilH2 : ");
//Serial.println(seuilH2);
Serial.print(" WC : ");
Serial.print(L1);
Serial.print(" SdB : ");
Serial.println(L2);
Serial.print("Heure Bascule : ");
Serial.print(heureBascTLL1);
Serial.print(" bascL1L2 : ");
Serial.print(bascL1L2);
Serial.print(" V2PIN : ");
Serial.println(V2_PIN);
// Pause pour éviter une lecture trop rapide
delay(1000);
}