ESP32 Native version of Blinky, featureful controller code for WS2811/WS2812/NeoPixels
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

63 строки
1.1KB

  1. #pragma once
  2. #include <cstdint>
  3. #include <string>
  4. struct Color {
  5. uint8_t r, g, b;
  6. } __attribute__ ((packed));
  7. typedef uint16_t Fixed;
  8. constexpr int factor = 65536;
  9. constexpr int shift = 16;
  10. class Pattern {
  11. public:
  12. virtual ~Pattern() = default;
  13. struct State {
  14. virtual ~State() = default;
  15. };
  16. virtual State* start(int) const = 0;
  17. virtual void step(Color[], int, State*) const = 0;
  18. };
  19. class LEDStrip {
  20. public:
  21. LEDStrip(int length = 0);
  22. ~LEDStrip() { if (state) delete state; }
  23. void step();
  24. virtual void show() = 0;
  25. virtual void length_changing(int) {};
  26. void setPattern(const Pattern *_pattern) { pattern = _pattern; update_state(); }
  27. const Pattern* getPattern() const { return pattern; }
  28. void setLength(int length);
  29. int getLength() const { return length; }
  30. protected:
  31. int length;
  32. const Pattern *pattern;
  33. Color *pixels;
  34. private:
  35. void update_state();
  36. Pattern::State *state;
  37. };
  38. class TerminalLEDs : public LEDStrip {
  39. public:
  40. TerminalLEDs(int length = 0) : LEDStrip(length) {}
  41. void show();
  42. };