1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- /*
- 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;
- }
|