Как управлять светодиодами Neopixel параллельно?
Представьте себе набор светодиодов (Neopixel или других), промаркированных от 2 до 12. Светодиодов может быть больше 11, поэтому допускается повторная нумерация. Мне нужен простой способ управления ими с одного Arduino на основе их метки. Например, я должен иметь возможность реализовать функцию, аргументами которой являются значение метки и значение RGB, и которая переключает все светодиоды с этим значением метки на заданное значение RGB. Самое главное, решение должно быть независимым от порядка; то есть я должен иметь возможность переподключать светодиоды (или, что эквивалентно, перемещаться по меткам шестиугольников) любым способом, и все равно все будет работать без переписывания кода. (Для контекста, моя цель — создать собственное издание Settlers of Catan, в котором метки на каждом шестиугольнике загораются при броске их значения на кубике.)
Я знаю, что не могу просто использовать Neopixels из коробки, так как адресация зависит от порядка их подключения. Поэтому я предполагаю, что мне нужно придумать способ, чтобы каждый светодиод «узнал» свою метку, подключить их все параллельно, а затем написать пользовательскую библиотеку для . Но я понятия не имею, как заставить каждый светодиод узнать свою метку, не имея целого Arduino для каждого светодиода, что заняло бы слишком много места. (Я бы хотел уместить все примерно в объем типичной шестигранной метки Catan; представьте, 2-3 четвертаки, сложенные вместе.)
Я довольно хорошо разбираюсь в Arduino, но я новичок в электронике. Можно ли перепрограммировать контроллер Neopixel? Или есть маленькая логическая плата, которую я могу подключить к Neopixel или простому светодиоду, который справится с этой задачей? Что-то еще я упустил?
@Twiffy, 👍1
Обсуждение2 ответа
Провода данных индивидуально адресуемых светодиодов различных описаний обычно подключаются в виде последовательной цепи, при этом каждый драйвер светодиода имеет вход и выход для данных (и часов). Затем каждый драйвер светодиода будет манипулировать сигналом, который он посылает дальше, чтобы обмануть следующий светодиод, заставив его думать, что он первый в цепи.
Большинство библиотек для управления ими могут легко иметь несколько сотен светодиодов, которыми они могут управлять одновременно, в зависимости от доступной оперативной памяти.
Будет непросто «переподключить светодиоды [...] и при этом все сохранить работают без переписывания кода». Эти светодиоды не такие уж и умные, и единственный способ решения этих проблем — это порядок отправки данных о цвете. через линию передачи данных.
Однако вы можете написать код таким образом, чтобы перемонтаж требует только минимального изменения в коде. Я бы использовал массив для сопоставьте индексы светодиодов с их метками. Что-то вроде этого:
const uint16_t LED_COUNT = ...;
// Сопоставьте индексы светодиодов вдоль полосы с шестнадцатеричными метками.
const uint8_t ledLabels[LED_COUNT] = {
2, 2, 2, 2, // светодиоды от 0 до 3 обозначены как "2"
8, 8, 8, 8, // Светодиоды с 4 по 7 обозначены цифрой "8"
// и т. д...
};
Затем предположим, что ваша светодиодная лента заявлена следующим образом:
const uint8_t LED_STRIP_PIN = ...;
Adafruit_NeoPixel ledStrip(LED_COUNT, LED_STRIP_PIN);
«функция, аргументами которой являются значение метки и значение RGB, и который преобразует все светодиоды с этим значением метки в заданное значение RGB» может быть довольно легко написано:
// Переключает все светодиоды, имеющие эту шестнадцатеричную метку, на заданный цвет.
void setHexColor(uint8_t label, uint32_t color)
{
for (uint16_t n = 0; n < LED_COUNT; n++)
if (ledLabels[n] == label)
ledStrip.setPixelColor(n, color);
ledStrip.show();
}
Теперь, если вы переподключите ленту, вам просто нужно обновить ledLabels
массив и перекомпилируйте. Если вы можете отправить эту информацию на ваш
Arduino во время работы (последовательное соединение, ИК-связь, SD-карта
вставленный в соответствующий разъем, что угодно...), то вы могли бы даже
есть процедура, где Arduino обновляет сам массив. Очевидно,
тогда квалификатор const
должен быть удален. Но теперь вам нужно придумать
способ «рассказать» Arduino о вашей проводке.
- Управлять несколькими полосками WS2812B с разным количеством светодиодов.
- Использование кольца NeoPixel без Arduino
- Использование аккумуляторов 18650 с повышающим преобразователем 3,7 В в 5 В.
- Устранение неисправностей светодиодной ленты WS2812B
- Нужно ли подключать светодиодную ленту WS2812 «последовательно», если я хочу адресовать каждый светодиод отдельно?
- Аргументы CHSV с FastLED
- Функция NeoPixel Gradient Sweep
- Выход из цикла while с помощью ИК-пульта для neopixel
Неопиксели обычно подключаются последовательно. Можете ли вы уточнить, как вы планируете подключать их?, @Nick Gammon
Как вы планируете соединить плитки (электрически)? Вы можете просто сделать 12-контактный разъем на каждой из сторон плиток (на самом деле 14, так как вам также понадобятся Vcc и Gnd). Или сделать небольшой микроконтроллер, например attiny85 на каждой плитке и обычный светодиод rgb. И управлять ими, например, по I2C., @Gerben
что это значит?
судя по их этикетке
, @jsotolaкаждый светодиод "знает" свою метку
.... они не знают .... светодиоды принимают первые 24 бита после сброса и передают все остальные биты следующему светодиоду ... после сброса второй светодиод не получает никаких данных, пока первый светодиод не "поглотит" первые 24 бита .... это как группа людей и колода цветных карт, где каждый человек берет карту сверху колоды (каждая карта представляет 24-битный цвет), @jsotolaНик, это часть вопроса. Они должны быть взаимозаменяемыми, как обычные Neopixels. Например, подключенными параллельно., @Twiffy
jsotola, да, я знаю. Вот почему я сказал: "Я знаю, что не могу просто использовать Neopixels из коробки"., @Twiffy
@Gerben, спасибо, это очень полезно -- я не знал об ATTiny85, и это похоже на крошечную логическую плату, которую я искал. Если вы хотите написать это как ответ (с любыми другими советами или мыслями, которые у вас есть), я буду рад отметить это как решение., @Twiffy
нет смысла делать аппаратное решение программной проблемы...
возиться с шестнадцатеричными метками
, вы можете сделать это в массиве со светодиодами, соединенными последовательно... я думаю, что вам все равно придется делать это с каждым светодиодом отдельно... пожалуйста, нарисуйте две или три схемы итераций меток светодиодов (как они меняются от одного броска кубика к следующему броску), @jsotola