#define LED1_PIN 4
#define LED2_PIN 16
typedef enum {
READY,
SLEEP
} TaskState;
typedef struct {
void (*taskFunc)(void);
TaskState state;
} TCB;
void taskLED1(void) {
static unsigned long lastToggle = 0;
static bool ledState = false;
if (millis() - lastToggle >= 500) {
lastToggle = millis();
ledState = !ledState;
digitalWrite(LED1_PIN, ledState);
}
}
void taskLED2(void) {
static unsigned long lastToggle = 0;
static bool ledState = false;
if (millis() - lastToggle >= 300) {
lastToggle = millis();
ledState = !ledState;
digitalWrite(LED2_PIN, ledState);
}
}
#define NUM_TASKS 2
TCB taskTable[NUM_TASKS] = {
{ taskLED1, READY },
{ taskLED2, READY }
};
void setup() {
pinMode(LED1_PIN, OUTPUT);
pinMode(LED2_PIN, OUTPUT);
}
void loop() {
for (int i = 0; i < NUM_TASKS; i++) {
if (taskTable[i].state == READY) {
taskTable[i].taskFunc();
}
}
}