aboutsummaryrefslogtreecommitdiff
path: root/examples/Scheduler_example03/Scheduler_example03.ino
diff options
context:
space:
mode:
Diffstat (limited to 'examples/Scheduler_example03/Scheduler_example03.ino')
-rw-r--r--examples/Scheduler_example03/Scheduler_example03.ino78
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