|
33 | 33 | #define DHT22 22
|
34 | 34 | #define AM2302 22
|
35 | 35 |
|
36 |
| -int readDHT(int type, int pin); |
| 36 | +float *readDHT(int type, int pin, int print); |
37 | 37 | int parseType(char *input);
|
38 | 38 | int init(void);
|
39 | 39 |
|
@@ -64,22 +64,33 @@ int main(int argc, char **argv)
|
64 | 64 |
|
65 | 65 |
|
66 | 66 | printf("Using pin #%d\n", dhtpin);
|
67 |
| - readDHT(type, dhtpin); |
| 67 | + |
| 68 | + float *r = readDHT(type, dhtpin, 1); |
| 69 | + if (r[0]==-1.){ |
| 70 | + printf("Read failed\n"); |
| 71 | + } else { |
| 72 | + if (type == DHT11) printf("Temp = %.0f *C, Hum = %.0f \%\n", r[0], r[1]); |
| 73 | + if (type == DHT22) printf("Temp = %.1f *C, Hum = %.1f \%\n", r[0], r[1]); |
| 74 | + } |
| 75 | + |
68 | 76 | return 0;
|
69 | 77 |
|
70 | 78 | } // main
|
71 | 79 |
|
72 | 80 |
|
73 | 81 |
|
74 | 82 |
|
75 |
| -int readDHT(int type, int pin) { |
| 83 | +float *readDHT(int type, int pin, int print) { |
76 | 84 | int bits[250], data[100];
|
77 | 85 | int bitidx = 0;
|
78 | 86 |
|
79 | 87 | int counter = 0;
|
80 | 88 | int laststate = HIGH;
|
81 | 89 | int j=0;
|
82 | 90 |
|
| 91 | + static float result[2]; |
| 92 | + float t, h; |
| 93 | + |
83 | 94 | // Set GPIO pin to output
|
84 | 95 | bcm2835_gpio_fsel(pin, BCM2835_GPIO_FSEL_OUTP);
|
85 | 96 |
|
@@ -127,27 +138,30 @@ int readDHT(int type, int pin) {
|
127 | 138 | }
|
128 | 139 | #endif
|
129 | 140 |
|
130 |
| - printf("Data (%d): 0x%x 0x%x 0x%x 0x%x 0x%x\n", j, data[0], data[1], data[2], data[3], data[4]); |
| 141 | + if (print) printf("Data (%d): 0x%x 0x%x 0x%x 0x%x 0x%x\n", j, data[0], data[1], data[2], data[3], data[4]); |
131 | 142 |
|
132 |
| - if ((j >= 39) && |
133 |
| - (data[4] == ((data[0] + data[1] + data[2] + data[3]) & 0xFF)) ) { |
| 143 | + if ((j >= 39) && (data[4] == ((data[0] + data[1] + data[2] + data[3]) & 0xFF)) ) { |
134 | 144 | // yay!
|
135 |
| - if (type == DHT11) |
136 |
| - printf("Temp = %d *C, Hum = %d \%\n", data[2], data[0]); |
| 145 | + if (type == DHT11) { |
| 146 | + t = (float)data[2]; |
| 147 | + h = (float)data[0]; |
| 148 | + } |
137 | 149 | if (type == DHT22) {
|
138 |
| - float f, h; |
139 |
| - h = data[0] * 256 + data[1]; |
140 |
| - h /= 10; |
141 |
| - |
142 |
| - f = (data[2] & 0x7F)* 256 + data[3]; |
143 |
| - f /= 10.0; |
144 |
| - if (data[2] & 0x80) f *= -1; |
145 |
| - printf("Temp = %.1f *C, Hum = %.1f \%\n", f, h); |
| 150 | + //float f, h; |
| 151 | + h = data[0] * 256 + data[1]; |
| 152 | + h /= 10; |
| 153 | + |
| 154 | + t = (data[2] & 0x7F)* 256 + data[3]; |
| 155 | + t /= 10.0; |
| 156 | + if (data[2] & 0x80) t *= -1; |
146 | 157 | }
|
147 |
| - return 1; |
| 158 | + result[0] = t; |
| 159 | + result[1] = h; |
| 160 | + return result; |
148 | 161 | }
|
149 |
| - |
150 |
| - return 0; |
| 162 | + result[0] = -1.; |
| 163 | + result[1] = -1.; |
| 164 | + return result; |
151 | 165 | }
|
152 | 166 |
|
153 | 167 | int parseType(char *input){
|
|
0 commit comments