single_led.h 881 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. #ifndef _SINGLE_LED_H_
  2. #define _SINGLE_LED_H_
  3. #include "led.h"
  4. #include <driver/gpio.h>
  5. #include <led_strip.h>
  6. #include <esp_timer.h>
  7. #include <atomic>
  8. #include <mutex>
  9. class SingleLed : public Led {
  10. private:
  11. std::mutex mutex_;
  12. TaskHandle_t blink_task_ = nullptr;
  13. led_strip_handle_t led_strip_ = nullptr;
  14. uint8_t r_ = 0, g_ = 0, b_ = 0;
  15. int blink_counter_ = 0;
  16. int blink_interval_ms_ = 0;
  17. esp_timer_handle_t blink_timer_ = nullptr;
  18. void StartBlinkTask(int times, int interval_ms);
  19. void OnBlinkTimer();
  20. void BlinkOnce();
  21. void Blink(int times, int interval_ms);
  22. void TurnOn();
  23. void TurnOff();
  24. void SetColor(uint8_t r, uint8_t g, uint8_t b);
  25. public:
  26. SingleLed(gpio_num_t gpio);
  27. void StartContinuousBlink(int interval_ms);
  28. virtual ~SingleLed();
  29. void OnStateChanged() override;
  30. };
  31. #endif // _SINGLE_LED_H_