ESP32 Native version of Blinky, featureful controller code for WS2811/WS2812/NeoPixels
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

60 rindas
1008B

  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() {};
  13. struct State {};
  14. virtual State* start(int) const = 0;
  15. virtual void step(Color[], int, State*) const = 0;
  16. };
  17. class LEDStrip {
  18. public:
  19. LEDStrip(int length = 0);
  20. void step();
  21. virtual void show() = 0;
  22. virtual void length_changing(int) {};
  23. void setPattern(const Pattern *_pattern) { pattern = _pattern; update_state(); }
  24. const Pattern* getPattern() const { return pattern; }
  25. void setLength(int length);
  26. int getLength() const { return length; }
  27. protected:
  28. int length;
  29. const Pattern *pattern;
  30. Color *pixels;
  31. private:
  32. void update_state();
  33. Pattern::State *state;
  34. };
  35. class TerminalLEDs : public LEDStrip {
  36. public:
  37. TerminalLEDs(int length = 0) : LEDStrip(length) {}
  38. void show();
  39. };