DHT22 library, based on Simon Cooksey's. Improved with some error checking and more rigid timing (interrupts off).
Fork of lib_dht22 by
Diff: dht22.h
- Revision:
- 3:40df3c72813f
- Parent:
- 1:10ec58346011
- Child:
- 4:30a98da09c59
diff -r 02cbaab7c6cd -r 40df3c72813f dht22.h --- 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_