DHT22 library, based on Simon Cooksey's. Improved with some error checking and more rigid timing (interrupts off).
Fork of lib_dht22 by
dht22.h@4:30a98da09c59, 2016-11-03 (annotated)
- Committer:
- co657_frmb
- Date:
- Thu Nov 03 11:12:51 2016 +0000
- Revision:
- 4:30a98da09c59
- Parent:
- 3:40df3c72813f
turned off debugging
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
co657_sjc80 | 0:257ba13e416e | 1 | /* |
co657_sjc80 | 0:257ba13e416e | 2 | * (C) The University of Kent and Simon Cooksey 2015. |
co657_sjc80 | 0:257ba13e416e | 3 | */ |
co657_sjc80 | 0:257ba13e416e | 4 | |
co657_sjc80 | 0:257ba13e416e | 5 | #ifndef __DHT22_h_ |
co657_sjc80 | 0:257ba13e416e | 6 | #define __DHT22_h_ |
co657_sjc80 | 0:257ba13e416e | 7 | |
co657_sjc80 | 0:257ba13e416e | 8 | // We'll pick a point to decide if a signal is 1 or 0 from. |
co657_frmb | 3:40df3c72813f | 9 | #define DHT22_SIGNAL_HIGH_LOW_BOUNDARY 40 // uS |
co657_frmb | 3:40df3c72813f | 10 | #define DHT22_START_BIT_TIME 1000 // uS |
co657_sjc80 | 0:257ba13e416e | 11 | #define DHT22_START_BIT_RESPONSE 80 // uS |
co657_sjc80 | 0:257ba13e416e | 12 | |
co657_frmb | 4:30a98da09c59 | 13 | #undef DEBUG_DHT22 |
co657_sjc80 | 0:257ba13e416e | 14 | |
co657_sjc80 | 0:257ba13e416e | 15 | typedef struct { |
co657_sjc80 | 0:257ba13e416e | 16 | int temp; |
co657_sjc80 | 0:257ba13e416e | 17 | int humidity; |
co657_sjc80 | 0:257ba13e416e | 18 | uint8_t checksum; |
co657_frmb | 3:40df3c72813f | 19 | char dummy[3]; |
co657_sjc80 | 0:257ba13e416e | 20 | } DHT22_data_t; |
co657_sjc80 | 0:257ba13e416e | 21 | |
co657_sjc80 | 0:257ba13e416e | 22 | class DHT22 { |
co657_sjc80 | 0:257ba13e416e | 23 | public: |
co657_frmb | 4:30a98da09c59 | 24 | DHT22 (PinName pin) : dht22_s (pin) |
co657_frmb | 4:30a98da09c59 | 25 | #ifdef DEBUG_DHT22 |
co657_frmb | 4:30a98da09c59 | 26 | , debug (PTB19) /* GROT! -- hardwired for K64F */ |
co657_frmb | 4:30a98da09c59 | 27 | #endif |
co657_frmb | 3:40df3c72813f | 28 | { |
co657_frmb | 3:40df3c72813f | 29 | dht22_s.input (); |
co657_frmb | 3:40df3c72813f | 30 | isinput = 1; |
co657_frmb | 3:40df3c72813f | 31 | } |
co657_frmb | 3:40df3c72813f | 32 | |
co657_frmb | 3:40df3c72813f | 33 | int read (DHT22_data_t *ptr); |
co657_sjc80 | 0:257ba13e416e | 34 | private: |
co657_sjc80 | 0:257ba13e416e | 35 | DigitalInOut dht22_s; |
co657_frmb | 3:40df3c72813f | 36 | int isinput; |
co657_frmb | 4:30a98da09c59 | 37 | #ifdef DEBUG_DHT22 |
co657_frmb | 3:40df3c72813f | 38 | DigitalOut debug; |
co657_frmb | 4:30a98da09c59 | 39 | #endif |
co657_sjc80 | 0:257ba13e416e | 40 | |
co657_frmb | 3:40df3c72813f | 41 | void wait_2us (void); |
co657_frmb | 3:40df3c72813f | 42 | void setinput (void); |
co657_frmb | 3:40df3c72813f | 43 | void setoutput (void); |
co657_frmb | 3:40df3c72813f | 44 | |
co657_frmb | 3:40df3c72813f | 45 | int wait_for_level (int lvl, const int max); |
co657_frmb | 3:40df3c72813f | 46 | void send_start (void); |
co657_frmb | 3:40df3c72813f | 47 | int wait_start (void); |
co657_frmb | 3:40df3c72813f | 48 | int read_byte (void); |
co657_sjc80 | 0:257ba13e416e | 49 | }; |
co657_sjc80 | 0:257ba13e416e | 50 | |
co657_sjc80 | 0:257ba13e416e | 51 | #endif // __DHT22_h_ |