Is it possible to delay a task inside a function that is called only once (meaning, it's not inside the loop) without using delay()?
This library I'm using, for reading sensor measurements via serial has a delay() in it. I want to get rid of it, but I don't how to do it, because the library's function is not looped.
I guess the simple solution would be to move the library functions inside the loop, so I can do a simple check with millis() and run the delayed part as soon as 250 ms have passed. I would like to improve this library though and do a simple, single call for sensor data that doesn't not hold up the entire program.
This is the function with the delay:
uint16_t COZIR::Request(char* s)
{
Command(s);
// empty buffer
buffer[0] = '\0';
// read answer; there may be a 100ms delay!
// TODO: PROPER TIMEOUT CODE.
delay(250);
int idx = 0;
while(CZR_Serial.available())
{
buffer[idx++] = CZR_Serial.read();
}
buffer[idx] = '\0';
uint16_t rv = 0;
switch(buffer[1])
{
case 'T' :
rv = atoi(&buffer[5]);
if (buffer[4] == 1) rv += 1000;
break;
default :
rv = atoi(&buffer[2]);
break;
}
return rv;
}
I've had a look at the SoftTimer library, but it requires sketches to be written very differently (without a loop). I'm also not sure if I can even pass arguments to delayed tasks with that library.
delay
call? Does it harm your program?startMeasurement
andreadMeasurement
method. Maybe add ameasurementReady
method for checking if the measurement is done.