2015-10-02 1 views
1

У меня есть следующая проблема. Я использую в своем проекте WS2811-диоды, Arduino Due и node.js. Я хочу передать видео с устройства, подключенного к серверу node.js, и показать его на массиве диодов. Прямо сейчас я могу захватывать видео с любого устройства с браузером и камерой, изменять разрешение видео по желаемому мне (15x10) и создавать цепочку строк, содержащую информацию обо всех цветах (R, G, B) всех диодов. Я отправляю его с сервера node.js на arduino, хотя последовательный порт со скоростью передачи в бодах 115200. К сожалению, процесс отправки слишком медленный. Я бы хотел, чтобы он обновлял светодиодную матрицу не менее 10 раз в секунду. Поэтому мне было интересно, возможно, сжать эту строку, которую я отправляю в arduino, когда она туда распаковывается, и устанавливает цвета для диодов. Возможно, у вас, ребята, есть опыт работы с подобным проектом и совет, что мне делать.Сжатие строк для обновления WS2811 RGB LEDs быстрее

Для использования с диодами я использую библиотеку adafruit_neopixel.

Заранее спасибо;)

+0

Давайте делать некоторые математике. У вас 150 пикселей на 10 Гц, это 1500 пикселей в секунду. Для одного пикселя требуется 24 бит/пиксель * 1,25 мкс/бит = 30 мкс/пиксель = 0,00003 с/пиксель. 1500 пикселей в секунду * 30 мкс/пиксель = 45 мс/сек, то есть 4,5%. Таким образом, контроллер должен будет тратить всего 4,5% своего времени на отправку данных на дисплей и 95,5% осталось на другие вещи. Это хорошие новости. Плохая новость заключается в том, что при отправке данных на светодиоды контроллер не может ничего делать * ничего * иначе или время будет ломаться, даже не обслуживая серийный RX ISR. Поэтому либо вы синхронизируете передачу последовательных данных для обновления дисплея, либо вы будете – JimmyB

+0

пропускать байты со стороны μC. – JimmyB

ответ

0

Если бы я тебя, я хотел бы попробовать конвертировать видео в 16-битной кодировке (например, RGB565), или, возможно, даже 8-бит, на вашем сервере.

Даже при этом низком разрешении я не уверен, что atmega328p достаточно мощный, чтобы преобразовать его обратно в 24-битный и отправить данные на дисплей, но TIAS. Если это не сработает, вы можете подумать о переходе на BeagleBone или RPi.

0

Если у вас есть большие области схожих цветов, особенно если вы сбросили глубину бит до 16 или 8 бит, как было предложено в предыдущем ответе, возможно, стоит попробовать сжатие кодирования длины пробега.

Это легко реализовать ее в несколько строк кода: https://en.wikipedia.org/wiki/Run-length_encoding

+0

Хотя эта ссылка может ответить на вопрос, лучше включить основные части ответа здесь и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/17041331) – loki

Смежные вопросы