A library for the use of DHT11, a temperature and humidity sensor

Dependents:   HTTP_SERVER2 lightweight-weather-station

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