/* DHT12.cpp - Library for DHT12 sensor. v0.0.1 Beta Created by Bobadas, July 30,2016. Released into the public domain. */ #include "DHT12.h" DHT12::DHT12(uint8_t scale, uint8_t id) { if (id == 0 || id > 126) _id = 0x5c; else _id = id; if (scale == 0 || scale > 3) _scale = CELSIUS; else _scale = scale; } uint8_t DHT12::read() { Wire.beginTransmission(_id); Wire.write(0); if (Wire.endTransmission() != 0) return 1; Wire.requestFrom(_id, (uint8_t)5); for (int i = 0; i < 5; i++) { datos[i] = Wire.read(); }; delay(50); if (Wire.available() != 0) return 2; if (datos[4] != (datos[0] + datos[1] + datos[2] + datos[3])) return 3; return 0; } float DHT12::readTemperature(uint8_t scale) { float resultado = 0; uint8_t error = read(); if (error != 0) return (float)error / 100; resultado = datos[2] + (float)(datos[3] & 0x7f) / 10; if (datos[3] & 0x80) { resultado = -resultado; } if (scale == 0) scale = _scale; switch (scale) { case CELSIUS: break; case FAHRENHEIT: resultado = resultado * 1.8 + 32; break; case KELVIN: resultado = resultado + 273.15; break; }; return resultado; } float DHT12::readHumidity() { float resultado; uint8_t error = read(); if (error != 0) return (float)error / 100; resultado = (datos[0] + (float)datos[1] / 10); return resultado; }