Skip to content
This repository was archived by the owner on Sep 30, 2019. It is now read-only.

Commit e20e41d

Browse files
committed
readDHT returns array of two floats, printing done in main. Adds flag
on readDHT to suppress printing of raw data.
1 parent a10b254 commit e20e41d

File tree

1 file changed

+33
-19
lines changed

1 file changed

+33
-19
lines changed

Adafruit_DHT_Driver/Adafruit_DHT.c

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
#define DHT22 22
3434
#define AM2302 22
3535

36-
int readDHT(int type, int pin);
36+
float *readDHT(int type, int pin, int print);
3737
int parseType(char *input);
3838
int init(void);
3939

@@ -64,22 +64,33 @@ int main(int argc, char **argv)
6464

6565

6666
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+
6876
return 0;
6977

7078
} // main
7179

7280

7381

7482

75-
int readDHT(int type, int pin) {
83+
float *readDHT(int type, int pin, int print) {
7684
int bits[250], data[100];
7785
int bitidx = 0;
7886

7987
int counter = 0;
8088
int laststate = HIGH;
8189
int j=0;
8290

91+
static float result[2];
92+
float t, h;
93+
8394
// Set GPIO pin to output
8495
bcm2835_gpio_fsel(pin, BCM2835_GPIO_FSEL_OUTP);
8596

@@ -127,27 +138,30 @@ int readDHT(int type, int pin) {
127138
}
128139
#endif
129140

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]);
131142

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)) ) {
134144
// 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+
}
137149
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;
146157
}
147-
return 1;
158+
result[0] = t;
159+
result[1] = h;
160+
return result;
148161
}
149-
150-
return 0;
162+
result[0] = -1.;
163+
result[1] = -1.;
164+
return result;
151165
}
152166

153167
int parseType(char *input){

0 commit comments

Comments
 (0)