Wemos D1 Mini Frimware zur Steuerung einer RGBW-LED-Lampe
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

LEDStripManager.cpp 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. /*
  2. * LEDStripManager.cpp
  3. *
  4. * Created on: 19.06.2026
  5. * Author: FSmilari
  6. */
  7. #include "LEDStripManager.h"
  8. /*
  9. * Constructor
  10. */
  11. LEDStripManager::LEDStripManager(uint16_t numLeds, uint8_t pin, ConfigManager &configManager)
  12. : strip(numLeds, pin, NEO_GRBW + NEO_KHZ800), configManager(configManager) {
  13. }
  14. /*
  15. * Destructor
  16. */
  17. LEDStripManager::~LEDStripManager() {
  18. }
  19. void LEDStripManager::begin() {
  20. pinMode(LED_STRIP_POWER_PIN, OUTPUT);
  21. pinMode(LED_STRIP_DATA_PIN, OUTPUT);
  22. digitalWrite(LED_STRIP_POWER_PIN, HIGH); // LED zunächst EIN
  23. Config cfg = configManager.getConfig();
  24. if (cfg.version != CONFIG_VERSION) {
  25. // Initalize cfg with defaults
  26. cfg = configManager.setToDefaultConfig();
  27. configManager.loadConfig();
  28. cfg = configManager.getConfig();
  29. }
  30. strip.begin(); // Initialisiert den NeoPixel-Streifen
  31. strip.clear();
  32. strip.show(); // Setzt alle LEDs auf "aus"
  33. if (cfg.mode == LM_SINGLE_COLOR) {
  34. strip.setBrightness(cfg.brightness); // Helligkeit (0 bis 255)
  35. setAll(cfg.color.r, cfg.color.g, cfg.color.b, cfg.color.w);
  36. } else {
  37. // Setzt die erste LED (Index 0) auf rotes Licht (Rot, Grün, Blau, Weiss)
  38. strip.setPixelColor(0, strip.Color(255, 0, 0, 0));
  39. // Setzt die zweite LED auf grün
  40. strip.setPixelColor(1, strip.Color(0, 255, 0, 0));
  41. strip.setPixelColor(2, strip.Color(0, 0, 255, 0));
  42. strip.setPixelColor(3, strip.Color(0, 0, 0, 255));
  43. // Schickt die Farbinformationen zum LED-Streifen
  44. show();
  45. }
  46. }
  47. void LEDStripManager::clear() {
  48. strip.clear();
  49. }
  50. void LEDStripManager::show() {
  51. strip.show();
  52. }
  53. void LEDStripManager::on() {
  54. Serial.println("LEDStripManager LED ON");
  55. digitalWrite(LED_STRIP_POWER_PIN, HIGH);
  56. delay(50);
  57. digitalWrite(LED_STRIP_DATA_PIN, HIGH);
  58. delay(50);
  59. begin();
  60. }
  61. void LEDStripManager::off() {
  62. Serial.println("LEDStripManager LED OFF");
  63. clear();
  64. show();
  65. delay(50);
  66. digitalWrite(LED_STRIP_POWER_PIN, LOW); // LED zunächst AUS
  67. digitalWrite(LED_STRIP_DATA_PIN, LOW);
  68. }
  69. void LEDStripManager::setBrightness(uint8_t brightness) {
  70. strip.setBrightness(brightness);
  71. strip.show();
  72. }
  73. void LEDStripManager::setPixel(uint16_t index, uint8_t red, uint8_t green, uint8_t blue, uint8_t white) {
  74. if (index >= strip.numPixels()) {
  75. return;
  76. }
  77. strip.setPixelColor(index, strip.Color(red, green, blue, white));
  78. strip.show();
  79. }
  80. void LEDStripManager::setAll(uint8_t red, uint8_t green, uint8_t blue, uint8_t white) {
  81. for (uint16_t i = 0; i < strip.numPixels(); i++) {
  82. strip.setPixelColor(i, strip.Color(red, green, blue, white));
  83. }
  84. strip.show();
  85. }
  86. void LEDStripManager::onModeChange(LEDModes mode) {
  87. Config cfg = configManager.getConfig();
  88. cfg.mode = mode;
  89. configManager.saveConfig(cfg);
  90. //TODO: react on mode change on strip
  91. }
  92. void LEDStripManager::onColorChange(uint8_t red, uint8_t green, uint8_t blue, uint8_t white) {
  93. Config cfg = configManager.getConfig();
  94. cfg.color.r = red;
  95. cfg.color.g = green;
  96. cfg.color.b = blue;
  97. cfg.color.w = white;
  98. configManager.saveConfig(cfg);
  99. this->setAll(red, green, blue, white);
  100. }
  101. void LEDStripManager::onBrightnessChange(uint8_t brightness) {
  102. Config cfg = configManager.getConfig();
  103. cfg.brightness = brightness;
  104. configManager.saveConfig(cfg);
  105. this->setBrightness(brightness);
  106. }
  107. uint32_t
  108. LEDStripManager::wheel(uint8_t pos) {
  109. pos = 255 - pos;
  110. if (pos < 85) {
  111. return strip.Color(255 - pos * 3, 0, pos * 3);
  112. }
  113. if (pos < 170) {
  114. pos -= 85;
  115. return strip.Color(0, pos * 3, 255 - pos * 3);
  116. }
  117. pos -= 170;
  118. return strip.Color(pos * 3, 255 - pos * 3, 0);
  119. }
  120. void LEDStripManager::rainbow(uint8_t wait) {
  121. for (long firstPixelHue = 0; firstPixelHue < 5 * 65536; firstPixelHue += 256) {
  122. for (uint16_t i = 0; i < strip.numPixels(); i++) {
  123. uint32_t pixelHue = firstPixelHue + (i * 65536L / strip.numPixels());
  124. strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue)));
  125. }
  126. strip.show();
  127. delay(wait);
  128. }
  129. }