12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- #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);
- }
|