Найти в Дзене
Электроника и жизнь

Вывод бегущей строки на светодиодную матрицу 16x16 адресных светодиодов

Всем привет! В данной статье о LED матрице 16 на 16 адресных светодиодов мы создадим свой собственный шрифт, взяв за основу один из стандартных шрифтов Windows, и будем выводить на матрицу русскоязычный текст, в том числе в виде бегущей строки.

Цифры и русские буквы на LED матрице
Цифры и русские буквы на LED матрице

Открываем программу Lcd image converter. О программе и основах работы с ней я рассказывал в прошлой статье. На стартовой странице нажимаем Новый шрифт.

В списке Семейство представлены все установленные в системе шрифты. Например, выбираем стандартный шрифт Arial. Ниже можно выбрать Стиль шрифта и Размер. Главное, чтобы размер по ширине и высоте не превышал размер нашей матрицы, т.е. 16 пикселей.

Lcd image converter. Выбор шрифта.
Lcd image converter. Выбор шрифта.

Нажав на кнопку Символы, находим в данном списке Cyrillic, с помощью Ctrl выделяем строки с русскими буквами и нажимаем кнопку Добавить выбранные. В верхней правой строке добавятся русские буквы. После этого можно нажимать OK.

Lcd image converter. Выбор русских букв.
Lcd image converter. Выбор русских букв.

Чтобы получить универсальный шрифт, который будет подходить для матриц 8x8 светодиодов, а так же большинства LCD дисплеев, изменим размер шрифта до 9-го. Таким образом, высота большинства символов будет равна 7 и на матрице 16x16 мы сможем разместить текст в 2 строки. В начале, выделим все цифры и нажмем Шрифт -> В изображение. Получаем заготовку со всеми цифрами.

Lcd image converter. Выбор цифр.
Lcd image converter. Выбор цифр.

Отмечаем, что каждая цифра имеет высоту 7 пикселей, а ширину 4 пикселя. Уменьшим размер изображения, нажав Изображение -> Изменение размера. Отсечем 2 пикселя сверху и снизу. И подкорректируем немного цифры: 0,2,4,5,6 и 9.

Lcd image converter. Работа с цифрами.
Lcd image converter. Работа с цифрами.

Далее инвертируем изображение, так как фоновый цвет у нас должен быть черным, а цвет шрифта белым. После этого нажимаем Преобразование, затем идем во вкладку Изображение, как и прежде выбираем 24бита, а вот основное сканирование выбираем слева направо.

Lcd image converter. Цифры в шестнадцатиричном формате.
Lcd image converter. Цифры в шестнадцатиричном формате.

Получаем код и вставляем его в таблицу Open Office. Работа с данными в виде таблицы с использованием встроенных инструментов Open Office и Excel значительно упрощает обработку больших массивов данных. Удаляем каждую пятую строчку кода. Она не несет полезной информации и служит только для отделения символов друг от друга. Шестнадцатиричное представление чисел заменяем на двоичное. «0x000000», заменяем на «0», а «0xffffff,» заменяем на «1». Удаляем лишние пробелы и получаем запись каждого столбца изображения в двоичной системе исчисления. Далее с помощью функции BIN2HEX() превращаем двоичный код в шестнадцатиричный. Добавляем столбец 0x и с помощью символа объединения &, получаем шестнадцатиричный код каждого числа. Вообще конечно можно было бы оставить и в двоичном представлении, но так компактнее. Превращаем всё в строку и переносим в наш скетч в заранее подготовленный массив для цифр.

Open Office. Компактное представление цифр .
Open Office. Компактное представление цифр .

Таким образом, каждая цифра у нас занимает всего 4 байта памяти. Если бы мы оставили в 24 битном формате, то каждая цифра занимала бы 128 байт.

С символами мы поступим ровно так же как с цифрами. А вот с буквами чуть сложнее. Размер букв очень сильно варьируется по ширине от 4-х (Б) до 9 пикселей (Ж). Примем ширину символа в 7 пикселей. Перерисуем некоторые буквы, чтобы они умещались в параметры 7х8.

Далее с буквами производим те же манипуляции что и с цифрами.

Полученный код букв, цифр и символов вставляем в заранее подготовленные элементы массива в нашем скетче.

Массивы всех символов в Arduino IDE
Массивы всех символов в Arduino IDE

Таким образом, мы создали свой собственный шрифт и разместили его в очень компактном виде во флеш-памяти. Ссылка на сам скетч с готовым шрифтом в конце статьи.

Для вывода статического текста на LED матрицу служит функция showText().

В аргументах функции showText() указываем: последовательность символов, положение левого верхнего угла выводимого текста и его цвет. Можно разместить 2 строки друг под другом. Размер текста позволяет.

Вывод статического текста на LED матрицу
Вывод статического текста на LED матрицу

Если к этой LED матрице подключить еще одну и увеличить в настройках ширину матрицы до 20, и, следовательно, общее количество светодиодов увеличить до 320, то завершающая часть цифры 4 отрисовывается на второй матрице, а так же рисуется буква Г. Таким образом, можно соединять последовательно несколько матриц. Или сразу взять матрицу большей ширины.

Вывод статического текста на две LED матрицы
Вывод статического текста на две LED матрицы

Для вывода текста в виде бегущей строки используем функцию runText(). В ней задаем: текстовую строку для воспроизведения, смещение по вертикали, цвет текста и скорость воспроизведения.

Вывод бегущей строки на LED матрицу
Вывод бегущей строки на LED матрицу

Ссылка на программу Lcd image converter - https://sourceforge.net/projects/lcd-image-converter/

Ссылка на скетч - https://yadi.sk/d/WRJaIJphGDl-hw

Ниже размещено видео по материалам данной статьи.

_________________________________________________________

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

Другие публикации по теме: