Bon, la je suis perdu
le mieux étant de vous partager l'intégralité de mon code, le voici t'elle qu'il était avant de vous demander un peu d'aide :
je sais il est loin d'être parfait, mais je suis qu'un amateur, maintenant je ne vous demande pas non plus de tout faire à ma place, mais de m'aiguiller dans ces briques que je n'arrive pas à integrer.
récapépéton : j’utilise une sonde DHT 22, un potentiomètre, un ecran LCD en I2C 16.2 .
le potentiomètre permet une consigne de 0 à 100%, lorsque l'hygrométrie relative passe au dessus de la consigne choisit, la LED s'éteint avec un retard de X secondes, et si l'humidité relative passe en dessous de la consigne, la LED s'allume avec un retard de X secondes.
le tout affiché sur l'écran, ce même écran dispose d'un retro éclairage "backlight" je ne veux pas que l'écran soit constamment allumé, mais simplement qu'il s'allume X secondes si le potentiomètre de consigne est manipulé (changement de valeur) . puis s'éteint après ces X secondes lorsque plus rien est touché.
/*projet d'hygrostat numérique avec lecture de température.
/* Différentes bibliothèques */
#include <Wire.h> //bibliothèque LCD I2C
#include<LiquidCrystal_I2C.h> //bibliothèque LCD I2C.2
#include "DHT.h" //bibliothèque capteur H et T.
#define DHTPIN 3 //sortie signal OUT sonde sur Digit 3
#define DHTTYPE DHT22 // DHT 22 (AM2302) définition du type de capteur ici un DHT22
// T de -40 à +80° et lecture RH de 0 à 100 avec +- 2% d'erreur.
DHT dht(DHTPIN, DHTTYPE); //le pin signal lié au type de sonde
// Initialisation du capteur pour un Arduino à 16mhz par défaut
LiquidCrystal_I2C lcd(0x27, 16, 2); //définition du LCD utilisé la 2 lignes 16 colonnes, 0*27 correspond a l'adresse BUS de donnée si il y à plusieurs afficheurs
int ValPotar = 0 ; //déclaration d'une variable au potentiomètre
const int PotarPin = A0; //constante Sortie signal du potar
const int ledTest = 12; //constante sortie relais commande
const int bouton = 2; // constante sortie bouton pour rétroeclairage
int etatBouton; //lecture de l'état du bouton
int etatRelai;
int bReset = 4; //constante sortie pour niveau HAUT pour le RESET
unsigned long tempsReset;//Variable pour timer
unsigned long tempoDepart = 0;
int tempoActive = 0;
int ValeurPrecedente;
unsigned long chrono;
void setup()
{
lcd.init(); // initialisation de l'afficheur
lcd.backlight (); //rétroéclairage ON
lcd.print ("Bonjour"); //message de bienvenue
lcd.setCursor (0, 1);
lcd.print (" initialisation"); // ...
delay (2000);
lcd.clear ();
lcd.print ("Bonjour");
lcd.setCursor (0, 1);
lcd.print ("des parametres...");
dht.begin(); //initialisation de la sonde
pinMode (ledTest, OUTPUT); //initialisation de la sortie
Serial.println (ledTest);
pinMode (bouton,INPUT_PULLUP); //initialisation du bouton en entrée avec RES de PULLUP
etatBouton = HIGH ; //par defaut à l'etat haut
Serial.begin(9600); //initialisation du moniteur pour débug
delay (4000);
lcd.clear (); //reset de l'écran
lcd.noBacklight (); //retroeclairage OFF
}
void loop()
{
//cette boucle permet de réinitialisé la carte toute les XX heures pour acquitter tout bug d'affichage (en milliseconde)
tempsReset = millis ();
Serial.print (".......temps en millisecondes : ");
Serial.print(tempsReset); //timer pour moniteur serie (debug)
Serial.print (".........");
if (tempsReset > 14400000) //réinit de la carte toutes les 4 heures
{
pinMode (bReset, OUTPUT); //definition du D4 en sortie
digitalWrite (bReset,HIGH ); //si la condition est respecté le D4 passe à l'état haut et le RESET est oppéré
}
else
/*temps que le delai de réinitialisation n'est pas aboutie on joue la boucle de fonctionnement normal*/
{
{
float h = dht.readHumidity(); //Lecture du taux d'humidité
float t = dht.readTemperature(); //Lecture de la température en Celcius
/*Stop le programme et renvoie un message d'erreur si le capteur ne renvoie aucune mesure*/
if (isnan(h) || isnan(t)) //test de retour du signal sonde
{
lcd.clear ();
lcd.backlight ();
lcd.setCursor (0, 0);
lcd.print ("Erreur sonde !");
lcd.setCursor (0, 1);
lcd.print (" verifier ");
delay (2000);
lcd.setCursor (0, 0);
lcd.print (" Erreur sonde !");
lcd.setCursor (0, 1);
lcd.print (" ou changer ");
delay (4000);
return;
}
float hi = dht.computeHeatIndex( h); // conversion en Celcius
ValPotar = analogRead(PotarPin); //lecture de la valeur potentiomètre
Serial.print(".........Valeur du potentiomètre : ");
Serial.println(ValPotar);
ValPotar = map(ValPotar, 0, 1024, 0, 100); //conversion de la mesure en 1 Ko en un rapport de 0 à 100%
delay (1);
/*Envoi des mesures sur l'ecran*/
lcd.setCursor(0, 0);
lcd.print (" ");
lcd.print ((int)h);
lcd.print ("RH% ");
lcd.print((int)t);
lcd.print((char)223);
lcd.print ("C");
lcd.setCursor(0,1);
lcd.print (" CONSIGNE : ");
lcd.print (ValPotar);
lcd.print ("%");
/*boucle qui vérifie la condition de la mesure potar comparé à la mesure sonde
et active l'état haut ou bas du relais (LED)*/
if (h > ValPotar)
{
tempoActive = 1;
tempoDepart = millis();
}
if (tempoActive == 1 )
if ((millis() - tempoDepart) >= 3000 )
{ digitalWrite (ledTest,HIGH);
delay (10);
tempoActive = 0;
}
else
{ digitalWrite (ledTest,LOW);}
{
/*boucle qui vérifie l'etat du potar pour l'activation du retroeclairage*/
int valActuelle = analogRead (A0);
ValeurPrecedente = valActuelle;
if (valActuelle != ValeurPrecedente -1)
{
lcd.backlight ();
}
else
{
lcd.noBacklight ();
}
}
}
}
}
merci ! 