/* Programme "Arrosage_Micro_DoubleScroll V3_While_loop" Manuel d'utilisation : 1/ Un potentiomètre permet de régler le temps OFF entre 0h à 48 Heures entre 2 pompages 2/ Une second potentiomètre règle la durée d'arrosage entre 0 à 15 secondes 3/ Le pompage est continu dans le Potentiomètre Delai On est totalement tounée dans le sens horaire 4/ Le pompage est arrêté qd le Potentiomètre Delai On est totalement tounée dans le sens anti-horaire 5/ Un capteur qui détecte le niveau bas (5V à l'état haut d'eau et courant coupé à état bas d'eau) afin de protéger la pompe 6/ "THE BEER-WARE LICENSE": As long as you retain this notice you can do whatever you want with this stuff. If we meet some day, and you think this stuff is worth it, you can buy me a beer in return Adrien Blot-Saby 18/03/2020 */ // Pin out commande du relai int PinP1=6; // Pin lecture potentimètre OFF int ScrollPinOFF=A2; // Pin lecture potentimètre ON int ScrollPinON=A3; // Detecteur niveau int PinNiv=A1; // Variable ou est stocké l'état du niveau bool EtatNiveau = true; // constante lecture potentionmètre Off int ScrollOFF=0; // constante lecture potentionmètre ON int ScrollON=0; // LED indication statut, éteint : ON en continu, clignote : en foncitonnement normal Allumé : pompage OFF int PinLED=2; //Constante d'heure calculée à partir de conversion et de la valeur lue du potentionmètre double heure=0; // Constante où est sotckée le temps millis() long Time1=0; // Temps en MS durant lequel la pompe1 reste Allumée long DelaiON1=1000; // Temps en MS durant lequel la pompe est OFF en fonction du potentimètre long DelaiOFF1=1000; // Constantes de temps Max et Min pour le calcul de la fréquence double TimeOffMax=48; int TimeOffMin=1; // Constante de temps Max et Min pour le calcul du volume double TimeOnMax=15; int TimeOnMin=1; // Constante de sensibilité des chgement potentiomètre int s = 10; void setup() { Serial.begin(9600); // Configuration des Pins de commande de pompage pinMode(PinP1, OUTPUT); pinMode(PinLED, OUTPUT); // Configuration boutons de réglage pinMode(ScrollPinOFF,INPUT); pinMode(ScrollPinON,INPUT); } // Boucle principale void loop() { Affichage(); // Coprs du programme de changement de statut du relai qui contrôle la pompe à base de fonctions if while (EtatNiveau==true) { // Fonctionnement Normal si le potentionmètre n'est pas en butée, la LED clignote // Boucle de temps en fonctionnement ON while (Time1<DelaiON1 && ScrollON<1000 && ScrollON>50 && EtatNiveau==true) { digitalWrite(PinP1,LOW);Serial.print("Etat ON"); Serial.print("\n"); digitalWrite(PinLED,HIGH); delay(1000); // LED alumée et delai de 1000 ms Time1=Time1+1000; // ajout de 1000 ms Affichage(); // si le poteniomètre de volume ou fréquence est changé (-/+ 7), alors on sort de la conditions While pour une reconfiguration de la boucle if( analogRead(ScrollPinON)>ScrollON+s || analogRead(ScrollPinON)<ScrollON-s) {break;} } Time1=0; // Lecture du potentiomètre BOuton ScrollOFF ScrollOFF=analogRead(ScrollPinOFF); // Lecture du potentiomètre du bouton Glissière (ou Scroll) ON ScrollON=analogRead(ScrollPinON); // Boucle de temps en fonctionnement OFF while (Time1<DelaiOFF1 && ScrollON<1000 && ScrollON>50 && EtatNiveau==true) { digitalWrite(PinP1,HIGH); Serial.print("POMPAGE OFF"); Serial.print("\n"); // Affichage(); digitalWrite(PinLED,LOW); delay(500); digitalWrite(PinLED,HIGH); delay(500); // LED clignote et delai de 1000 ms Time1=Time1+1000; // ajout de 1000 ms // si le poteniomètre de volume ou fréquence est changé (-/+ 10), alors on sort de la conditions While pour une reconfiguration de la boucle if( analogRead(ScrollPinON)>ScrollON+s || analogRead(ScrollPinON)<ScrollON-s ) {break;} } Time1=0; // Lecture du potentiomètre BOuton ScrollOFF ScrollOFF=analogRead(ScrollPinOFF); // Lecture du potentiomètre du bouton Glissière (ou Scroll) ON ScrollON=analogRead(ScrollPinON); // Pompe arrêtée si le potentionmètre linéaire est poussé à fond, la LED est éteinte // CAS POMPAGE EN CONTINUE // Bouton DELAI_ON TOURNE A FOND A GAUCHE if (ScrollON>1000 && EtatNiveau==true ) // si le bouton ON est tournée à fond ou celui OFF au minimum alors le pompage est continu { digitalWrite(PinP1,LOW); Serial.print("POMPAGE CONTINU"); Serial.print("\n"); // Affichage(); digitalWrite(PinLED,HIGH); delay(1000); } // CAS POMPAGE ARRETE // Bouton DELAI_ON TOURNE A FOND A DROITE if (ScrollON<50 && EtatNiveau==true) // si le bouton ON est tournée est minimum ou celui OFF au max alors le pompage est Arreté { digitalWrite(PinP1,HIGH);Serial.print("POMPAGE ARRETE, assez d'eau"); Serial.print("\n"); Affichage(); digitalWrite(PinLED,LOW); delay(1000); } } // Seconde boucle principale en cas de détection de niveau bas de l'eau while (EtatNiveau==false) { Serial.print("Pas assez d'eau!");Serial.print("\t"); digitalWrite(PinP1,HIGH);Serial.print("POMPAGE ARRETE, éteindre le régulateur, remplir et rallumer"); Serial.print("\n"); Affichage(); delay(10000); // attente de 10 s } } // Fin du programme // fonction qui permet de calculer et afficher dans le moniteur série les valeurs de temps OFF et ON void Affichage() { // Lecture du potentiomètre BOuton ScrollOFF ScrollOFF=analogRead(ScrollPinOFF); // Lecture du potentiomètre du bouton Glissière (ou Scroll) ON ScrollON=analogRead(ScrollPinON); // Lecture niveau d'eau. if (analogRead(PinNiv)<1020) {EtatNiveau=false;} // Conversion de la valeur numérique (ScrollOFF) en valeur de temps (heure) OFF comprise en un temps Miniumu et Maximum heure=(-(TimeOffMax-TimeOffMin)/1023*ScrollOFF+TimeOffMax); // Conversion du temps d'heure en MS METTRE 3600 (à 1 si test en seconde) DelaiOFF1=heure*1000*3600; Serial.print("DelaiOFF1(h):");Serial.print(DelaiOFF1/3600000.0); Serial.print("\n"); // Lecture du potentiomètre du bouton Glissière (ou Scroll) ON ScrollON=analogRead(ScrollPinON); DelaiON1=(TimeOnMax/1023*ScrollON-TimeOnMin)*1000.0; // en MS Serial.print("DelaiON(s):");Serial.print(DelaiON1/1000);Serial.print("\n"); Serial.print("Time1 (s):");Serial.print(Time1/1000);Serial.print("\n"); Serial.print("Etat niveau:");Serial.print(EtatNiveau);Serial.print("\n"); Serial.print("Etat niveau:");Serial.print(analogRead(PinNiv));Serial.print("\n"); Serial.print("\n");Serial.print("\n"); }