-
Notifications
You must be signed in to change notification settings - Fork 29
Open
Description
Hi Ole,
Thanks for creating the library and sharing it with us!
I have encountered a strange issue, whereby if I use delay() in my code, the library never returns true in dht_sensor.measure().
Any ideas?
Cheers,
Nick
[Update 18 nov 2019]
It appears the error comes about if delay() is used in every iteration of loop().
If I put a conditional so it is only used some of the time, all is well.
e.g.
**int loop_ctr** is defined in global scope
void loop() {
// do stuff
// ..
if (++loop_ctr % 10 == 0) {
// blink LEDs and use delay()
}
void loop( ) {
float temperature;
float humidity;
/* Measure temperature and humidity. If the functions returns
true, then a measurement is available. */
if ( measure_environment( &temperature, &humidity ) == true )
{
Serial.print( "T = " );
Serial.print( temperature, 1 );
Serial.print( " deg. C, H = " );
Serial.print( humidity, 1 );
Serial.println( "%" );
}
// the delay() calls below stop it from working
for (int i = 0; i < 2; i++) {
digitalWrite(LED_BUILTIN, HIGH);
delay(300);
digitalWrite(LED_BUILTIN, LOW);
delay(300);
}
}
/*
Poll for a measurement, keeping the state machine alive. Returns true if a measurement is available.
**** WARNING!!!! Using delay() in the code causes the DHT-nonblocking lib to always report the the sensor is not ready for reading!!!!
*/
static bool measure_environment(float *temperature, float *humidity) {
bool ok = false;
if ( millis( ) - measurement_timestamp > 3000ul ) {
// this never seems to return true, due to the delay() calls in loop()
if ( dht_sensor.measure( temperature, humidity ) == true ) {
measurement_timestamp = millis( );
ok = true;
}
}
return ok;
}
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels