summaryrefslogtreecommitdiff
path: root/examples/Scheduler_example03
diff options
context:
space:
mode:
authorAnatoli Arkhipenko <arkhipenko@hotmail.com>2015-12-23 17:04:21 -0500
committerAnatoli Arkhipenko <arkhipenko@hotmail.com>2015-12-23 17:12:06 -0500
commit965f1b768d3d0675e2483ca62fa6d0565c389a31 (patch)
tree8bae4e1eee8275efaab252b35cb26c6a304fb015 /examples/Scheduler_example03
parent42d8d776e3fdb3c48700a3d88c8615dbf81da23f (diff)
Version 2.0.0 support for layered task prioritizationv2.0.0
* _TASK_PRIORITY - support for layered task prioritization
Diffstat (limited to 'examples/Scheduler_example03')
-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