DHT22 library, based on Simon Cooksey's. Improved with some error checking and more rigid timing (interrupts off).

Fork of lib_dht22 by Jodie Perry

Revision:
3:40df3c72813f
Parent:
1:10ec58346011
Child:
4:30a98da09c59
--- a/dht22.h	Wed Nov 02 16:29:53 2016 +0000
+++ b/dht22.h	Thu Nov 03 11:08:45 2016 +0000
@@ -6,33 +6,40 @@
 #define __DHT22_h_
 
 // We'll pick a point to decide if a signal is 1 or 0 from. 
-#define DHT22_SIGNAL_HIGH_LOW_BOUNDARY      50   // uS
-#define DHT22_START_BIT_TIME                500  // uS
+#define DHT22_SIGNAL_HIGH_LOW_BOUNDARY      40   // uS
+#define DHT22_START_BIT_TIME                1000  // uS
 #define DHT22_START_BIT_RESPONSE            80   // uS
 
-typedef enum {
-    EDGE_TYPE_FALLING,
-    EDGE_TYPE_RISING,
-} edge_type_t;
 
 typedef struct {
     int temp;
     int humidity;
     uint8_t checksum;
+    char dummy[3];
 } DHT22_data_t;
 
 class DHT22 {
 public:
-    DHT22(PinName pin)  : dht22_s(pin) { }
-    void read(DHT22_data_t * data);
+    DHT22 (PinName pin) : dht22_s (pin), debug (PTB19)
+    {
+        dht22_s.input ();
+        isinput = 1;
+    }
+    
+    int read (DHT22_data_t *ptr);
 private:
     DigitalInOut dht22_s;
+    int isinput;
+    DigitalOut debug;
 
-    int wait_for_edge(edge_type_t type);
-    void send_start();
-    void await_start_response();
-    int16_t read_word();
-    uint8_t read_checksum();
+    void wait_2us (void);
+    void setinput (void);
+    void setoutput (void);
+    
+    int wait_for_level (int lvl, const int max);
+    void send_start (void);
+    int wait_start (void);
+    int read_byte (void);
 };
 
 #endif // __DHT22_h_