--- a/thermferm/devices.c Fri Mar 22 11:48:35 2024 +0100 +++ b/thermferm/devices.c Sat Mar 23 09:31:01 2024 +0100 @@ -77,6 +77,7 @@ void dht11Read(void) { int tries = 5; unsigned short got_correct_data = 0; + struct timespec ts; if (dht11_pin == -1) return; @@ -92,13 +93,19 @@ */ pinMode(dht11_pin, OUTPUT); digitalWrite(dht11_pin, HIGH); - usleep(1000); + /* 1 mSec */ + ts.tv_sec = 0; + ts.tv_nsec = 1000000; + nanosleep(&ts, &ts); /* * Low for at least 18 milliseconds */ digitalWrite(dht11_pin, LOW); - usleep(20000); + /* 20 mSec */ + ts.tv_sec = 0; + ts.tv_nsec = 20 * 1000000; + nanosleep(&ts, &ts); digitalWrite(dht11_pin, HIGH); pinMode(dht11_pin, INPUT); @@ -107,9 +114,17 @@ */ for (i=0; i<MAXTIMINGS; i++) { counter = 0; + /* 10 uS */ + ts.tv_sec = 0; + ts.tv_nsec = 10 * 1000; +// nanosleep(&ts, NULL); delayMicroseconds(10); while (sizecvt(digitalRead(dht11_pin)) == laststate) { counter++; + /* 1 uS */ + ts.tv_sec = 0; + ts.tv_nsec = 1000; +// nanosleep(&ts, NULL); delayMicroseconds(1); if (counter == 255) { break; @@ -164,6 +179,7 @@ dht11_temperature = t; dht11_humidity = h; dht11_valid = TRUE; + syslog(LOG_NOTICE, "dht11 t:%d h:%d tries:%d", t, h, 6-tries); } else { tries--; if (tries == 0)