Răsfoiți Sursa

v2.6.0 - Timeout example

BuildTools 8 ani în urmă
părinte
comite
7396f8a16d

+ 90 - 0
examples/Scheduler_example17_Timeout/Scheduler_example17_Timeout.ino

@@ -0,0 +1,90 @@
+/*
+    This eaxmple illustrates the use of overall Task timeout functionality:
+
+    Task 1 - runs every 1 seconds and times out in 10 seconds
+    Task 2 - runs every 5 seconds and resets the timeout every run, so runs continuosly even though the timeout is set to 10 seconds
+*/
+
+
+// #define _TASK_TIMECRITICAL      // Enable monitoring scheduling overruns
+#define _TASK_SLEEP_ON_IDLE_RUN // Enable 1 ms SLEEP_IDLE powerdowns between tasks if no callback methods were invoked during the pass 
+//#define _TASK_STATUS_REQUEST    // Compile with support for StatusRequest functionality - triggering tasks on status change events in addition to time only
+// #define _TASK_WDT_IDS           // Compile with support for wdt control points and task ids
+// #define _TASK_LTS_POINTER       // Compile with support for local task storage pointer
+// #define _TASK_PRIORITY          // Support for layered scheduling priority
+// #define _TASK_MICRO_RES         // Support for microsecond resolution
+// #define _TASK_STD_FUNCTION      // Support for std::function (ESP8266 ONLY)
+// #define _TASK_DEBUG             // Make all methods and variables public for debug purposes
+// #define _TASK_INLINE         // Make all methods "inline" - needed to support some multi-tab, multi-file implementations
+#define _TASK_TIMEOUT
+
+#include <TaskScheduler.h>
+
+Scheduler ts;
+
+void task1Callback();
+void task1OnDisable();
+void task2Callback();
+void task2OnDisable();
+
+Task t1(1 * TASK_SECOND, TASK_FOREVER, &task1Callback, &ts, false, NULL, &task1OnDisable);
+Task t2(5 * TASK_SECOND, TASK_FOREVER, &task2Callback, &ts, false, NULL, &task2OnDisable);
+
+void setup() {
+  // put your setup code here, to run once:
+  Serial.begin(115200);
+
+  Serial.println("TaskScheduler Timeout example");
+  Serial.println("=============================");
+
+  t1.setTimeout(10 * TASK_SECOND);
+  t2.setTimeout(10 * TASK_SECOND);
+
+  ts.enableAll();
+}
+
+void loop() {
+  // put your main code here, to run repeatedly:
+  ts.execute();
+}
+
+
+void task1Callback() {
+  Serial.print("Task 1:\t");
+  Serial.print(millis());
+  Serial.print(": t/out=");
+  Serial.print(t1.getTimeout());
+  Serial.print("\tms until t/out=");
+  Serial.println( t1.untilTimeout());
+
+}
+void task1OnDisable() {
+  if (t1.timedOut()) {
+    Serial.println("Task 1 has timed out. Restarting");
+    t1.setInterval(1 * TASK_SECOND);
+    t1.setIterations(15);
+    t1.setTimeout(TASK_NOTIMEOUT);
+    t1.enable(); 
+  }
+  else {
+    Serial.println("Task 1 has been disabled");
+  }
+}
+
+void task2Callback() {
+  Serial.print("Task 2:\t");
+  Serial.print(millis());
+  Serial.print(": t/out=");
+  Serial.print(t2.getTimeout());
+  Serial.print("\tms until t/out=");
+  Serial.println( t2.untilTimeout());
+  t2.resetTimeout();
+}
+void task2OnDisable() {
+  if (t2.timedOut()) {
+    Serial.println("Task 2 has timed out");
+  }
+  else {
+    Serial.println("Task 2 has been disabled");
+  }
+}