aboutsummaryrefslogtreecommitdiff
path: root/examples/Scheduler_example03/Scheduler_example03.ino
blob: 115f7bc33ffd439c3afc05b3c02d566905cdc258 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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();
}