Управление яркостью отдельного светодиода в адресной ленте?
- Войдите на сайт для отправки комментариев
Хочу сделать вспышки случайными диодами в адресной ленте.
Сейчас лента умеет гореть одним цветом, при этом управление яркостью всей ленты реализовано через
FastLED.setBrightness( brightness )
при таком исполнении все диоды горят одинаково и сделать так, чтобы 1 диод вспыхнул ярче не получится.
хочу переделать скетч, чтобы яркость ленты задавалась отдельно для каждого диода, тогда на отдельный диод можно задать бОльшую яркость, чем у остальных.
Вопрос, какие можно использовать функции или общепринятые алгоритмы для этого.
Из всего, что я нарыл поиском, в библиотеке FastLed есть методы снижения яркости диода от текущей в процентах.
// Reduce color to 75% (192/256ths) of its previous value // using "video" scaling, meaning: never fading to full black leds[i] %= 192;
значение яркости, понятно буду назначать через переменную.
при этом обратного метода, для увеличения яркости я не нашел.
это не удобно, т.к. хочется просто задавать яркость пикселя, а не считать ее от текущей.
в данном случае придумался "изврат" - задать яркость на максимум, а потом ослабить ее до требуемой, после чего передать значение в ленту.
// Reduce color to 75% (192/256ths) of its previous value // using "video" scaling, meaning: never fading to full black leds[i].maximizeBrightness(); leds[i] %= 192;
Есть еще вариант работать в палитре CHSV и менять последнее значение в параметрах переменной, но это тоже не удобно, т.к. цвета ленты назначены в RGB и переходить в другую палитру для изменения яркости диодов не очень удобно и громоздко.
leds[i] = CHSV( 224, 187, 255);
нет ли более простого способа просто задавать яркость для leds[i], как это реализовано с яркостью пина Ардуины, к которому подключен отдельный диод, а не лента?
analogWrite(9, brightness);
Хочу так же, но для диода в адресной ленте.
Работать в HSV - самое простое решение.
а я могу задать цвет ленты выше в программе в RGB
а потом поменять яркость пикселя таким образом?
в фастледе есть готовый эффект - глиттер - это ровно то и есть - случайно вспыхивают диоды в разных местах.
Можно бы и посмотреть, ДО того как писать вопросы на форум.
Менять в RGB-пространстве цвет можно, можно гнать его к белому, к черному, но вернуться обратно к исходному без перерасхода памяти - невозможно.
С конвертацией у фастледа какие-то заморочки - только в одну сторону работает (в тех релизах, что я юзал).
https://github.com/FastLED/FastLED/wiki/Basic-usage
Вот Вики по фастледу. там все есть.
https://github.com/FastLED/FastLED/wiki/Pixel-reference
конкретно по оперированию цветами точек по любой модели
Глитчи у фастледа - это просто замена цвета в случайной позиции на белый, если правильно помню. А потом полная перегенерация картинки на страйпе. Так что, если генерация на математике основана, то способ канает. А если нет, то не очень.
1. я не знаю "не на математике" это не "наезд" - просто в голову ничего не приходит.
2. а что мешает запомнить номера и значения пикселей на время вспышки? 10-20 точек по три байта - это вот прям жуткий расход памяти! ;))
Не на математике - это когда картинка зависит от предыдущих шагов отрисовки (по рандомайзу сделанных). Если радугу можно беспроблемно каждый раз генерировать одинаково, то с рандомайзом фигня выйдет. Может неудачно сформулировал, канеш.
Никто никому не мешает запоминать изменённые цвета и даже держать вторую копию страйпа в памяти. Я лишь написал о том, что в HSV проще откатиться на исходную.
хочу переделать скетч, чтобы яркость ленты задавалась отдельно для каждого диода...
хочется просто задавать яркость пикселя, а не считать ее от текущей.
Подниму тему, вдруг кому понадобиться. Я про управление яркостью в цветовой схеме RGB.
Код для node ncu, через delay т.к. пример.
У меня работает. Думаю можно создать массив со значениями яркости и вносить изменения там, а потом выводить на ленту.
я всё-же решил вопрос с изменением яркости 1 пикселя в ленте через установку на него максимальной яркости и уменьшением на заданное значение.
работает.
посмотреть результат работы эффекта с изменением яркости отдельных пикселей можно по ссылочке с тайм кодом.
https://youtu.be/cms0qPa9EHA?t=100