ESP8266 Управление несколькими светодиодными полосами

вот что у меня есть.

ESP8266-12E (фактически построен NodeMcu, но распиновка такая же, как по ссылке) https: // acrobotic.com/acr-00018

Светодиодная лента использует микросхему WS2811

Код, который я позаимствовал из работ, частично работает с модами, которые я сделал. Я просто опубликую измененные мной разделы, но полный код здесь. https://github.com/jasoncoon/esp8266-fastled-webserver

Что он делает. Исходный код подключается к Wi-Fi. Загружает страницу управления, когда вы указываете IP-адрес отдельного браузера. Изменяет узор / цвета при вводе.

Мои изменения Исходная программа настроена на одну длинную светодиодную ленту, которую я протестировал, чтобы убедиться, что все работает. Затем я разрезал полосу на три части для подсветки шкафа. Я хочу, чтобы каждый из них был на отдельном штыре, чтобы я мог контролировать задержку между ними (заставляя полоски казаться длиннее, чем они есть на самом деле).

Проблема Проблема заключается в том, что после разрезания полосы и соединения не все три полосы светятся вместе. (насколько мне известно с прошлой ночи) Со всеми 3 входами работает только полоса 1 Отключение полосы 3 приводит к работе 1 и 2 Отключение полосы 2 заставляет 1 работать, а 3 все еще не работает Отключение полосы 1 заставляет работать 3 и 2 по-прежнему не работают (я думаю, что это был такой порядок). Каждая полоска сама по себе работает на своих соответствующих контактах. Имейте в виду, что исходная установка с одной длинной полосой работала нормально.

Изменения кода (с небольшими изменениями с каждой стороны, чтобы помочь найти его в исходном коде). Этот первый раздел был изменен с учетом различных полосок разной длины.

// the very next line is original, but I commented out to add data pins later
//#define DATA_PIN      8     // for Huzzah: Pins w/o special function:  #4, #5, #12, #13, #14; // #16 does not work :(
#define LED_TYPE      WS2811
#define COLOR_ORDER   BRG
#define STRIP_1       6     // seperate strips are numbered and added together to form one long chain
#define STRIP_2       67   // by adding extra leds, you add a delay so you don't jump a gap between strips too fast
#define STRIP_3       27
#define STRIP_12      STRIP_1 + STRIP_2
#define NUM_LEDS      STRIP_1 + STRIP_2 + STRIP_3

#define MILLI_AMPS         10000     // IMPORTANT: set here the max milli-Amps of your power supply 5V 2A = 2000
#define FRAMES_PER_SECOND  120 // here you can control the speed. With the Access Point / Web Server the animations run a bit slower.

FastLED.addLeds изначально был одной строкой, теперь ее 3.

  FastLED.addLeds<LED_TYPE, 5, COLOR_ORDER>(leds, 0, STRIP_1);         // for WS2812 (Neopixel)
  FastLED.addLeds<LED_TYPE, 6, COLOR_ORDER>(leds, STRIP_1, STRIP_2);
  FastLED.addLeds<LED_TYPE, 7, COLOR_ORDER>(leds, STRIP_12, STRIP_3);

Причина резки светодиодной ленты - места крепления. Полоса_1 находится между холодильником и плитой. Полоса_2 находится между плитой и раковиной. Полоса_3 находится между раковиной и стеной.

Причина разделения их на выводах заключается в том, что FastLED, похоже, не имеет простого способа обновить шаблоны. Я знаю, что с текущей настройкой она, по крайней мере, частично работает, без необходимости проходить и изменять 8 или около того шаблонов, уже имеющихся в программе. При отключенном Strip_3 полоски 1 и 2 качались вперед и назад как одна непрерывная полоса. Чтобы добавить задержку без изменения паттернов, я просто говорю, что Strip_1 длиннее. Это создает впечатление, что шарик света проходит сквозь печь и раковину невидимым образом и снова появляется на следующей полосе.

Вот пример, который я использовал для этой настройки. https://github.com/FastLED/FastLED/wiki/Multiple-Controller-Examples На полпути вниз: «Один массив, много полос»

Отказ от ответственности: я инженер-механик, который не обращал внимания в школе, когда мы занимались небольшим программированием, которое требовалось (задним числом отстой). В любом случае, я потратил последние полторы недели на изучение руководств и примеров C ++, чтобы зайти так далеко. Писать будет плохо, но, по крайней мере, я понимаю, что сейчас делает половина программы.


person Fields    schedule 17.08.2017    source источник
comment
Не знаю, почему меня пометили. Разъяснение по этому поводу было бы полезно. Я получил это в основном работая с тонной исследований, но я застрял на одной части.   -  person Fields    schedule 17.08.2017
comment
Между нами MechE ... люди на этом сайте довольно разборчивы в том, как формируются вопросы. ;-) Я не голосовал против, но ваш конкретный вопрос по коду неясен. У вас проблемы с кодом? Или проблема в цепи? Правильно ли вы индексируете полосы / светодиоды?   -  person Mepix    schedule 17.08.2017


Ответы (1)


Попробуйте запустить свой код без лишней длины в Strip_1:

Чтобы добавить задержку без изменения паттернов, я просто говорю, что Strip_1 длиннее. Это создает впечатление, что шарик света проходит сквозь печь и раковину невидимым образом и снова появляется на следующей полосе.

Вы можете столкнуться с проблемой индексации светодиодной ленты при попытке доступа к несуществующим пикселям на вашей полосе Neopixel. Если это действительно проблема, используйте надлежащую технику задержки.

person Mepix    schedule 17.08.2017
comment
Собственно, у кода на данный момент нет задержки. Причина, по которой я подумал, что это может сработать, заключается в том, что когда я тестировал всю полосу, я случайно сказал ей, что 300 светодиодов (только 100 адресов), и волна уйдет за конец, заставив меня задуматься, почему так долго, чтобы вернуться. - person Fields; 17.08.2017
comment
Работает с полосой_1,2. Волна идет вниз, как будто они связаны. Но ему не нравится иметь 3 контакта для отправки данных, поэтому, чтобы ответить Mepix, я думаю, что сейчас это больше похоже на проблему цепи. Настоящий жук, так как я использую те же питание, плату и светодиодную ленту, что и раньше. В любом случае спасибо, но тогда я могу оказаться не на том форуме - person Fields; 17.08.2017
comment
Хм. Вот и моя догадка. Я обнаружил, что у этих вещей довольно часто возникают проблемы с индексацией (по крайней мере, в моих проектах). Вы, вероятно, уже сделали это, но поменяли ли вы порядок полос, чтобы убедиться, что Strip_3 не был поврежден при разделении? На данный момент (без более подробной информации / схемы / вашего полного кода) все, что у меня есть, - это предположения ... удачи! - person Mepix; 17.08.2017