Probleme d'affichage des valeurs DHT11 {RESOLU}

Bonjour tous le monde,

Je viens vers vous pour sollicité votre aide dans un de mes montages ou je suis completement bloquer.

Tout le montage fonctionne bien, mais les valeurs prises par le DHT11 restent à 0.

Materiel utilisés:

  • Arduino UNO
  • Capteur DHT11
  • Ecran LCD 16*2 i2c
  • 2 Relais 5V / 220V
  • Module recepteur IR 1838 b
  • Telecommande IR

Explication du programme:
Lorsque j'appuis sur le bouton 1 de la telecommande, le relais 1 s'alimente s'il est inactif et s'éteint s'il est actif, le statut du relais s'affiche sur l'ecran LCD.
Lorsque j'appuis sur le bouton 2 de la telecommande, le relais 2 s'alimente s'il est inactif et s'éteint s'il est actif, le statut du relais s'affiche sur l'ecran LCD.
Lorsque j'appuis sur le bouton 3, la temperature et l'hygrometrie s'affiche sur l'ecran LCD.

Probleme rencontré:
Tout le montage fonctionne, mais lorsque j'appuie sur le bouton 3, l'écran lcd affiche bien Temperature et Humidité: mais les valeurs restent à 0.
Le moniteur série affiche (no reading, err=4114 ou err=6160), je n'arrive pas à trouver ou est l'erreur.

le Code arduino:

Se trouve dans le post suivant, sinon je ne peux pas poster car l'ensemble fait plus de 9000 caracteres.

#include <IRremote.h>              //Inclure Bibliotheque IrRemote
#include <IRremoteInt.h>           //Inclure Bibliotheque IrRemoteInt
#include <LiquidCrystal_I2C.h>     //Inclure Bibliotheque de l'ecran i2c
#include <SimpleDHT.h>             //Inclure Bibliotheque DHT

int relais1 = 7;                   //Pin du relais 1
int relais2 = 4;                   //Pin du relais 2
int receptionIr = 11;              //Pin du signal du récepteur Infrarouge 
int etat = 0;                      //L'état des relais (0 pour éteints)
int pinDHT11 = 2;                  //Pin du module DHT

byte temperature = 0;              //
byte humidite = 0;                 //
int err = SimpleDHTErrSuccess;     //

SimpleDHT11 dht11;                 //
LiquidCrystal_I2C lcd(0x27,16,2);  //Déclare l'adresse de l'écran"0x27" et les dimensions de l'écran "16x2"
IRrecv irrecv(receptionIr);        //Initialisation de la réception du récepteur infrarouge 
decode_results resultat;           //Stock le code IR reçus dans resultat  

  
void setup()
  {
  Serial.begin(9600);              //Initialisation du port serie
  irrecv.enableIRIn();             //Activation de la réception IR
  pinMode(relais1, OUTPUT);        //Declaration de relais 1 en sortie
  pinMode(relais2, OUTPUT);        //Declaration de relais 2 en sortie
  etat=0;                          //Etat indique si le relais est éteint (etat=0) ou si elle est allumé (etat=1)
  lcd.init();                      //Initialisation de l'écran
  lcd.backlight();                 //Active le rètroéclairage
  lcd.setCursor(0,0);              //Demande d'écriture ligne 1, caractere 0
  lcd.print("Initialisation");     //Ecriture écran
  lcd.setCursor(0,1);              //Demande d'écriture ligne 2, caractere 0
  lcd.print("En cours...");        //Ecriture écran
  delay(1000);                     //Attente de 1 seconde
  lcd.clear();                     //Efface l'écran
  lcd.setCursor(0,0);              //Demande d'écriture ligne 1, caractere 0
  lcd.print("LE SYSTEME EST");     //Ecriture écran
  lcd.setCursor(0,1);              //Demande d'écriture ligne 2, caractere 0
  lcd.print("OPERATIONNELLE");     //Ecriture écran 
  delay(1000);                     //Attente de 1 seconde
  lcd.clear();                     //Effacer l'écran  
  }


void loop()                                                           
 { if (irrecv.decode(&resultat))    //Si il y a reception d'un code qui est stocké dans resulat 

/* ------------------------------------CONFIGURATION TOUCHE ON/OFF--------------------------------------------------------------------*/
 {                                 
if (resultat.value==0xFFA25D)      //Si le code reçu c'est 0xFFA25D (qui est égale au bouton on/off de ma télécommande)                                 
  {                                //L'Arduino vas basculer d'une position à une autre
    
  if(etat==1)                      //Si l'etat=1
   {
      digitalWrite(relais2,LOW);   //Le relais 2 n'est plus alimenté
      etat=0;                      //L'etat est maintenant à 0
      digitalWrite(relais1,LOW);   //Le relais 1 n'est plus alimenté
      etat=0;                      //L'etat est maintenant à 0
      lcd.clear();                 //Effacer l'écran
      lcd.setCursor(0,0);          //Demande d'écriture ligne 1, caractere 1
      lcd.print("TOUS LES RELAIS");//Ecriture écran
      lcd.setCursor(0,1);          //Demande d'écriture ligne 2, caractere 1
      lcd.print("Etat: INACTIFS"); //Ecriture écran    
   }                               //Fin du if

   else if(etat==0)                //Sinon, si l'etat=0
   {
    digitalWrite(relais2,HIGH);    //Le relais 2 est alimenté
    etat=1;                        //L'etat est maintenant à 1 
    digitalWrite(relais1,HIGH);    //Le relais 1 est alimenté
    etat=1;                        //L'etat est maintenant à 1 
    lcd.clear();                   //Effacer l'écran
    lcd.setCursor(0,0);            //Demande d'écriture ligne 1, caractere 1
    lcd.print("TOUS LES RELAIS");  //Ecriture écran
    lcd.setCursor(0,1);            //Demande d'écriture ligne 2, caractere 1
    lcd.print("Etat: ACTIFS");     //Ecriture écran
   }                               //Fin du else if
  }                                //Fin du if 
  irrecv.resume();                 //L'IR se prépare à recevoir le prochain code//CONFIGURATION TOUCHE 1 

/* ------------------------------------CONFIGURATION TOUCHE 1--------------------------------------------------------------------*/
                                  
  if (resultat.value==0xFF30CF)    //Si le code reçu c'est 0xFF30CF (qui est égale au bouton 1 de ma télécommande)                                 
  {                                //L'Arduino vas basculer d'une position à une autre
  
  if(etat==0)                      //Si l'etat=0
   {
      digitalWrite(relais1,HIGH);  //Le relais 1 est alimenté
      etat=1;                      //L'etat est maintenant à 1 
      lcd.clear();                 //Effacer l'écran
      lcd.setCursor(0,0);          //Demande d'écriture ligne 1, caractere 1
      lcd.print("RELAIS 1");       //Ecriture écran
      lcd.setCursor(0,1);          //Demande d'écriture ligne 2, caractere 1
      lcd.print("Etat: ACTIF");    //Ecriture écran
   }                               //Fin du if

   else if(etat==1)                //Sinon, si l'etat=1
   {
    digitalWrite(relais1,LOW);     //Le relais 1 n'est plus alimenté
    etat=0;                        //L'etat est maintenant à 0 
    lcd.clear();                   //Effacer l'écran
    lcd.setCursor(0,0);            //Demande d'écriture ligne 1, caractere 1
    lcd.print("RELAIS 1");         //Ecriture écran
    lcd.setCursor(0,1);            //Demande d'écriture ligne 2, caractere 1
    lcd.print("Etat: INACTIF");    //Ecriture écran
   }                               //Fin du else if
  }                                //Fin du if 
  irrecv.resume();                 //L'IR se prépare à recevoir le prochain code

/* ------------------------------------CONFIGURATION TOUCHE 2--------------------------------------------------------------------*/

if (resultat.value==0xFF18E7)      //Si le code reçu c'est 0xFF30CF (qui est égale au bouton 2 de ma télécommande)                                 
  {                                //L'Arduino vas basculer d'une position à une autre
    
  if(etat==0)                      //Si l'etat=0
   {
      digitalWrite(relais2,HIGH);  //Le relais 2 est alimenté
      etat=1;                      //L'etat est maintenant à 1
      lcd.clear();                 //Effacer l'écran
      lcd.setCursor(0,0);          //Demande d'écriture ligne 1, caractere 1
      lcd.print("RELAIS 2");       //Ecriture écran
      lcd.setCursor(0,1);          //Demande d'écriture ligne 2, caractere 1
      lcd.print("Etat: ACTIF");    //Ecriture écran    
   }                               //Fin du if

   else if(etat==1)                //Sinon, si l'etat=1
   {
    digitalWrite(relais2,LOW);     //Le relais 2 n'est plus alimenté
    etat=0;                        //L'etat est maintenant à 0 
    lcd.clear();                   //Effacer l'écran
    lcd.setCursor(0,0);            //Demande d'écriture ligne 1, caractere 1
    lcd.print("RELAIS 2");         //Ecriture écran
    lcd.setCursor(0,1);            //Demande d'écriture ligne 2, caractere 1
    lcd.print("Etat: INACTIF");    //Ecriture écran
   }                               //Fin du else if
  }                                //Fin du if 
  irrecv.resume();                 //L'IR se prépare à recevoir le prochain code

/* ------------------------------------CONFIGURATION TOUCHE 3--------------------------------------------------------------------*/

if (resultat.value==0xFF7A85)      //Si le code reçu c'est 0xFF30CF (qui est égale au bouton 3 de ma télécommande)                                 
{ 
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Temperature: ");
  lcd.print((int)temperature);
  lcd.setCursor(0,1);
  lcd.print("Humidite(%): ");
  lcd.print((int)humidite);
  delay(400);
} 
    if ((err = dht11.read(pinDHT11, &temperature, &humidite, NULL)) != SimpleDHTErrSuccess) 
  {
    Serial.print("No reading , err="); 
    Serial.println(err);
    delay(400);
    return;
  }
  Serial.print("Mesures: ");
  Serial.print((int)temperature); Serial.print(" Celcius, ");
  Serial.print((int)humidite); Serial.println(" %"); 
}                               
}                               //Fin boucle

Bonjour,
A quel endroit dans ton programme ,lis-tu les valeurs de température et d'humidité en provenance du dht11?

Pierre

petrusfr:
Bonjour,
A quel endroit dans ton programme ,lis-tu les valeurs de température et d'humidité en provenance du dht11?

Pierre

Bonsoir Pierre,

Merci de ton intervention rapide, effectivement je me suis emmêler les pinceaux dans mon code :slight_smile:

Ton intervention m'a permis de résoudre le probleme, je t'en remercis.

J'ai modifier toute la partie du code concernant le dht11 en un peu plus simple.

Bonne soirée à tous :wink:

Ps: La derniere version modifiée et qui fonctionne se trouve dans le post suivant.

#include <IRremote.h>              //Inclure Bibliotheque IrRemote
#include <IRremoteInt.h>           //Inclure Bibliotheque IrRemoteInt
#include <LiquidCrystal_I2C.h>     //Inclure Bibliotheque de l'ecran i2c
#include <dht.h>                   //Inclure Bibliotheque dht.h
#define DHT11_PIN 2                //definit le pin du dht11 (pin 2)

int relais1 = 7;                   //Pin du relais 1
int relais2 = 4;                   //Pin du relais 2
int receptionIr = 11;              //Pin du signal du récepteur Infrarouge 
int etat = 0;                      //L'état des relais (0 pour éteints)


dht DHT;                           //
LiquidCrystal_I2C lcd(0x27,16,2);  //Déclare l'adresse de l'écran"0x27" et les dimensions de l'écran "16x2"
IRrecv irrecv(receptionIr);        //Initialisation de la réception du récepteur infrarouge 
decode_results resultat;           //Stock le code IR reçus dans resultat  

  
void setup()
  {
  Serial.begin(9600);              //Initialisation du port serie
  irrecv.enableIRIn();             //Activation de la réception IR
  pinMode(relais1, OUTPUT);        //Declaration de relais 1 en sortie
  pinMode(relais2, OUTPUT);        //Declaration de relais 2 en sortie
  etat=0;                          //Etat indique si le relais est éteint (etat=0) ou si elle est allumé (etat=1)
  lcd.init();                      //Initialisation de l'écran
  lcd.backlight();                 //Active le rètroéclairage
  lcd.setCursor(0,0);              //Demande d'écriture ligne 1, caractere 0
  lcd.print("Initialisation");     //Ecriture écran
  lcd.setCursor(0,1);              //Demande d'écriture ligne 2, caractere 0
  lcd.print("En cours...");        //Ecriture écran
  delay(1000);                     //Attente de 1 seconde
  lcd.clear();                     //Efface l'écran
  lcd.setCursor(0,0);              //Demande d'écriture ligne 1, caractere 0
  lcd.print("LE SYSTEME EST");     //Ecriture écran
  lcd.setCursor(0,1);              //Demande d'écriture ligne 2, caractere 0
  lcd.print("OPERATIONNELLE");     //Ecriture écran 
  delay(1000);                     //Attente de 1 seconde
  lcd.clear();                     //Effacer l'écran  
  }


void loop()                                                           
 { if (irrecv.decode(&resultat))    //Si il y a reception d'un code qui est stocké dans resulat 

/* ------------------------------------CONFIGURATION TOUCHE ON/OFF--------------------------------------------------------------------*/
 {                                 
if (resultat.value==0xFFA25D)      //Si le code reçu c'est 0xFFA25D (qui est égale au bouton on/off de ma télécommande)                                 
  {                                //L'Arduino vas basculer d'une position à une autre
    
  if(etat==1)                      //Si l'etat=1
   {
      digitalWrite(relais2,LOW);   //Le relais 2 n'est plus alimenté
      etat=0;                      //L'etat est maintenant à 0
      digitalWrite(relais1,LOW);   //Le relais 1 n'est plus alimenté
      etat=0;                      //L'etat est maintenant à 0
      lcd.clear();                 //Effacer l'écran
      lcd.setCursor(0,0);          //Demande d'écriture ligne 1, caractere 0
      lcd.print("TOUS LES RELAIS");//Ecriture écran
      lcd.setCursor(0,1);          //Demande d'écriture ligne 2, caractere 0
      lcd.print("Etat: INACTIFS"); //Ecriture écran    
   }                               //Fin du if

   else if(etat==0)                //Sinon, si l'etat=0
   {
    digitalWrite(relais2,HIGH);    //Le relais 2 est alimenté
    etat=1;                        //L'etat est maintenant à 1 
    digitalWrite(relais1,HIGH);    //Le relais 1 est alimenté
    etat=1;                        //L'etat est maintenant à 1 
    lcd.clear();                   //Effacer l'écran
    lcd.setCursor(0,0);            //Demande d'écriture ligne 1, caractere 0
    lcd.print("TOUS LES RELAIS");  //Ecriture écran
    lcd.setCursor(0,1);            //Demande d'écriture ligne 2, caractere 0
    lcd.print("Etat: ACTIFS");     //Ecriture écran
   }                               //Fin du else if
  }                                //Fin du if 
  irrecv.resume();                 //L'IR se prépare à recevoir le prochain code//CONFIGURATION TOUCHE 1 

/* ------------------------------------CONFIGURATION TOUCHE 1--------------------------------------------------------------------*/
                                  
  if (resultat.value==0xFF30CF)    //Si le code reçu c'est 0xFF30CF (qui est égale au bouton 1 de ma télécommande)                                 
  {                                //L'Arduino vas basculer d'une position à une autre
  
  if(etat==0)                      //Si l'etat=0
   {
      digitalWrite(relais1,HIGH);  //Le relais 1 est alimenté
      etat=1;                      //L'etat est maintenant à 1 
      lcd.clear();                 //Effacer l'écran
      lcd.setCursor(0,0);          //Demande d'écriture ligne 1, caractere 0
      lcd.print("RELAIS 1");       //Ecriture écran
      lcd.setCursor(0,1);          //Demande d'écriture ligne 2, caractere 0
      lcd.print("Etat: ACTIF");    //Ecriture écran
   }                               //Fin du if

   else if(etat==1)                //Sinon, si l'etat=1
   {
    digitalWrite(relais1,LOW);     //Le relais 1 n'est plus alimenté
    etat=0;                        //L'etat est maintenant à 0 
    lcd.clear();                   //Effacer l'écran
    lcd.setCursor(0,0);            //Demande d'écriture ligne 1, caractere 0
    lcd.print("RELAIS 1");         //Ecriture écran
    lcd.setCursor(0,1);            //Demande d'écriture ligne 2, caractere 0
    lcd.print("Etat: INACTIF");    //Ecriture écran
   }                               //Fin du else if
  }                                //Fin du if 
  irrecv.resume();                 //L'IR se prépare à recevoir le prochain code

/* ------------------------------------CONFIGURATION TOUCHE 2--------------------------------------------------------------------*/

if (resultat.value==0xFF18E7)      //Si le code reçu c'est 0xFF30CF (qui est égale au bouton 2 de ma télécommande)                                 
  {                                //L'Arduino vas basculer d'une position à une autre
    
  if(etat==0)                      //Si l'etat=0
   {
      digitalWrite(relais2,HIGH);  //Le relais 2 est alimenté
      etat=1;                      //L'etat est maintenant à 1
      lcd.clear();                 //Effacer l'écran
      lcd.setCursor(0,0);          //Demande d'écriture ligne 1, caractere 0
      lcd.print("RELAIS 2");       //Ecriture écran
      lcd.setCursor(0,1);          //Demande d'écriture ligne 2, caractere 0
      lcd.print("Etat: ACTIF");    //Ecriture écran    
   }                               //Fin du if

   else if(etat==1)                //Sinon, si l'etat=1
   {
    digitalWrite(relais2,LOW);     //Le relais 2 n'est plus alimenté
    etat=0;                        //L'etat est maintenant à 0 
    lcd.clear();                   //Effacer l'écran
    lcd.setCursor(0,0);            //Demande d'écriture ligne 1, caractere 0
    lcd.print("RELAIS 2");         //Ecriture écran
    lcd.setCursor(0,1);            //Demande d'écriture ligne 2, caractere 0
    lcd.print("Etat: INACTIF");    //Ecriture écran
   }                               //Fin du else if
  }                                //Fin du if 
  irrecv.resume();                 //L'IR se prépare à recevoir le prochain code

/* ------------------------------------CONFIGURATION TOUCHE 3--------------------------------------------------------------------*/

if (resultat.value==0xFF7A85)       //Si le code reçu c'est 0xFF30CF (qui est égale au bouton 3 de ma télécommande)                                 
{ 
    int chk = DHT.read11(DHT11_PIN);//Lecture DHT11
    lcd.clear();                    //Effacer l'écran
    lcd.setCursor(0,0);             //Demande d'écriture ligne 1, caractere 0
    lcd.print(DHT.temperature);     //Ecriture écran valeur temperature
    lcd.print("  Degres");          //Ecriture écran  
    lcd.setCursor(0,1);             //Demande d'écriture ligne 2, caractere 0
    lcd.print(DHT.humidity);        //Ecriture écran valeur humidité
    lcd.print("% Humidite");        //Ecriture écran
}                                   //Fin du if

}                                   //Fin du if               
}                                   //Fin boucle