Как стать автором
Обновить

Комментарии 13

В шапке заметки гифка — мне показалось или на самом деле библиотечка оставляет хвосты при сдвиге? Т.е. предыдущий столбец гаснет после того, как засвечивается новый.
На видео хвостов не видно. Это особенности сжатия. Гифка полученная из видеофайла имела размер 10 Мб. Пришлось ее ужать. Вот и такой эффект.
На видео тот же эффект. Так быть не должно, сам натыкался на подобный эффект, была ошибка в коде.
Скорей всего дело в записи на камеру, когда один из кадров в череде видеофайла ловит момент, в одну половину которого горел предыдущий пиксель, а в другую — следующий. Избежать этого при съёмке без хардовой модификации платы нельзя, если уменьшить выдержку — будет видно на видео, как загораются отдельные светодиоды. А на каждый светодиод по конденсатору паять — то ещё мучение.
Что то неправдоподобное написали вы. У меня такого эффекта не было:
http://www.youtube.com/watch?v=3etFtuy6sP0
А вот тут была кривая прошивка, которая при динамической индикации засвечивала столбец:
http://www.youtube.com/watch?v=Va96GCUEiPE
Да нет, у вас тоже такой эффект есть. Дело в fps камеры
Я на планшет снимал. У вас может камера по продвинутей.

image
Убедится можно так:

youtube-dl "https://www.youtube.com/watch?v=3etFtuy6sP0"
mv "stm8s-discovery 74hc595 8x8 led matrix-3etFtuy6sP0.mp4" "matrix.mp4"
mkdir frames
ffmpeg -i "matrix.mp4" -r 10.1 -f image2 frames/image-%3d.png

И смотрим папку frames


На сам скетч, который гоняет строку, я двумя комментариями ниже ссылку дал. Можете посмотреть и сами проверить.
Похоже, что тут играются с ступенчатым увеличением интенсивности при включении и затуханием при выключении — не считаю это хорошей идеей.
Что бы вы не гадали, что да как, выложил скетч который выводит эту надпись. Смотрите сами.
Не будет ли код, написанный на С++11 медленней чем то, что писали раньше? Ардуинка не резиновая ведь.
--Шутка про драйвер на JavaScript--
С чего бы коду на C++11 быть медленнее? Медленнее может быть только компиляция, да и то вряд ли и вы этого даже не заметите. А исполняемый код ни чем не будет отличаться от кода на чистом C или на классическом C++.
Даже более того, благодаря constexpr и семантике переноса, исполняемый код получается даже более эффективный. Поскольку часть повторяющихся вычислений может быть перенесена на этап компиляции. А семантика переноса позволяет избежать ненужных копирований, заменив их переносом.
Работа действительно большая в плане универсальности.

Но не хватает заметки (или просто примера) как использовать ее для вывода бегущих строк — ведь матрицы в 95% используют именно для этого. Дочитано полностью, но фраза "Библиотека не реализует средств для печати текстовых строк на каскаде матриц" все равно непонятна — что мешает определиться с количеством и ориентацией матриц и, уже используя эти данные, выводить текст?
Спасибо за отзыв.

LedMatrix создан как библиотека общего назначения. То есть она не делает ни каких предположений о конфигурации пользовательского монтажа, а допускает любую конфигурацию в рамках аппаратных ограничений.
Поэтому включение методов управления конкретной конфигурацией было бы нарушением целостности. Это архитектурно не правильно включать в библиотеку общего назначения реализацию конкретной конфигурации.
Например, матрицы могут быть скомпонованы в две строки или четыре. Или в горизонтальный блок. Или вообще для игры в тетрис.

Я согласен, что в большинстве случаев, библиотека будет использоваться (ну я надеюсь, что будет) для управления однострочной горизонтальной компоновкой. Правильное решение — это сделать отдельную библиотеку поверх этой.
У меня есть такие планы.

На самом деле, даже сейчас это совсем не сложная задача. Вот два примера:
https://github.com/valmat/LedMatrix/blob/master/examples/MultiShift/MultiShift.ino
https://github.com/valmat/LedMatrix/blob/master/examples/HelloHabr/HelloHabr.ino

Если кратко, то нужно с помощью метода void setCol(const Col &col, buint8_t value); установить соответствующие столбцы.

Сейчас нет интерфейса для конвертации строки в набор символов с автоматической установкой в матрицу. Т.е. что бы работать с чем то вроде const char * / const wchar_t *.
Но как я уже сказал, это отдельная задача, которая должна быть (и возможно, будет) реализована в отдельной библиотеке.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории