Как заставить неопиксель исчезать с помощью ColorWipe?

led

Я пытаюсь добиться затухания, когда светодиод включается/выключается во время вытеснения цвета, а не просто внезапно включается/выключается. Хотя я не совсем понимаю, как это сделать.

#include <Adafruit_NeoPixel.h>

Adafruit_NeoPixel strip = Adafruit_NeoPixel(8, 3, NEO_RGBW + NEO_KHZ800);
void setup() {
  strip.begin();
}

void loop() {
  colorWipe(strip.Color(255, 255, 255), 150); // Красный
 colorWipe(strip.Color(0, 0, 0), 150); // Красный
 delay(5000);
}

void colorWipe(uint32_t color, uint8_t wait) {
  for(uint16_t i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, color);
      strip.show();
      delay(1000);
  }
}

, 👍3

Обсуждение

Это работает! Просто пришлось раскомментировать задержку в течение некоторого времени, @Soumitras


1 ответ


3

Вы можете изменять интенсивность каждого цвета пошагово, пока не достигнете желаемого цвета.

void colorFade(uint8_t r, uint8_t g, uint8_t b, uint8_t wait) {
  for(uint16_t i = 0; i < strip.numPixels(); i++) {
      uint8_t curr_r, curr_g, curr_b;
      uint32_t curr_col = strip.getPixelColor(i); // получить текущий цвет
      curr_b = curr_col & 0xFF; curr_g = (curr_col >> 8) & 0xFF; curr_r = (curr_col >> 16) & 0xFF;  // разделяем на компоненты RGB

      while ((curr_r != r) || (curr_g != g) || (curr_b != b)){  // пока цвет curr еще не является целевым цветом
        if (curr_r < r) curr_r++; else if (curr_r > r) curr_r--;  // увеличить или уменьшить старые значения цвета
        if (curr_g < g) curr_g++; else if (curr_g > g) curr_g--;
        if (curr_b < b) curr_b++; else if (curr_b > b) curr_b--;
        strip.setPixelColor(i, curr_r, curr_g, curr_b);  // устанавливаем цвет
        strip.show();
        // delay(wait); // добавьте задержку, если слишком быстро
      }
      delay(1000);
  }
}

Чтобы использовать:

void loop() {
  colorFade(255, 0, 0, 150); // плавно переходим в красный
  colorFade(255, 255, 255, 150); // а затем в белый
  delay(5000);
}

Это не проверено, поэтому я не знаю, будет ли это слишком быстро или слишком медленно. Вам придется настроить это под свои нужды.

,