diff --git a/Adafruit_DHT_Driver/Adafruit_DHT.c b/Adafruit_DHT_Driver/Adafruit_DHT.c index 9d1746be..c1886313 100644 --- a/Adafruit_DHT_Driver/Adafruit_DHT.c +++ b/Adafruit_DHT_Driver/Adafruit_DHT.c @@ -41,28 +41,28 @@ int main(int argc, char **argv) return 1; if (argc != 3) { - printf("usage: %s [11|22|2302] GPIOpin#\n", argv[0]); - printf("example: %s 2302 4 - Read from an AM2302 connected to GPIO #4\n", argv[0]); - return 2; + printf("usage: %s [11|22|2302] GPIOpin#\n", argv[0]); + printf("example: %s 2302 4 - Read from an AM2302 connected to GPIO #4\n", argv[0]); + return 2; } int type = 0; if (strcmp(argv[1], "11") == 0) type = DHT11; if (strcmp(argv[1], "22") == 0) type = DHT22; if (strcmp(argv[1], "2302") == 0) type = AM2302; if (type == 0) { - printf("Select 11, 22, 2302 as type!\n"); - return 3; + printf("Select 11, 22, 2302 as type!\n"); + return 3; } int dhtpin = atoi(argv[2]); if (dhtpin <= 0) { - printf("Please select a valid GPIO pin #\n"); - return 3; + printf("Please select a valid GPIO pin #\n"); + return 3; } - printf("Using pin #%d\n", dhtpin); + fprintf(stderr, "Using pin #%d\n", dhtpin); readDHT(type, dhtpin); return 0; @@ -98,10 +98,10 @@ int readDHT(int type, int pin) { for (int i=0; i< MAXTIMINGS; i++) { counter = 0; while ( bcm2835_gpio_lev(pin) == laststate) { - counter++; - //nanosleep(1); // overclocking might change this? + counter++; + //nanosleep(1); // overclocking might change this? if (counter == 1000) - break; + break; } laststate = bcm2835_gpio_lev(pin); if (counter == 1000) break; @@ -124,25 +124,46 @@ int readDHT(int type, int pin) { } #endif - 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]); + printf("data:\n"); + printf(" j: %d\n", j); + printf(" d:\n"); + for (int i = 0; i < 5; i++) { + printf(" - %x\n", data[i]); + } if ((j >= 39) && (data[4] == ((data[0] + data[1] + data[2] + data[3]) & 0xFF)) ) { // yay! - if (type == DHT11) - printf("Temp = %d *C, Hum = %d \%\n", data[2], data[0]); - if (type == DHT22) { - float f, h; - h = data[0] * 256 + data[1]; - h /= 10; - - f = (data[2] & 0x7F)* 256 + data[3]; - f /= 10.0; - if (data[2] & 0x80) f *= -1; - printf("Temp = %.1f *C, Hum = %.1f \%\n", f, h); - } - return 1; - } + float therm, humid; + + switch (type) { + case DHT11: + therm = (float) data[2]; + humid = (float) data[0]; + break; + case DHT22: + humid = (data[0] * 256 + data[1]) / 10.0; + therm = ((data[2] & 0x7F)* 256 + data[3]) / 10.0; + + if (data[2] & 0x80) { + therm *= -1; + } + + break; + default: + fprintf(stderr, "Unknown device type 0x%x.\n", type); + return(1); + } + + printf("temperature:\n"); + printf(" units: C\n"); + printf(" value: %.1f\n", therm); + printf("humidity:\n"); + printf(" units: pct\n"); + printf(" value: %.1f\n", humid); + } else { + return(1); + } return 0; }