#include "led.h" #include "driver/gpio.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "esp_log.h" unsigned int blinkLed = 0; #define BLINK_GPIO 2 // Interface function to blink the green LED void blinkTheLED() { blinkLed++; } enum { MODE_INACTIVE, MODE_ON, MODE_OFF, MODE_SWITCH, // Just have been off }; void rxLed() { static unsigned long timer = 0; static int mode = MODE_INACTIVE; switch (mode) { case MODE_INACTIVE: if (blinkLed > 0) { blinkLed--; mode = MODE_ON; timer = 1; gpio_set_level(BLINK_GPIO, 0); // On } break; case MODE_ON: timer--; if (timer == 0) { mode = MODE_OFF; gpio_set_level(BLINK_GPIO, 1); timer = 1; } break; case MODE_OFF: timer--; if (timer == 0) { mode = MODE_INACTIVE; gpio_set_level(BLINK_GPIO, 1); break; } } } static void led_task(void *pvParameter) { ESP_LOGI("LED", "Task started."); while (1) { rxLed(); vTaskDelay(200 / portTICK_PERIOD_MS); } vTaskDelete(NULL); } void initLed() { gpio_set_level(BLINK_GPIO, 0); gpio_pad_select_gpio(BLINK_GPIO); gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT); xTaskCreatePinnedToCore(&led_task, "Led_Task", 8192, NULL, tskIDLE_PRIORITY + 1, NULL, 0); }