#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/event_groups.h"
#include "driver/gpio.h"
// Pin del LED (ajústalo según tu hardware)
#define LED_PIN GPIO_NUM_2
const int EVENT_BIT_LED_ON = BIT0;
const int EVENT_BIT_LED_OFF = BIT1;
// Declaración del grupo de eventos
EventGroupHandle_t eventGroup;
// Tarea para encender el LED
void led_on_task(void *pvParameter) {
while (1) {
// Espera al evento para encender el LED
EventBits_t bits = xEventGroupWaitBits(
eventGroup,
EVENT_BIT_LED_ON, // Bit que espera
pdTRUE, // Limpia el bit después de procesarlo
pdFALSE, // No espera múltiples bits
portMAX_DELAY // Espera indefinidamente
);
if (bits & EVENT_BIT_LED_ON) {
gpio_set_level(LED_PIN, 1); // Enciende el LED
printf("LED encendido\n");
vTaskDelay(pdMS_TO_TICKS(1000)); // Espera 1 segundo
// Establece el evento para apagar el LED
xEventGroupSetBits(eventGroup, EVENT_BIT_LED_OFF);
}
}
}
// Tarea para apagar el LED
void led_off_task(void *pvParameter) {
while (1) {
// Espera al evento para apagar el LED
EventBits_t bits = xEventGroupWaitBits(
eventGroup,
EVENT_BIT_LED_OFF, // Bit que espera
pdTRUE, // Limpia el bit después de procesarlo
pdFALSE, // No espera múltiples bits
portMAX_DELAY // Espera indefinidamente
);
if (bits & EVENT_BIT_LED_OFF) {
gpio_set_level(LED_PIN, 0); // Apaga el LED
printf("LED apagado\n");
vTaskDelay(pdMS_TO_TICKS(1000)); // Espera 1 segundo
// Establece el evento para encender el LED
xEventGroupSetBits(eventGroup, EVENT_BIT_LED_ON);
}
}
}
void app_main() {
// Configuración del pin del LED
esp_rom_gpio_pad_select_gpio(LED_PIN);
gpio_set_direction(LED_PIN, GPIO_MODE_OUTPUT);
// Inicialización del grupo de eventos
eventGroup = xEventGroupCreate();
if (eventGroup == NULL) {
printf("Error al crear el grupo de eventos\n");
return;
}
// Crear las tareas
xTaskCreate(led_on_task, "LED On Task", 2048, NULL, 1, NULL);
xTaskCreate(led_off_task, "LED Off Task", 2048, NULL, 1, NULL);
// Establece el evento inicial para encender el LED
xEventGroupSetBits(eventGroup, EVENT_BIT_LED_ON);
}