#include <Arduino_FreeRTOS.h>
typedef struct {
int pin;
TickType_t bright_period, dim_period;
} light_t;
static int pin_start = 9;
static int pin_end = 12;
static light_t light1 = {9, 1000, 1000};
static light_t light2 = {10, 200, 200};
static light_t light3 = {11, 200, 1000};
void task_blink(void *arg) {
light_t *light = (int)arg;
auto last_time = xTaskGetTickCount();
while (true) {
digitalWrite(light->pin, HIGH);
vTaskDelayUntil(&last_time, light->bright_period / portTICK_PERIOD_MS);
digitalWrite(light->pin, LOW);
vTaskDelayUntil(&last_time, light->dim_period / portTICK_PERIOD_MS);
}
}
void setup() {
for (int i = pin_start; i < pin_end; i++) {
pinMode(i, OUTPUT);
}
xTaskCreate(task_blink, "blink slowly", 64, (void *)&light1, 1, NULL);
xTaskCreate(task_blink, "blink quickly", 64, (void *)&light2, 1, NULL);
xTaskCreate(task_blink, "blink unevenly", 64, (void *)&light3, 1, NULL);
}
void loop() {
}