diff options
Diffstat (limited to 'examples/Scheduler_example03/Scheduler_example03.ino')
| -rw-r--r-- | examples/Scheduler_example03/Scheduler_example03.ino | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/examples/Scheduler_example03/Scheduler_example03.ino b/examples/Scheduler_example03/Scheduler_example03.ino new file mode 100644 index 0000000..115f7bc --- /dev/null +++ b/examples/Scheduler_example03/Scheduler_example03.ino @@ -0,0 +1,78 @@ +/** + * TaskScheduler Test of OnEnable and OnDisable methods and illustration of using wrapper tasks for timout purposes + * + * A wrapper task runs every 10 seconds and initiates the test case + * Another task is run once for 5 seconds, and serves as a LED blinking timeout - 5 seconds + * Finally, a dedicated task which controls LED is running periodically until stopped, and makes the LED blink with 0.5 to 1 second interval. + * + */ + +#define _TASK_SLEEP_ON_IDLE_RUN +#include <TaskScheduler.h> + +#define LEDPIN 13 + +Scheduler ts; + +// Callback methods prototypes +void WrapperCallback(); +bool BlinkOnEnable(); +void BlinkOnDisable(); +void LEDOn(); +void LEDOff(); + +// Tasks +Task tWrapper(10000L, TASK_FOREVER, &WrapperCallback, &ts, true); +Task tBlink(5000, TASK_ONCE, NULL, &ts, false, &BlinkOnEnable, &BlinkOnDisable); +Task tLED(0, TASK_FOREVER, NULL, &ts, false, NULL, &LEDOff); + +void WrapperCallback() { + tBlink.restartDelayed(); // LED blinking is initiated + //every 30 seconds for 5 seconds +} + + +// Upon being enabled, tBlink will define the parameters +// and enable LED blinking task, which actually controls +// the hardware (LED in this example) +bool BlinkOnEnable() { + tLED.setInterval( 500 + random(501) ); + tLED.setCallback( &LEDOn); + tLED.enable(); + + return true; // Task should be enabled +} + +// tBlink does not really need a callback function +// since it just waits for 5 seconds for the first +// and only iteration to occur. Once the iteration +// takes place, tBlink is disabled by the Scheduler, +// thus executing its OnDisable method below. + +void BlinkOnDisable() { + tLED.disable(); +} + +void LEDOn () { + digitalWrite(LEDPIN, HIGH); + tLED.setCallback( &LEDOff); +} + +void LEDOff () { + digitalWrite(LEDPIN, LOW); + tLED.setCallback( &LEDOn); +} + +// Note that LEDOff method serves as OnDisable method +// to make sure the LED is turned off when the tBlink +// task finishes (or disabled ahead of time) + +void setup() { +// put your setup code here, to run once: + pinMode(LEDPIN, OUTPUT); +} + +void loop() { +// put your main code here, to run repeatedly: + ts.execute(); +}
\ No newline at end of file |
