thermferm/devices.c

changeset 644
07cc86900473
parent 643
586d376ab629
child 645
49eb753a958b
--- 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)

mercurial