gpio_led.h 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  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, int output_invert=0);
  14. virtual ~GpioLed();
  15. void OnStateChanged() override;
  16. private:
  17. std::mutex mutex_;
  18. TaskHandle_t blink_task_ = nullptr;
  19. ledc_channel_config_t ledc_channel_ = {0};
  20. bool ledc_initialized_ = false;
  21. uint32_t duty_ = 0;
  22. int blink_counter_ = 0;
  23. int blink_interval_ms_ = 0;
  24. esp_timer_handle_t blink_timer_ = nullptr;
  25. bool fade_up_ = true;
  26. void StartBlinkTask(int times, int interval_ms);
  27. void OnBlinkTimer();
  28. void BlinkOnce();
  29. void Blink(int times, int interval_ms);
  30. void StartContinuousBlink(int interval_ms);
  31. void TurnOn();
  32. void TurnOff();
  33. void SetBrightness(uint8_t brightness);
  34. void StartFadeTask();
  35. void OnFadeEnd();
  36. static bool FadeCallback(const ledc_cb_param_t *param, void *user_arg);
  37. };
  38. #endif // _GPIO_LED_H_