//boolean S == Scale. True == Farenheit; False == Celcius float DHT_ReadTemperature() { bool S = false; float f; if (DHT_read()) { switch (_type) { case DHT11: f = data[2]; if (S) f = DHT_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 = DHT_ConvertCtoF(f); return f; } } return NAN; }
// return values: // DHTLIB_OK // DHTLIB_ERROR_CHECKSUM // DHTLIB_ERROR_TIMEOUT int DHT_Read22(dht_t *self) { // READ VALUES int rv = DHT_read(self); if (rv != DHTLIB_OK) { self->humidity = DHTLIB_INVALID_VALUE; // invalid value, or is NaN prefered? self->temperature = DHTLIB_INVALID_VALUE; // invalid value return rv; } // CONVERT AND STORE self->humidity = WORD(self->_bits[0], self->_bits[1]) * 0.1; if (self->_bits[2] & 0x80) // negative temperature { self->temperature = WORD(self->_bits[2]&0x7F, self->_bits[3]) * 0.1; self->temperature *= -1.0; } else { self->temperature = WORD(self->_bits[2], self->_bits[3]) * 0.1; } // TEST CHECKSUM uint8_t sum = self->_bits[0] + self->_bits[1] + self->_bits[2] + self->_bits[3]; if (self->_bits[4] != sum) return DHTLIB_ERROR_CHECKSUM; return DHTLIB_OK; }
float DHT_ReadHumidity(void) { float f; if (DHT_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; } } return NAN; }
// return values: // DHTLIB_OK // DHTLIB_ERROR_CHECKSUM // DHTLIB_ERROR_TIMEOUT int DHT_Read11(dht_t *self) { // READ VALUES int rv = DHT_read(self); if (rv != DHTLIB_OK) { self->humidity = DHTLIB_INVALID_VALUE; // or is NaN prefered? self->temperature = DHTLIB_INVALID_VALUE; return rv; } // CONVERT AND STORE self->humidity = self->_bits[0]; // bit[1] == 0; self->temperature = self->_bits[2]; // bits[3] == 0; // TEST CHECKSUM uint8_t sum = self->_bits[0] + self->_bits[2]; // bits[1] && bits[3] both 0 if (self->_bits[4] != sum) return DHTLIB_ERROR_CHECKSUM; return DHTLIB_OK; }