#include <Adafruit_NeoPixel.h>
#include <Arduino_FreeRTOS.h>
#include <semphr.h>
#include <task.h>
#define numPixels 12
const uint8_t pins[2] = {21, 20};
const char *taskName[2] = {"1", "2"};
SemaphoreHandle_t UncleSem;
TaskHandle_t ring1TaskHandle;
TaskHandle_t ring2TaskHandle;
void setup() {
Serial.begin(115200);
UncleSem = xSemaphoreCreateBinary();
xSemaphoreGive(UncleSem);
xTaskCreate(infinity1, taskName[0], configMINIMAL_STACK_SIZE, NULL, 0, &ring1TaskHandle);
xTaskCreate(infinity2, taskName[1], configMINIMAL_STACK_SIZE, NULL, 0, &ring2TaskHandle);
vTaskStartScheduler();
}
void infinity1(void *p) {
Adafruit_NeoPixel loading(numPixels, pins[0]);
loading.begin();
for (;;) {
xSemaphoreTake(UncleSem, portMAX_DELAY);
for (uint8_t i = 0; i < 4; i++) {
loading.setPixelColor(i, 255, 255, 255);
loading.show();
delay(500);
loading.clear();
}
xSemaphoreGive(UncleSem);
vTaskDelay(pdMS_TO_TICKS(50));
}
vTaskDelete(NULL);
}
void infinity2(void *p) {
Adafruit_NeoPixel loading(numPixels, pins[1]);
loading.begin();
for (;;) {
xSemaphoreTake(UncleSem, portMAX_DELAY);
for (uint8_t i = 9; i > 5; i--) {
loading.setPixelColor(i, 255, 255, 255);
loading.show();
delay(500);
loading.clear();
}
xSemaphoreGive(UncleSem);
vTaskDelay(pdMS_TO_TICKS(50));
}
vTaskDelete(NULL);
}
void loop() {
// Empty loop, as FreeRTOS is managing the tasks
}