When starting a one-shot software timer, I would like the callback function to perform different tasks depending on where the timer was started. For example read from a different sensor. How can this be achieved? Is there a way to pass parameters to the callback function?
Have it use a global variable which you can change?
1 Like
It could also just advance a FSM and each step then calls a separate function?
2 Likes
Two possible solutions have been given - if you have been able to try these out could you now mark this thread as Solved by ticking Solution?
As an illustration of the above ideas:
int sensorState; //global variable
// pre-declare timer function
void time_to_read_sensors()
{
switch (sensorState)
{
case 1:
//read sensor1 in case of state 1
break;
case 2:
//read sensor2 in case of state 2
break;
}
}
//declare timer object one shot
Timer readmysensors(1000, time_to_read_sensors, true);
in your loop()
sensorState = 1;
readmysensors.start();
One word of warning - timer handler functions only get a small amount of stack assigned so you need to keep the code short and not call functions which might require a lot of memory. In that case, you would need to employ a FSM approach to throw calling the functions back to the loop() by setting another state for the loop to handle.
2 Likes