Как заставить неопиксель исчезать с помощью ColorWipe?
Я пытаюсь добиться затухания, когда светодиод включается/выключается во время вытеснения цвета, а не просто внезапно включается/выключается. Хотя я не совсем понимаю, как это сделать.
#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);
}
}
@user2252219, 👍3
Обсуждение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);
}
Это не проверено, поэтому я не знаю, будет ли это слишком быстро или слишком медленно. Вам придется настроить это под свои нужды.
,
@SoreDakeNoKoto
Смотрите также:
- Питание светодиодной ленты - Сколько ампер?
- Несколько условий оператора if
- Светодиоды: разница между общим анодом и общим катодом
- Светодиод L продолжает гореть
- Улучшенное циклическое переключение цветов RGB.
- Плавное мигание светодиодов
- Остановить мигание светодиодов
- FastLED - Как управлять определенными светодиодами
Это работает! Просто пришлось раскомментировать задержку в течение некоторого времени, @Soumitras