Создание эффектов для WS2812B

Впрочем, можно и так сделать: ардуино прошивается на максимальное количество пикселей, но заполняет данными только по размеру массива. Остальные - чёрным. Тогда будет без разницы, сколько реально светодиодов подключено - их количество я укажу только в программе для ПК. Ну что же, время до Нового Года ещё есть, переделаю.

Я так и не понял, кто мешает указанное в ПРОГРАММЕ количество пикселей передать Ардуинке так же, как Вы передаете массив данных.
Вы вправду считаете, что удобнее каждый раз при изменении размера перезаливать скетч, чем залить его один раз и забыть об этом?

зачем?
Допустим, вы знаете что размер массива 20 пикселей. Нафига заполнять остальные 280 черным и каждый раз выводить их на ленту?
Выводите на ленту только 20, которые заполнены

Я использую библиотеку FastLed, которая требует определения структуры (например, так: CRGB Leds[numLeds], где numLeds - конкретное число, определяемое либо через #define, либо непосредственно) такого размера, который в процессе работы ардуино уже нельзя изменить. По команде FastLed.show() вся эта структура и переписывается на ленту.
Даст что-то динамическое переподключение (LEDS.addLeds<WS2812B, pinLeds, GRB>(Leds, numLeds)), которое позволяет использовать numLeds как переменную, не знаю, никогда не пробовал по причине отсутствия необходимости.
Проверю, если нормально, то внесу коррективы. Но структуру CRGB придётся всё равно растягивать на максимальное число пикселей.

Ну, а даже если не получится, то КАЖДЫЙ раз при выводе заполнять структуру чёрным не нужно - только при изменении длины массива, который перегоняет комп. Т.е., если от компа поступила соответствующая команда.

Скорректировал скетч и программу для компа. Скетч нужно залить только один раз, а количество пикселей устанавливается в программе. И всё будет работать.
Дистрибутив программы для компьютера
Скетч

Ну что ж, имеет право на существование. Диодики переливаются симпатично. Хотя не всё в программе интуитивно понятно, но если потыкаться, можно более-менее разобраться. С практической точки зрения, наверное удобнее, упомянутые автором, автономные устройства, чтобы на компе только “дизайном” заниматься.
В плане развития, видимо, нужно переходить от линейного к более сложному расположению светодиодов.

Автономия, безусловно, удобнее - проверено на практике. Дизайн делаю я, а остальные члены семьи только в кнопочки тыкают. А программы считываются со старенькой SD карточки.

А вот по поводу линейного расположения пикселей - есть в панели “Выборка” список, в котором можно выбрать уже более сложные формы. Кроме того, сняв галочку с чекбокса “Связать точки”, вы получите возможность располагать их на рисунке как вам заблагорассудится. Т.е. большое окно, в котором рисуется картинка и расположение пикселей для выборки информации редактируемое. Таскайте точки по экрану так, как вам захочется.
Конечно, это хорошо для небольшого количества пикселей, уже от сотни и выше - занятие утомительное.

Ну, а небольшая модификация программы может позволить создавать выборку и для панно. Но это отдельный разговор.
Ну и, возможно, что я трактовал вашу фразу по поводу “…более сложного расположения светодиодов” как-то не так. Если вы имели в виду что-то другое - поправьте.

Вообще-то есть более или менее стандартные матрицы: 8х32 и 16х16.
И в обоих случаях, как назло, более сотни светодиодов.
Для работы с ними тоже таскать пиксели по экрану?

Забыл уточнить ещё один момент. А зачем программе в обязательном порядке нужна подключенная ардуина? Я, допустим, просто хотел на экране картинки поподбирать, цветами поиграть.
Я бы подключенность проверял только когда уже кнопку “старт” давят.

Программа изначально писалась под ленту. В матрицах другая организация пикселей. У меня этих матриц нет, поэтому…

Подключенная ардуино нужна, чтобы посмотреть непосредственно на ленте. Без неё программа тоже работает, но результат виден в полоске индикации в верхней части окна. Как я уже писал, несоответствие RGB ПК и реальных цветов ленты не дадут полного (и хорошего) представления о результате.

Кроме того, некоторые настройки вывода в полоске индикации никак не отражаются, например, “Насыщенные цвета” и “Контраст”, которые вы видите в панели слева. Не делал, чтобы не утяжелять код программы. Изначально она писалась ещё на стареньком 32-х разрядном компе и WindowsXP.

И ещё. Откуда я могу заранее знать, какой COM порт у вас на ардуину работает? А если вы одновременно ещё что-то задействуете и у вас будут висеть несколько портов сразу? Какой выбрать? Поэтому подключение порта не по кнопке пуск, а сразу. Иначе нажали “Пуск”, а потом порт выбираете и уж потом что-то увидите. Нехорошо.

Пришлите какую-нибудь документацию (или ссылку) на те, что вы используете. Посмотрю, что можно сделать. Но, конечно, управлять такими объёмами через Сериал плохо - скорость маленькая. Нужно от SD карточки и на Mega2560.

А пока небольшое обновление:
LedsImg_EXE.zip
Исправлены мелкие ошибки и добавлено немного функциональности. Светодиоды стали мигать веселее и чуть красивше :wink:

Вообще говоря я не пользуюсь ни лентами, ни матрицами. Использую отдельные светодиоды и спаиваю их вручную. Хлопотно, но дешевле и функциональнее (для меня). Потому, как я ещё и резчик по дереву (в стиле сюрреализма) и оснащаю свои фигуры светом. Вот так, например:


Или так:

6 лайков

Если подразумевается ссылка на Али, то: https://aliexpress.ru/item/4001296811800.html
Что же касается документации, то я ею не пользовался, лишь экспериментально выяснил, что лента уложена в матрице “змейкой”. IMHO этой информации достаточно.

PS. Фото впечатляют. Собственно, использование отдельных светодиодов, хотя и довольно экзотический (в смысле - редкий), но наиболее рациональный способ с точки зрения достижения задуманного эффекта.

Это та же лента, только соединенная змейкой слева-направо, сверху-вниз. Если расположить первый пиксель в левом верхнем углу

Посмотрел, интересные матрицы, учитывая гибкость подложки. Можно и под них сделать, программу уж точно не нужно сильно переделывать. А вот железо - это однозначно автономная конструкция на Mega2560 + SD. Причём можно организовать ленту из этих матриц, а то ещё и так, чтобы каждая матрица имела свой собственный пин (и свою картинку). Поле для размышлений есть, но задача несложная. Был бы чей-то интерес.

Вы же заявляете до 300 светодиодов. А матрица 8х32, как и 16х16 - это всего 256

Не понял вопроса. Количество “заявленных” светодиодов зависит от памяти ардуино. Для Uno\Nano это 410 штук. Я выбрал 300 для стандартной ленты 5 м, 60 пикселей на метр. Если это Mega2560, то речь идёт уже о тысячах пикселей.
Программа на ПК может обслужить любое количество пикселей, лишь бы памяти компа хватило. Да, у меня там тоже стоит ограничение в 300 штук. Могу его увеличить, если кому надо. Только в скетче пропишите не меньшее количество.

Это очевидно. Речь о том, что для подобной матрицы никакая Мега не нужна, стандартная Уно/Нано вполне справится