@@ -62,7 +62,7 @@ int main(int argc, char **argv)
6262 }
6363
6464
65- printf ( "Using pin #%d\n" , dhtpin );
65+ fprintf ( stderr , "Using pin #%d\n" , dhtpin );
6666 readDHT (type , dhtpin );
6767 return 0 ;
6868
@@ -124,25 +124,46 @@ int readDHT(int type, int pin) {
124124 }
125125#endif
126126
127- 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 ]);
127+ printf ("data:\n" );
128+ printf (" j: %d\n" , j );
129+ printf (" d:\n" );
130+ for (int i = 0 ; i < 5 ; i ++ ) {
131+ printf (" - %x\n" , data [i ]);
132+ }
128133
129134 if ((j >= 39 ) &&
130135 (data [4 ] == ((data [0 ] + data [1 ] + data [2 ] + data [3 ]) & 0xFF )) ) {
131136 // yay!
132- if (type == DHT11 )
133- printf ("Temp = %d *C, Hum = %d \%\n" , data [2 ], data [0 ]);
134- if (type == DHT22 ) {
135- float f , h ;
136- h = data [0 ] * 256 + data [1 ];
137- h /= 10 ;
138-
139- f = (data [2 ] & 0x7F )* 256 + data [3 ];
140- f /= 10.0 ;
141- if (data [2 ] & 0x80 ) f *= -1 ;
142- printf ("Temp = %.1f *C, Hum = %.1f \%\n" , f , h );
143- }
144- return 1 ;
145- }
146137
138+ float therm , humid ;
139+
140+ switch (type ) {
141+ case DHT11 :
142+ therm = (float ) data [2 ];
143+ humid = (float ) data [0 ];
144+ break ;
145+ case DHT22 :
146+ humid = (data [0 ] * 256 + data [1 ]) / 10.0 ;
147+ therm = ((data [2 ] & 0x7F )* 256 + data [3 ]) / 10.0 ;
148+
149+ if (data [2 ] & 0x80 ) {
150+ therm *= -1 ;
151+ }
152+
153+ break ;
154+ default :
155+ fprintf (stderr , "Unknown device type 0x%x.\n" , type );
156+ return (1 );
157+ }
158+
159+ printf ("temperature:\n" );
160+ printf (" units: C\n" );
161+ printf (" value: %.1f\n" , therm );
162+ printf ("humidity:\n" );
163+ printf (" units: pct\n" );
164+ printf (" value: %.1f\n" , humid );
165+ } else {
166+ return (1 );
167+ }
147168 return 0 ;
148169}
0 commit comments