Go Down

Topic: arduino rileva umidità e temperatura 5 minuti poi non più (Read 10271 times) previous topic - next topic

superzaffo

Sinceramente io sapevo che la famiglia DHT (11 e 22) avevano i decimali. :smiley-roll:

PaoloP

Il DHT21 e DHT22 hanno la parte decimale. Il DHT11 no.
Anche nelle librerie è specificato bene.
Guarda questa parte di codice: (https://github.com/adafruit/DHT-sensor-library)
Code: [Select]
float DHT::readTemperature(bool S) {
 float f;

 if (read()) {
   switch (_type) {
   case DHT11:
     f = data[2];
     if(S)
      f = convertCtoF(f);
     
     return f;
   case DHT22:
   case DHT21:
     f = data[2] & 0x7F;
     f *= 256;
     f += data[3];
     f /= 10;
     if (data[2] & 0x80)
f *= -1;
     if(S)
f = convertCtoF(f);

     return f;
   }
 }
 Serial.print("Read fail");
 return NAN;
}

float DHT::convertCtoF(float c) {
return c * 9 / 5 + 32;
}

float DHT::readHumidity(void) {
 float f;
 if (read()) {
   switch (_type) {
   case DHT11:
     f = data[0];
     return f;
   case DHT22:
   case DHT21:
     f = data[0];
     f *= 256;
     f += data[1];
     f /= 10;
     return f;
   }
 }
 Serial.print("Read fail");
 return NAN;
}


Alla richiesta dei dati il sensore spedisce 4 byte, umidità intero, umidità decimale, temperatura intero, temperatura decimale inserite in un vettore.
Il DHT11 legge solo la parte intera dei due dati (data[0] per l'umidità e data[2] per la temperatura), mentre gli altri 2 modelli leggono entrambi i byte e restituiscono un solo numero formato da intero e parte decimale.

superzaffo

Come non detto.. hai ragione tu... Il DHT22 ha un decimale, il DHT11 non ha decimali... avevo letto male un forum. Io normalmente uso il DHT22
Mi son sbagliato io...  :*

Go Up