Как изменить цвет с выключенного на включенный в 1 цвете?
Поэтому я хочу добиться того же эффекта, что и стирание цвета (например, ходить по кругу, включая светодиоды, пока они все не включатся), за исключением того, что вместо немедленного перехода от выкл. к 100% яркости мне нужно, чтобы это выглядело более естественно, заставляя его постепенно переходить от выключенного к включенному до одного цвета, и светодиоды должны оставаться включенными после завершения постепенного включения. Это мой текущий код, и я не могу понять, как заставить его исчезать. все, что я нашел в Google, очень сложно сделать из простой вещи. неужели так сложно это сделать?
#include <Adafruit_NeoPixel.h>
#define PIN 6
#define NUM_LEDS 24
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRBW + NEO_KHZ800);
void setup() {
strip.setBrightness(2);
strip.begin();
strip.show(); // Инициализируем все пиксели выключенными
}
void loop() {
colorWipe(strip.Color(255, 255, 255, 255), 70); //белый
}
// Заливаем точки одну за другой цветом
void colorWipe(uint32_t c, uint8_t wait) {
for(uint16_t i=0; i<strip.numPixels(); i++) {
strip.setPixelColor(i, c);
strip.show();
delay(50);
}
}
@Dpw808, 👍-1
Обсуждение2 ответа
См. мой ответ здесь.
Код из этого ответа:
/*
*
* Демо NeoPixels — изменение цвета (в массиве) вверх и вниз
*
*/
#include <SPI.h>
#include <NeoPixels_SPI.h>
const unsigned int PIXELS = 8; // Количество пикселей в строке
void setup()
{
ledsetup();
} // конец настройки
float patterns [] [3] = {
{ 1, 0, 0 }, // красный
{ 0, 1, 0 }, // зеленый
{ 0, 0, 1 }, // синий
{ 1, 1, 0 }, // желтый
{ 1, 0, 1 }, // пурпурный
{ 0, 1, 1 }, // голубой
{ 1, 1, 1 }, // белый
{ 160.0 / 256, 82.0 / 256, 45.0 / 256 }, // охра
{ 46.0 / 256, 139.0 / 256, 87.0 / 256 }, // цвет морской волны
};
// количество элементов в массиве
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
void loop()
{
for (byte i = 0; i < ARRAY_SIZE (patterns); i++)
{
// растворяться
for (byte m = 0; m < 100; m++)
{
showColor (PIXELS, patterns [i] [0] * m, patterns [i] [1] * m, patterns [i] [2] * m);
delay (10);
} // конец для
// исчезать
for (byte m = 100; m > 0; m--)
{
showColor (PIXELS, patterns [i] [0] * m, patterns [i] [1] * m, patterns [i] [2] * m);
delay (10);
} // конец для
} // конец для каждого элемента массива
} // конец цикла
Спасибо! так что я просто скопирую и вставлю все это, и все заработает? или мне добавить его в существующий код? я очень новичок в этом., @Dpw808
Также, чтобы уточнить, мне нужно, чтобы он ходил по кругу и заполнял неопиксельный круг. (представьте себе магический круг)., @Dpw808
Чтобы использовать именно этот код, вам понадобится [моя библиотека](https://github.com/nickgammon/NeoPixels_SPI). Кроме того, контакт данных NeoPixels должен быть подключен к D11 (цифровой контакт 11) на Uno., @Nick Gammon
Этот конкретный код последовательно исчезает в показанных цветах (красный, зеленый, синий и т. д.)., @Nick Gammon
ах, мне просто нужен белый., @Dpw808
ок, @nick gammon, твоя программа работает, но все ее действия исчезают. огни вообще не движутся по кругу. я не знаю, как заставить их двигаться по кругу., @Dpw808
Обратите внимание, что переменная "wait" на самом деле не используется в вашей функции colorwipe.
Кажется, функция colorwipe включает их все подряд. Единственное, что вам нужно сделать, это добавить к нему затухание.
for(uint16_t i=0; i<strip.numPixels(); i++) {
for(uint8_t brightness=0; brightness<maxBrightness; brightness++){
strip.setPixelColor(i, strip.Color(brightness, brightness, brightness, brightness );
strip.show();
delay(wait);
}
- Как использовать SPI на Arduino?
- Библиотека DHT.h не импортируется
- Светодиоды: разница между общим анодом и общим катодом
- Как повторить кусок кода
- Почему эта программа на C++ не может прочитать Serial.write() моего arduino?
- Как изменить переменную при нажатии кнопки, подключенной к контакту 2
- Отображение двоичных данных на светодиодах
- Корпус кнопки и переключателя
Вы хотите, чтобы они светились один за другим или чтобы следующий начал светиться, пока предыдущий еще не достиг полной яркости?, @Paul