#include <FreeRTOS.h>
#include <task.h>
#include <semphr.h>
#include <Arduino.h>
#define LED1_PIN PA5 /* Rouge */
#define LED2_PIN PA6 /* Verte */
SemaphoreHandle_t xSemLED1;
SemaphoreHandle_t xSemLED2;
void vTaskLED1(void *pvParameters);
void vTaskLED2(void *pvParameters);
void setup() {
pinMode(LED1_PIN, OUTPUT);
pinMode(LED2_PIN, OUTPUT);
digitalWrite(LED1_PIN, LOW);
digitalWrite(LED2_PIN, LOW);
xSemLED1 = xSemaphoreCreateBinary();
xSemLED2 = xSemaphoreCreateBinary();
xSemaphoreGive(xSemLED1);
xTaskCreate(vTaskLED1, "LED1", 128, NULL, 3, NULL);
xTaskCreate(vTaskLED2, "LED2", 128, NULL, 2, NULL);
vTaskStartScheduler();
}
void loop() {}
void vTaskLED1(void *pvParameters) {
for (;;) {
xSemaphoreTake(xSemLED1, portMAX_DELAY);
digitalWrite(LED1_PIN, HIGH);
vTaskDelay(pdMS_TO_TICKS(500));
digitalWrite(LED1_PIN, LOW);
xSemaphoreGive(xSemLED2);
}
}
void vTaskLED2(void *pvParameters) {
for (;;) {
xSemaphoreTake(xSemLED2, portMAX_DELAY);
digitalWrite(LED2_PIN, HIGH);
vTaskDelay(pdMS_TO_TICKS(500));
digitalWrite(LED2_PIN, LOW);
xSemaphoreGive(xSemLED1); /* loop back to LED1 */
}
}