-
Notifications
You must be signed in to change notification settings - Fork 21
Open
Description
It may be good to have a generic pattern for tasks like this (beeper, LEDs, watchdog, ...) including knitter, e.g.:
// Abstract class for Task
class Task {
public:
virtual void run() = 0;
}
...
// Classes that needs to be scheduled implements run() method
class Beeper: public Task {
public:
void run() {
// non-blocking code called from the scheduler
}
...
void beep(uint8_t repeats){
}
...
}
...
class Scheduler {
public:
bool register(const Task &task) {
// Add task to scheduler list
}
void schedule() {
// Call run() method for each registered task
}
}
setup() {
// Objects to schedule
Beeper beeper;
Knitter knitter;
Led ledA, ledB;
SerialCom serialCom;
Watchdog watchdog;
// Main Scheduler
Scheduler scheduler;
...
scheduler.register(beeper);
scheduler.register(knitter);
scheduler.register(ledA); // blinking (vs solid) led as "firmware alive" indication
scheduler.register(ledB);
scheduler.register(serialCom); // call PacketSerial.update()
scheduler.register(watchdog);
...
}
loop () {
scheduler.schedule()
}