gpio_led.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #ifndef _GPIO_LED_H_
  2. #define _GPIO_LED_H_
  3. #include <freertos/FreeRTOS.h>
  4. #include <freertos/task.h>
  5. #include "led.h"
  6. #include <driver/gpio.h>
  7. #include <driver/ledc.h>
  8. #include <esp_timer.h>
  9. #include <atomic>
  10. #include <mutex>
  11. class GpioLed : public Led {
  12. public:
  13. GpioLed(gpio_num_t gpio);
  14. GpioLed(gpio_num_t gpio, int output_invert);
  15. GpioLed(gpio_num_t gpio, int output_invert, ledc_timer_t timer_num, ledc_channel_t channel);
  16. virtual ~GpioLed();
  17. void OnStateChanged() override;
  18. void TurnOn();
  19. void TurnOff();
  20. void SetBrightness(uint8_t brightness);
  21. private:
  22. std::mutex mutex_;
  23. TaskHandle_t blink_task_ = nullptr;
  24. ledc_channel_config_t ledc_channel_ = {0};
  25. bool ledc_initialized_ = false;
  26. uint32_t duty_ = 0;
  27. int blink_counter_ = 0;
  28. int blink_interval_ms_ = 0;
  29. esp_timer_handle_t blink_timer_ = nullptr;
  30. bool fade_up_ = true;
  31. void StartBlinkTask(int times, int interval_ms);
  32. void OnBlinkTimer();
  33. void BlinkOnce();
  34. void Blink(int times, int interval_ms);
  35. void StartContinuousBlink(int interval_ms);
  36. void StartFadeTask();
  37. void OnFadeEnd();
  38. static bool IRAM_ATTR FadeCallback(const ledc_cb_param_t *param, void *user_arg);
  39. };
  40. #endif // _GPIO_LED_H_