#include <Arduino_FreeRTOS.h>
#include <semphr.h>
// Declaración del semáforo
SemaphoreHandle_t xSemaphore;
void Task1(void *pvParameters) {
for (;;) {
// Enciende el LED
digitalWrite(13, HIGH);
// Espera 2 segundos
vTaskDelay(2000 / portTICK_PERIOD_MS);
xSemaphoreGive(xSemaphore);
// Aquí se debe liberar el semáforo
//
}
}
void Task2(void *pvParameters) {
for (;;) {
// Aquí se debe tomar el semáforo
if (xSemaphoreTake(xSemaphore, portMAX_DELAY) == pdTRUE){
// Apaga el LED después de 500 ms
vTaskDelay(500 / portTICK_PERIOD_MS);
digitalWrite(13, LOW);
}
}
}
void setup() {
pinMode(13, OUTPUT);
// Aquí se debe crear el semáforo
xSemaphore = xSemaphoreCreateBinary();
// Crear tareas
xTaskCreate(Task1, "LED ON", 128, NULL, 1, NULL);
xTaskCreate(Task2, "LED OFF", 128, NULL, 1, NULL);
// Inicia el scheduler
vTaskStartScheduler();
}
void loop() {}