A library for the use of DHT11, a temperature and humidity sensor
Fork of DHT11 by
DHT11.h@4:48798b126d93, 2014-09-10 (annotated)
- Committer:
- s_inoue_mbed
- Date:
- Wed Sep 10 17:18:28 2014 +0000
- Revision:
- 4:48798b126d93
- Parent:
- 3:8cd064147bde
- Child:
- 5:da586c935e88
Doxygen documentation has been corrected.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
s_inoue_mbed | 4:48798b126d93 | 1 | /* |
s_inoue_mbed | 4:48798b126d93 | 2 | * Library for the use of the DHT11, a temperature and humidity sensor |
s_inoue_mbed | 4:48798b126d93 | 3 | * Shigenori Inoue, September 10, 2014 |
s_inoue_mbed | 0:4d4c5ea17d86 | 4 | */ |
s_inoue_mbed | 0:4d4c5ea17d86 | 5 | #ifndef __DHT11__ |
s_inoue_mbed | 0:4d4c5ea17d86 | 6 | #define __DHT11__ |
s_inoue_mbed | 0:4d4c5ea17d86 | 7 | #include "mbed.h" |
s_inoue_mbed | 0:4d4c5ea17d86 | 8 | |
s_inoue_mbed | 0:4d4c5ea17d86 | 9 | /** Example: |
s_inoue_mbed | 0:4d4c5ea17d86 | 10 | * @code |
s_inoue_mbed | 0:4d4c5ea17d86 | 11 | * #include "mbed.h" |
s_inoue_mbed | 0:4d4c5ea17d86 | 12 | * #include "DHT11.h" |
s_inoue_mbed | 0:4d4c5ea17d86 | 13 | * |
s_inoue_mbed | 0:4d4c5ea17d86 | 14 | * DHT11 d; |
s_inoue_mbed | 0:4d4c5ea17d86 | 15 | * |
s_inoue_mbed | 0:4d4c5ea17d86 | 16 | * main() |
s_inoue_mbed | 0:4d4c5ea17d86 | 17 | * { |
s_inoue_mbed | 0:4d4c5ea17d86 | 18 | * int s; |
s_inoue_mbed | 0:4d4c5ea17d86 | 19 | * s = d.readData(); |
s_inoue_mbed | 2:1e997b7a1f9a | 20 | * if (s != DHT11::OK) { |
s_inoue_mbed | 0:4d4c5ea17d86 | 21 | * printf("Error!\r\n"); |
s_inoue_mbed | 0:4d4c5ea17d86 | 22 | * } |
s_inoue_mbed | 0:4d4c5ea17d86 | 23 | * else { |
s_inoue_mbed | 0:4d4c5ea17d86 | 24 | * printf("T:%d, H:%d\r\n", d.readTemperature(), d.readHumidity()); |
s_inoue_mbed | 0:4d4c5ea17d86 | 25 | * } |
s_inoue_mbed | 0:4d4c5ea17d86 | 26 | * } |
s_inoue_mbed | 0:4d4c5ea17d86 | 27 | * @endcode |
s_inoue_mbed | 0:4d4c5ea17d86 | 28 | */ |
s_inoue_mbed | 0:4d4c5ea17d86 | 29 | |
s_inoue_mbed | 0:4d4c5ea17d86 | 30 | class DHT11 |
s_inoue_mbed | 0:4d4c5ea17d86 | 31 | { |
s_inoue_mbed | 0:4d4c5ea17d86 | 32 | public: |
s_inoue_mbed | 0:4d4c5ea17d86 | 33 | /** Create a DHT11 interface |
s_inoue_mbed | 0:4d4c5ea17d86 | 34 | * @param pin 1-wire-like serial I/O port of DHT11 |
s_inoue_mbed | 0:4d4c5ea17d86 | 35 | */ |
s_inoue_mbed | 0:4d4c5ea17d86 | 36 | DHT11(PinName pin); |
s_inoue_mbed | 0:4d4c5ea17d86 | 37 | ~DHT11(); |
s_inoue_mbed | 0:4d4c5ea17d86 | 38 | |
s_inoue_mbed | 0:4d4c5ea17d86 | 39 | /** Reading the data from the DHT11 |
s_inoue_mbed | 0:4d4c5ea17d86 | 40 | * @return Error code |
s_inoue_mbed | 0:4d4c5ea17d86 | 41 | * 0: OK. |
s_inoue_mbed | 0:4d4c5ea17d86 | 42 | * 1: Reading the data too often. |
s_inoue_mbed | 0:4d4c5ea17d86 | 43 | * 2: 1-wire bus is busy. |
s_inoue_mbed | 0:4d4c5ea17d86 | 44 | * 3: DHT11 does not respond. |
s_inoue_mbed | 0:4d4c5ea17d86 | 45 | * 4: DHT11 is not ready. |
s_inoue_mbed | 0:4d4c5ea17d86 | 46 | * 5: Checksum is incorrect. |
s_inoue_mbed | 0:4d4c5ea17d86 | 47 | * 6: Timeout |
s_inoue_mbed | 0:4d4c5ea17d86 | 48 | */ |
s_inoue_mbed | 3:8cd064147bde | 49 | int readData(void); |
s_inoue_mbed | 3:8cd064147bde | 50 | |
s_inoue_mbed | 0:4d4c5ea17d86 | 51 | /** Reading the humidity from the data |
s_inoue_mbed | 0:4d4c5ea17d86 | 52 | * @return Humidity in % if readData() returns no error. Otherwise, returns 0xffffffff. |
s_inoue_mbed | 0:4d4c5ea17d86 | 53 | */ |
s_inoue_mbed | 0:4d4c5ea17d86 | 54 | int readHumidity(void); |
s_inoue_mbed | 3:8cd064147bde | 55 | |
s_inoue_mbed | 3:8cd064147bde | 56 | /** Reading the temperature from the data |
s_inoue_mbed | 0:4d4c5ea17d86 | 57 | * @return Temperature in Celcius if readData() returns no error. Otherwise, returns 0xffffffff. |
s_inoue_mbed | 0:4d4c5ea17d86 | 58 | */ |
s_inoue_mbed | 0:4d4c5ea17d86 | 59 | int readTemperature(void); |
s_inoue_mbed | 3:8cd064147bde | 60 | |
s_inoue_mbed | 0:4d4c5ea17d86 | 61 | enum ErrorDHT11 { |
s_inoue_mbed | 0:4d4c5ea17d86 | 62 | OK = 0, |
s_inoue_mbed | 0:4d4c5ea17d86 | 63 | TOO_FAST_READ = 1, |
s_inoue_mbed | 0:4d4c5ea17d86 | 64 | BUS_BUSY = 2, |
s_inoue_mbed | 0:4d4c5ea17d86 | 65 | NOT_PRESENT = 3, |
s_inoue_mbed | 0:4d4c5ea17d86 | 66 | NOT_READY = 4, |
s_inoue_mbed | 0:4d4c5ea17d86 | 67 | CHKSUM_ERR = 5, |
s_inoue_mbed | 0:4d4c5ea17d86 | 68 | WATCHDOG_ERR = 6, |
s_inoue_mbed | 0:4d4c5ea17d86 | 69 | }; |
s_inoue_mbed | 0:4d4c5ea17d86 | 70 | |
s_inoue_mbed | 0:4d4c5ea17d86 | 71 | private: |
s_inoue_mbed | 0:4d4c5ea17d86 | 72 | PinName _pin; |
s_inoue_mbed | 0:4d4c5ea17d86 | 73 | DigitalInOut io; |
s_inoue_mbed | 0:4d4c5ea17d86 | 74 | InterruptIn io_irq; |
s_inoue_mbed | 0:4d4c5ea17d86 | 75 | Timer t; |
s_inoue_mbed | 0:4d4c5ea17d86 | 76 | uint32_t t_pulse_us; |
s_inoue_mbed | 0:4d4c5ea17d86 | 77 | bool first_time; |
s_inoue_mbed | 0:4d4c5ea17d86 | 78 | uint64_t data; |
s_inoue_mbed | 0:4d4c5ea17d86 | 79 | uint32_t chksum; |
s_inoue_mbed | 0:4d4c5ea17d86 | 80 | uint32_t cnt; |
s_inoue_mbed | 0:4d4c5ea17d86 | 81 | uint32_t wdt; |
s_inoue_mbed | 0:4d4c5ea17d86 | 82 | bool eod; |
s_inoue_mbed | 0:4d4c5ea17d86 | 83 | ErrorDHT11 err; |
s_inoue_mbed | 0:4d4c5ea17d86 | 84 | void init(void); |
s_inoue_mbed | 0:4d4c5ea17d86 | 85 | void pos_edge(void); |
s_inoue_mbed | 0:4d4c5ea17d86 | 86 | void neg_edge(void); |
s_inoue_mbed | 0:4d4c5ea17d86 | 87 | }; |
s_inoue_mbed | 0:4d4c5ea17d86 | 88 | |
s_inoue_mbed | 0:4d4c5ea17d86 | 89 | #endif |