LEDraw Project: платформа для светодиодной графики (Гирлянды и всё такое...)

Palpalych

★★★★★✩✩
24 Дек 2019
765
404
данная тема достаточна обширна, и сложно будет её за раз выложить в готовом виде. Подготовка и исправление материалов занимает очень много времени (которого свободного у меня нет в должном количестве), и поэтому прошу модераторов дать мне отсрочку, хотя бы в неделю, для последовательного пополнения. Желательно закрепить еще 2 первых поста для дополнительной сопутствующей информации. Спасибо.
В прошлом я был создателем одной из прошивок Лампы Гайвера и материалы выкладывал на страницах этого форума. В какой-то момент проект был полностью переработан и адаптирован для новых задач, о которых я хотел бы писать на этих страницах. Месяца 2 назад мне потребовалось сделать прошивку для управления светодиодной лентой. Используя старые наработки и желание сделать общий алгоритм работы и управления, полностью переделал код. На данный момент разработка представляет собой управление ёлочной гирляндой (как ни странно Новый Год на носу) - это была моя самая давняя мечта, и я планирую осуществить ее до конца этого года. А так как программа была "поломана", то восстановление функционала Лампы Гайвера на новом "движке" это уже следующий этап. Итак...

LEDraw Project: платформа для светодиодной графики / расширение возможностей FastLED

LEDraw Project - это платформа для светодиодной графики базирующаяся на популярной библиотеке управления адресными светодиодными лентами FastLED. Основное назначение этой платформы, как ни странно, это экономия ресурсов контроллера при повышении качества выводимой "картинки". На данный момент включает в себя набор объектов с оптимизированной структурой для иерархичного доступа к ресурсам котроллера, а также ряд высокопроизводительных графических функций для рисования эффектов. В дополнении, имеется еще ряд полезных и совместимых модулей расширяющих функционал этой платформы, таких как управление кнопкой, полноцветные индикаторы (адресные светодиоды находящиеся в цепочке, но не участвующие в прорисовке основного эффекта, служащие, например, для индикации режима, уровня сигнала и пр.), управление питанием и яркостью...

Примеры реализации проекта LEDraw:
LEDraw stripe - 144LEDs, 1D-graphix, faders, 1D-OSD

LEDraw garland (гирдянда) - 249LEDs, 1D-graphix, faders, 1 inLED-indicator
LEDraw Disco-Lamp - 32LEDs, 1D-graphix, faders, 1 LED-indicator, 1 Aux driver (motor)

Схема подключения:
Base.png
Замечено, что такая схема выдерживает подключение 100-150 стандартных адресных светодиодов без проблем от стандартной USB зарядки на 2А (при условии выставления соответствующего тока в конфигурации)! Резистор 150 Ом желателен, но не обязателен в случае если лента не работает.

Схема подключения дополнительного исполнительного устройства (моторчик, или бэкграунд подсветка):
AuxDrive.png

Рабочие конфигурации:
№9 - полоска из светодиодов ws2012b
№10 - дисколампа на ws2012b
№11 - гирлянда на ws2011

При работе над эффектами было замечено, что многие из них начинали вести себя совершенно другим образом, когда менялось, например, количество светодиодов. Либо появлялась дискретность изображения, либо эффект замедлялся(ускорялся) до нежелательных скоростей, а иногда картинка переворачивалась, и приходилось лезть в код, чтобы разобраться с неведомыми параметрами, чтобы привести все в норму. А иногда эффект сильно тормозил весь процесс, пересчитывая "тяжелые" или излишние кадры. В данной платформе появился некий интерфейс между процедурой отрисовки эффекта и программой управления (менеджером), что позволило сократить количество ресурсов занимаемых у контролера без потери качества самой отрисовки. Более того, повысилась плавность и четкость отрисовки благодаря использованию легких и понятных графических функций (словно как в Бэйсике - Draw, Line, Plot...)

Объекты LEDraw - функционально законченные и оптимизированные модули, позволяющие удобно их использовать в своих разработках. Написаны в виде структур, а не классов, что позволяет более рационально использовать ресурсы контроллеров. В частности, все методы в структурах единожды описываются в памяти при компиляции (являются общими), а не дублируются как в классах без усложнения кода.
Статический объект effect описывает все для необходимого для отображения эффекта.
  • Переменные и свойства:
    • *current - указатель на свойства текущего эффекта
    • uint8_t speed - полное значение регулятора скорости
    • uint8_t scale - полное значение регулятора скорости
    • timer - объект внутреннего счетчика времени. Используется для отсчета скорости смены кадров, или таймер смены эффектов
    • *leds - указатель на массив памяти (светодиоды), с которым работает данный эффект
    • int8_t/int16_t i - универсальная переменная, индекс используемый текущим эффектом для внутренних целей
    • int8_t/int16_t indexes[ ] - универсальная масштабируемая переменная используемая текущим эффектом для внутренних целей
    • CRGB colors[ ] - универсальная масштабируемая переменная используемая текущим эффектом для внутренних целей
    • A, B, C, D - универсальные переменные используемые текущим эффектом для внутренних целей. Каждая занимает всего лишь 4 байта, но может использоваться как 4 однобайтные переменные, 2 - двухбайтные, как 1 четырехбайтная, или быть представлена как RGB цвет
    • rgb16_palette/g_palette - универсальная переменная для описания текущей палитры
  • Методы:
    • bool hasChangedEffect() - возвращает сбрасываемый признак смененного эффекта
    • bool hasChangedParams() - возвращает сбрасываемый признак изменённых параметров Speed, Scale, Bright
    • bool hasChangedSpeed() - возвращает сбрасываемый признак изменённого параметра Speed (Скорость)
    • bool hasChangedScale() - возвращает сбрасываемый признак изменённого параметра Scale (Масштаб)
    • bool set(effect)- устанавливает эффект текущим. Возвращает признак успешного выполнения операции
      • effect - индекс (uint8_t) эффекта из списка effects_array[ ]
    • void setPalette(&palette)- установка текущей (рабочей) палитры эффекта
      • &palette - адрес обычной RGB16(TProgmemRGBPalette16Ptr), или градиентной палитры (TProgmemRGBGradientPalettePtr)
    • bool tick() - прорисовка "кадра" эффекта. Возвращает true, если кадр изменился
    • CRGB ColorFromPalette(index, brightness, blendType) - локальная реализация функции для работы с текущей палитрой
    • void fill_palette(N, startIndex, incIndex, brightness, blendType) - локальная реализация функции для работы с текущей палитрой

  • Переменные и свойства описания эффекта:
    • uint8_t id - индекс текущего эффекта
    • bool *action(&effect)- указатель на процедуру прорисовки кадра. Возвращает признак непустого кадра
      • &effect - ссылка на параметры передаваемые в процедуру эффекта

LEDraw позволяет с легкостью конфигурировать несколько родственных проектов со своими настройками. Осные настройки находятся в файле config.h. Дополнительные кастомные настройки в своем конфигурационном файле находящимся в корне проекта. Смысл заключается в том, что кастомный конфигурационный файл переписывает необходимые установки define под конкретную реализацию проекта.

Первоначально эффекты работали с 8 палитрами, но в процессе адаптации появилась возможность работать с градиентными(!) палитрами, коих в коллекции насчитывается уже 34 шт.

  • Кнопка - Да
  • Демо-режим - Да (в минимальной конфигурации)
  • Индикаторы - Частично
  • Регуляторы (интеллектуальное управление кнопкой + визуализация) - Частично
  • AuxDrive (моторчик, одноцветная LED лента...) - Да
  • Дизеринг - Да
  • Фаворитные списки - Нет
  • Пульт - не отлажен
  • Фэйдеры эффектов - Да
  • Анимационные фэйдеры - Да
  • WiFi - не отлажен
...
Button: --- v.2.0.01γ (01.12.2020)
Алгоритм управления кнопкой

Действие по умолчению (если не выполнено другое):
- / удержание - регулировка глобальной яркости
*- / 1 + удержание - ... скорости эффекта
**- / 2 + удержание - ... масштаба эффекта
***- / 3 + удержание - регулировка яркости эффекта (для проектов с моторчиком - скоростьего вращения)

Из профиля OFF/SLEEP:
* / 1 кратное нажатие - показ часов (если установлена соответствующая настройка, и при работе в режиме клиента). Повторное нажатие во время показа - переход в режим ON
** / 2 кратное нажатие - переход в режим LAMP
*** / 3 кратное нажатие - смена бэкграунда режима OFF
**** / 4 кратное нажатие - переход в режим DEMO
***** / 5 кратное нажатие - вывод интернет имени лампы и текущего IP (если поддерживается)
****** x2 / 6 кратное нажатие - прошивка по OTA (после 2-кратного входа в этот режим. Переключится на эффект Матрица) (если поддерживается)
******* / 7 кратное нажатие - смена режима ESP - точка доступа/клиент (если поддерживается)
******** / 8 кратное нажатие - сброс настроек эффектов

Из профиля ON:
* / 1 кратное нажатие - показ часов (при работе в режиме клиента). Повторное нажатие во время показа - переход в режим OFF
** / 2 кратное нажатие - смена эффекта вперед
*** / 3 кратное нажатие - смена эффекта назад
**** / 4 кратное нажатие - переход в режим PAINT >> ON >> PAINT... (если поддерживается)
***** / 5 кратное нажатие - вывод FPS - количества кадров в секунду (если поддерживается)
******** / 8 кратное нажатие - сброс настроек текущего эффекта

Из профиля LAMP:
* / 1 кратное нажатие - выключение лампы
** / 2 кратное нажатие - переход в режим ON
*** / 3 кратное нажатие - смена эффекта лампы

Из профиля DEMO:
* / 1 кратное нажатие - переход в режим OFF
** / 2 кратное нажатие - переход в режим ON
*** / 3 кратное нажатие - смена режима демо (Последовательное/Случайное/просмотр градиентов)
***** / 5 кратное нажатие - вывод текущего периода смены эффектов (в секундах)
*- / 1 + удержание - ... периода смены эффектов (10сек - 2 минуты)

Режим удержания работает по такому принципу:
Для регулировки соответствующего параметра нужно удерживать кнопку на определенное время, пока не отобразится соответствующий индикатор.
Когда регулируемое значение дойдет до своего минимального значения, то при дальнейшем удерживании кнопки через 1,5с оно будет изменяться в обратную сторону. Если при отпускании кнопки быстро нажать ее повторно, то произойдет вход в предыдущий режим установки.
Если в течении 0,75с произойдет повторное нажатие, то "разворота" приращения регулировки не произойдет, тем самым можно будет легко сделать точную подстройку регулируемого параметра.

Код проекта: (на данный момент доступен как готовое решение для платформы Wemos D1 mini)


= перелопачен принцип управления графикой. Введен новый модель graphix, который объединяет параметры вывода на ленту и быстрые функции прорисовки графики.
Теперь можно определить отдельные пространства на ленте, и с каждым независимо работать не прибегая к чрезмерному описанию параметров.
Доступны такие функции одномерной графики:
- inRange(*) - проверка адреса пикселя на нахождения в своих границах
- wrap(*) - функции "оборачивания" координаты относительно границ
- crop(*) - функции "обрезания" координаты относительно границ
- mirror(*) - функции "отражения" координаты относительно границ
- getPixelValue(*) - функция получения цвета пикселя по его номеру
- getPixelBright(*) - функция получения яркости пикселя по его номеру
- getColor(*) - получение цвета пикселя по его номеру
- blurAll(*) - размытие всего диапазона пикселей
- blend_fast(*) - получение промежуточного цвета относительно двух заданных
- drawPixel() / drawPixel_safe() - прорисовка пикселя (+безопасная)
- dimRange() / dimRange_safe() - затемнение отрезка (+безопасная)
- fillRange() / fillRange_safe() - прорисовка отрезка (+безопасная)
- fillSegment() / fillSegment_safe() - прорисовка отрезка простым градиентом
- noiseAll(*) - заполнение дискретным шумом всего диапазона
- fillAll(*) - заполнить цветом весь диапазон
- dimAll(*) - затемнить весь диапазон
- clearAll(*) - очистить всё
прорисовка графических примитивов (1d):
- drawSparkler(*) - прорисовка "бенгальского огня"
- drawComet(*) - прорисовка кометы

v2.2.15β (30.12.2022) Скачать/Download


Установка:
  • PlatformIO, все как обычно - распаковываем архив в новую папку, открываем, компилируем...
  • Arduino IDE: требуется перенести библиотеки из /lib в C:\Users\*******\Documents\Arduino\libraries. По крайней мере папочку /LEDraw если там уже есть последние GButton и FastLED. Для установки - кликаем файл src\src.ino и только на этой вкладке запускаем сборку.
 
Изменено:

Palpalych

★★★★★✩✩
24 Дек 2019
765
404
Реализации этого проекта:
Гирлянда для Ёлки: 250 светодиодов WS2811
 
Изменено:
  • Лойс +1
Реакции: fusgerts

Palpalych

★★★★★✩✩
24 Дек 2019
765
404
Закрепленный пост №2. Не удаляйте, пожалуйста. Будет много еще чего интересного!
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
Фигасе трактат поздней ночью, почитаю :)
 

Palpalych

★★★★★✩✩
24 Дек 2019
765
404
Закрепить можно только 1-е сообщение и ты можешь сделать это сам.
Да, я понял. Просто хотелось бы чтобы было резервированное пространство вторым и третьим постом. Инфы будет очень много, и чтобы ее не приходилось долго искать.
 
  • Лойс +1
Реакции: stepko

stepko

★✩✩✩✩✩✩
26 Июн 2020
146
32
Первоначально эффекты работали с 8 палитрами, но в процессе адаптации появилась возможность работать с градиентными(!) палитрами, коих в коллекции насчитывается уже 34 шт.
Я рисовал такие(не градиентные), нужны?
 

Palpalych

★★★★★✩✩
24 Дек 2019
765
404
@Palpalych, о! С возвращением. :)
Спасибо!
Я рисовал такие(не градиентные), нужны?
Чуть позже, пока не знаю каким образом прикрутить их все. Дело в том, что для удобства на каждый эффект повешено 8 палитр (с одной стороны, чтобы не плодить родственные эффекты, а с другой - сделать удобное управление ими). На данный момент сейчас сгруппированы неградиентные фастледовские. К остальным (градиентным), ради совместимости с классической гирляндой были прописаны функции ColorFromPalette, и fillPalette в дополнение со стандартными. Основная проблема заключается в том, что нужно тематически сгруппировать их по 8 так, чтобы новые эффекты были достаточно презентабельными. По идее можно так же сгруппировать блоки и не с градиентными палитрами.

Ладно, поправил фейдер от глюков. Постараюсь вечером выложить код.
 

stepko

★✩✩✩✩✩✩
26 Июн 2020
146
32
Чуть позже, пока не знаю каким образом прикрутить их все.
Все равно скину, мне не жалко:
static const TProgmemRGBPalette16 StepkosColors_p FL_PROGMEM = {0x0000ff, 0x0f00f0, 0x1e00e1, 0x2d00d2, 0x3c00c3, 0x4b00b4, 0x5a00a5, 0x690096, 0x780087, 0x870078, 0x9600cd, 0xa50050, 0xb40041, 0xc30032, 0xd20023, 0xe10014};
static const TProgmemRGBPalette16 AutumnColors_p FL_PROGMEM = {0xbc2300, 0xc84416, 0xdc642c, 0xe69664, 0xfbb979, 0xca503d, 0x882c1c, 0x9a3631, 0xa9624e, 0xcc9762, 0xdcc0b5, 0xc1a29f, 0x826468, 0x4a3334, 0x231a1a, 0x161113};
static const TProgmemRGBPalette16 NeonColors_p FL_PROGMEM = {0x9694ac, 0x979b9b, 0x888b8c, 0x767680, 0x696f77, 0x6c736f, 0x4097b8, 0x00b1d0, 0x0f93ec, 0x3572ff, 0x4157ff, 0x6162ff, 0x686cff, 0x7473ff, 0x8689e5, 0x9e9dc6};
static const TProgmemRGBPalette16 EveningColors_p FL_PROGMEM = {0x1e0443, 0x6d0081, 0x8200ac, 0x8200ac, 0x8200ac, 0x8200ac, 0x8200ac, 0x8200ac, 0x7900a1, 0x820055, 0xc80000, 0xe57b00, 0xff9d5a, 0xc58b32, 0xd8d400, 0xffff00};
static const TProgmemRGBPalette16 WoodColors_p FL_PROGMEM = {0xcdb1a5, 0x7a4000, 0xcdb1a5, 0x7a4000, 0xcdb1a5, 0x7a4000, 0xcdb1a5, 0x7a4000, 0xcdb1a5, 0x7a4000, 0xcdb1a5, 0x7a4000, 0xcdb1a5, 0x7a4000, 0xcdb1a5, 0x7a4000};
static const TProgmemRGBPalette16 MercuryColors_p FL_PROGMEM = {0xffffff, 0xeeeeee, 0xdddddd, 0xcccccc, 0xbbbbbb, 0xaaaaaa, 0x999999, 0x888888, 0x777777, 0x666666, 0x555555, 0x444444, 0x333333, 0x222222, 0x111111, 0x000000};
static const TProgmemRGBPalette16 StepkosFireColors_p FL_PROGMEM = {0x000000, 0x0e0070, 0x1d00ad, 0x2d00c8, 0x3c00c3, 0x4b00b4, 0x5a00a5, 0x690096, 0x780087, 0x870078, 0x9600cd, 0xa50050, 0xb40041, 0xc30032, 0xd20023, 0xe10014};
static const TProgmemRGBPalette16 LakeColors_p FL_PROGMEM = {0x611de9, 0x7d7cf0, 0xa784f9, 0x8cb1ed, 0x7fffd4, 0x5ad5ec, 0x3399ff, 0x66afff, 0x50ffc1, 0x61d1e5, 0x68ff8d, 0x98ff61, 0xccff47, 0x7eff00, 0x53ff00, 0x00ff00}; 
static const TProgmemRGBPalette16 OrangeColors_p FL_PROGMEM = {0xffff00, 0xfff100, 0xffe100, 0xffd100, 0xffc100, 0xffb100, 0xffa100, 0xff9100, 0xff8100, 0xff7100, 0xff6100, 0xff5100, 0xff4100, 0xff3100, 0xff2100, 0xff1100};
static const TProgmemRGBPalette16 AcidColors_p FL_PROGMEM = {0xffff00, 0xd2b328, 0xd25228, 0x711323, 0x6c000c, 0x5a0c00, 0x6d373a, 0xaa5a62, 0x604564, 0x313164, 0x332765, 0x3a2465, 0x4b1665, 0x4b0069, 0x31004c, 0x200046};
 

Palpalych

★★★★★✩✩
24 Дек 2019
765
404
Все равно скину, мне не жалко:
static const TProgmemRGBPalette16 StepkosColors_p FL_PROGMEM = {0x0000ff, 0x0f00f0, 0x1e00e1, 0x2d00d2, 0x3c00c3, 0x4b00b4, 0x5a00a5, 0x690096, 0x780087, 0x870078, 0x9600cd, 0xa50050, 0xb40041, 0xc30032, 0xd20023, 0xe10014};
static const TProgmemRGBPalette16 AutumnColors_p FL_PROGMEM = {0xbc2300, 0xc84416, 0xdc642c, 0xe69664, 0xfbb979, 0xca503d, 0x882c1c, 0x9a3631, 0xa9624e, 0xcc9762, 0xdcc0b5, 0xc1a29f, 0x826468, 0x4a3334, 0x231a1a, 0x161113};
static const TProgmemRGBPalette16 NeonColors_p FL_PROGMEM = {0x9694ac, 0x979b9b, 0x888b8c, 0x767680, 0x696f77, 0x6c736f, 0x4097b8, 0x00b1d0, 0x0f93ec, 0x3572ff, 0x4157ff, 0x6162ff, 0x686cff, 0x7473ff, 0x8689e5, 0x9e9dc6};
static const TProgmemRGBPalette16 EveningColors_p FL_PROGMEM = {0x1e0443, 0x6d0081, 0x8200ac, 0x8200ac, 0x8200ac, 0x8200ac, 0x8200ac, 0x8200ac, 0x7900a1, 0x820055, 0xc80000, 0xe57b00, 0xff9d5a, 0xc58b32, 0xd8d400, 0xffff00};
static const TProgmemRGBPalette16 WoodColors_p FL_PROGMEM = {0xcdb1a5, 0x7a4000, 0xcdb1a5, 0x7a4000, 0xcdb1a5, 0x7a4000, 0xcdb1a5, 0x7a4000, 0xcdb1a5, 0x7a4000, 0xcdb1a5, 0x7a4000, 0xcdb1a5, 0x7a4000, 0xcdb1a5, 0x7a4000};
static const TProgmemRGBPalette16 MercuryColors_p FL_PROGMEM = {0xffffff, 0xeeeeee, 0xdddddd, 0xcccccc, 0xbbbbbb, 0xaaaaaa, 0x999999, 0x888888, 0x777777, 0x666666, 0x555555, 0x444444, 0x333333, 0x222222, 0x111111, 0x000000};
static const TProgmemRGBPalette16 StepkosFireColors_p FL_PROGMEM = {0x000000, 0x0e0070, 0x1d00ad, 0x2d00c8, 0x3c00c3, 0x4b00b4, 0x5a00a5, 0x690096, 0x780087, 0x870078, 0x9600cd, 0xa50050, 0xb40041, 0xc30032, 0xd20023, 0xe10014};
static const TProgmemRGBPalette16 LakeColors_p FL_PROGMEM = {0x611de9, 0x7d7cf0, 0xa784f9, 0x8cb1ed, 0x7fffd4, 0x5ad5ec, 0x3399ff, 0x66afff, 0x50ffc1, 0x61d1e5, 0x68ff8d, 0x98ff61, 0xccff47, 0x7eff00, 0x53ff00, 0x00ff00};
static const TProgmemRGBPalette16 OrangeColors_p FL_PROGMEM = {0xffff00, 0xfff100, 0xffe100, 0xffd100, 0xffc100, 0xffb100, 0xffa100, 0xff9100, 0xff8100, 0xff7100, 0xff6100, 0xff5100, 0xff4100, 0xff3100, 0xff2100, 0xff1100};
static const TProgmemRGBPalette16 AcidColors_p FL_PROGMEM = {0xffff00, 0xd2b328, 0xd25228, 0x711323, 0x6c000c, 0x5a0c00, 0x6d373a, 0xaa5a62, 0x604564, 0x313164, 0x332765, 0x3a2465, 0x4b1665, 0x4b0069, 0x31004c, 0x200046};
Спасибо. Включил пока в код, чуть позже есть задумка, как сделать демо режим с перебором всех палитр. Будет очень замечательно.
 
  • Лойс +1
Реакции: stepko

kostyamat

★★★★★★✩
29 Окт 2019
1,097
630
@Palpalych, заходите к нам в тему, а может - и в работу. У нас релиз версии 2 вышел. И вообще "нескучные обои". ;)
 

Palpalych

★★★★★✩✩
24 Дек 2019
765
404
@Palpalych, заходите к нам в тему, а может - и в работу. У нас релиз версии 2 вышел. И вообще "нескучные обои". ;)
Спасибо. Зайду. Просто времени категорически нет, и еще до НГ кучу доработок по этой теме нужно доделать.
Сейчас переделываю всю сборку - переписываю все под полноценную библиотеку. ))) А собирается все с трудом (((
Доделаю. Тогда буду развернуто пополнять эту тему. Да и с дня на день порадую новым грандиозным Проектом (вернее реализацией этого)
 
  • Лойс +1
Реакции: kostyamat

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
@Palpalych, заходите к нам в тему, а может - и в работу. У нас релиз версии 2 вышел. И вообще "нескучные обои". ;)
Он стесняется почему-то. Хотя я его дважды уже приглашал. Видать моя некоторая категоричность суждений и упертость дают знать, не всяк сможет без валерьянки общаться. Но не смотря на ругань, споры, конфликты и недопонимания - работа идет и финальный результат от раза к разу становится лучше. Это главное. :)

@Palpalych, но ежели вдруг передумаете - то третий раз зову. :)
 

Palpalych

★★★★★✩✩
24 Дек 2019
765
404
@kDn,

спасибо, но пока не получается. что до моего проекта - я уже объяснял, что не хватает опыта кодирования для своего другого проекта. В этом я нахожу такую возможность. Потом, для меня более интересно визуальное совершенство, а оно уже зашло в такие дебри, что вряд ли увяжется с готовыми проектами. Ну может потом... Когда библиотека будет отточена досконально.
 
  • Лойс +1
Реакции: kDn

Palpalych

★★★★★✩✩
24 Дек 2019
765
404
Приветствую, в лучших традициях Алекса, Самого, Гайвера... - выложил скетч на Новогоднюю Гирлянду для Wemos (ESP8266)
Работает с любым количеством светодиодов (до 1024 - аппаратное ограничение)
Запросто сконфигурировал под 250 шт WS2811
Для того, чтобы не просаживалось напряжение на линии, запитал ее от третьего сегмента, а плата питается со входа первого - работает! Полёт нормальный!!!
 
  • Лойс +1
Реакции: kostyamat

Palpalych

★★★★★✩✩
24 Дек 2019
765
404
Обновление прошивки до LEDraw 2.2.02 beta
 

Palpalych

★★★★★✩✩
24 Дек 2019
765
404
Добавлено видео с реализацией проекта "Гирлянда"
 
  • Лойс +1
Реакции: fusgerts и kostyamat

kostyamat

★★★★★★✩
29 Окт 2019
1,097
630
@Palpalych, несколько раз упоминается "моторчик". Шо за моторчик, и для чего он? Из описания совершенно не понятно.
 

Palpalych

★★★★★✩✩
24 Дек 2019
765
404
@kostyamat, Да, было еще одно ответвление проекта, готовил к НГ, но сейчас уже поздно скрывать...
Переделал китайскую диско-лампу. Получилась Дисколампа ПалпалЫча! :ROFLMAO: ну так, чтобы эффекты показывала, при этом куполом тоже вращала. Написал под это дело свою библиотеку, так как обычные не реализовывали достаточную скорость вращения. В итоге все получилось... Моторчик вращается четко во всем диапазоне скоростей от 0...255. Есть даже возможность подключить реверс.
Только вот эффекты этой лампы получалось заснять плохо, камера не передает всей феерии. :cool: Если получится, позже выложу.
IMG_20200926_212611_HDR.jpg IMG_20200926_212920.jpg IMG_20200926_222614.jpg
Светодиоды, вернее, колечко сделал из ленты 144 шт/метр. Получилось 32 штуки.
Также на Али можно использовать готовые колечки на 24 светодиода.

Сейчас подумываю над тем, чтобы использовать эту библиотеку не только для моторчика, а еще для 2х дополнительных каналов, например для декоративной фоновой подсветки той же новогодней ёлки.
 
Изменено:
  • Лойс +1
Реакции: fusgerts и kostyamat

Divin

★★★✩✩✩✩
30 Янв 2021
412
184
Здравствуйте. Извините за не очень уместный вопрос -Схема подключения адрески к Wemos такая же как в GyverLamp ? И возможно ли использование сенсорной кнопки вместо физической, если да то необходима ли перемычка?
 
Изменено:

Palpalych

★★★★★✩✩
24 Дек 2019
765
404
@Divin, Приветствую. Схема такая же. Но распиновку нужно уточнить согласно config.h (или, ВАЖНО, в соответствующем файле подконфигурации, если используется).

Сенсорная кнопка так же конфигурируется.
C++:
#define PULL_MODE (HIGH_PULL)         // PULL_MODE -> LOW_PULL - подтяжка входа к нулю (для сенсорных кнопок на TP223) \
                                                                                                HIGH_PULL - подтяжка входа к питанию (для механических кнопок с замыканием на массу)
#define CONTACT_TYPE (NORM_OPEN) // CONTACT_TYPE -> NORM_OPEN - нормально открытые (большинство механических кнопок и сенсорные кнопки TP223) \
                                                                                                      NORM_CLOSE - нормально закрытые
 
  • Лойс +1
Реакции: Divin

Palpalych

★★★★★✩✩
24 Дек 2019
765
404
Ну, что, продолжим!?
Решил доработать свою гирлянду к очередному НГ.
Принимайте скетч. На данном этапе это вся та же прошлогодняя гирлянда, но отлажена для компиляции не только в PlatformIO, но и в Arduino IDE.
Для последнего требуется перенести библиотеки из /lib в C:\Users\*******\Documents\Arduino\libraries. По крайней мере папочку /LEDraw
Для открытия в IDE - тыкаем в файл src\src.ino и только на этой вкладке запускаем сборку.

Для продвинутых: в файле config.h есть также настройка под дисколампу. Данная лампа была собрана в своем корпусе, питалась от 220 и отработала все праздники без нареканий. Даже крутился купол во все стороны. Чуть позже выложу схему подключения.