A library for the use of DHT11, a temperature and humidity sensor
Fork of DHT11 by
Diff: DHT11.h
- Revision:
- 0:4d4c5ea17d86
- Child:
- 1:95b80cc3f676
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DHT11.h Wed Sep 10 15:14:31 2014 +0000 @@ -0,0 +1,91 @@ +/** @file + Library for the use of the DHT11, a temperature and humidity sensor + Shigenori Inoue, September 10, 2014 + */ +#ifndef __DHT11__ +#define __DHT11__ +#include "mbed.h" + +/** Example: + * @code + * #include "mbed.h" + * #include "DHT11.h" + * + * DHT11 d; + * + * main() + * { + * int s; + * s = d.readData(); + * if (s != 0) { + * printf("Error!\r\n"); + * } + * else { + * printf("T:%d, H:%d\r\n", d.readTemperature(), d.readHumidity()); + * } + * } + * @endcode + */ + +class DHT11 +{ +public: + /** Create a DHT11 interface + * @param pin 1-wire-like serial I/O port of DHT11 + */ + DHT11(PinName pin); + ~DHT11(); + + /** Reading the data from the DHT11 */ + int readData(void); + + /** Reading the data from the DHT11 + * @return Error code + * 0: OK. + * 1: Reading the data too often. + * 2: 1-wire bus is busy. + * 3: DHT11 does not respond. + * 4: DHT11 is not ready. + * 5: Checksum is incorrect. + * 6: Timeout + */ + + /** Reading the humidity from the data + * @return Humidity in % if readData() returns no error. Otherwise, returns 0xffffffff. + */ + int readHumidity(void); + + /** Reading the humidity from the data + * @return Temperature in Celcius if readData() returns no error. Otherwise, returns 0xffffffff. + */ + int readTemperature(void); + + enum ErrorDHT11 { + OK = 0, + TOO_FAST_READ = 1, + BUS_BUSY = 2, + NOT_PRESENT = 3, + NOT_READY = 4, + CHKSUM_ERR = 5, + WATCHDOG_ERR = 6, + }; + +private: + PinName _pin; + DigitalInOut io; + InterruptIn io_irq; + Timer t; + uint32_t t_pulse_us; + bool first_time; + uint64_t data; + uint32_t chksum; + uint32_t cnt; + uint32_t wdt; + bool eod; + ErrorDHT11 err; + void init(void); + void pos_edge(void); + void neg_edge(void); +}; + +#endif \ No newline at end of file