Найти тему
Электроника и жизнь

Создание анимации для LED матрицы 16x16 адресных светодиодов

Всем привет! В предыдущей статье Управление светодиодной матрицей 16x16 адресных светодиодов WS2812B с помощью энкодера мы подробно знакомились с отображение различных цветовых эффектов и управление ими с помощью энкодера. В этой статье о мы будем превращать картинки в шестнадцатиричный код и отображать их на LED матрице.

Для преобразования любой картинки в цветовой код, я использую программу Lcd image converter. Программа бесплатная. По ссылке скачиваем программу Lcd image converter. Кстати, у неё есть интерфейс на русском! Распаковываем и запускаем. В самом начале можно в настройках выбрать русский язык.

-2

Далее нажимаем Файл -> Открыть и выбираем изображение. Я заранее скачал несколько картинок для примера. Появляется изображение размером 16х16 и в масштабе 1:1. Это очень мелко. Зажимаем клавишу Ctrl и крутим колесико мыши от себя. Увеличиваем масштаб до нужного нам размера.

-3

Главное, для чего нам нужна данная программа - это перевести картинку в массив данных, который мы загрузим в LED матрицу. Выбираем пункт Настройка -> Преобразование. Из всей информации на странице нас интересует Тип изображения. Выбираем Цветное.

-4

Далее переходим во вкладку Изображения. И выбираем Блок данных -> 24 бита.

-5

Теперь нажимаем кнопку Открыть предпросмотр.

-6

Копируем массив чисел в заранее подготовленный массив нашего скетча. Т.к. Arduino UNO не может похвастаться большим объемом оперативной памяти (ее размер всего 2КБ), хранить массивы мы будем во флеш-памяти (т.е. памяти, предназначенной для хранения кода программ). Её размер составляет 32 КБ, что в 16 раз больше, чем оперативной памяти SRAM.

-7

Для этого мы добавляем к массиву ключевое слово PROGMEM. И обязательно объявляем константой. Так как хранимые таким образом данные можно считать, но нельзя изменить.

-8

Добавляем в скетч функцию, которая будет считывать значения из PROGMEM переменной в массив светодиодов матрицы. Обратите внимание, что при чтении массива из Flash памяти, мы используем не имя массива, а указатель на его имя, а вернее указатель на адрес в памяти, где хранится конкретный элемент массива.

Т.к. каждый цвет у нас занимает в памяти 4 байта, мы используем функцию pgm_read_dword (). При чтении 2 байт, используется функция pgm_read_word(). При чтении 1 байта – функция pgm_read_byte(). Загружаем скетч в Ардуино. Получаем вот такой результат:

-9

Добавляем заранее подготовленную картинку сердца, чуть большего размера. Это то-же сердце, но увеличенное на 1 пиксель в каждую сторону в Photoshop.

Проделываем ту же процедуру, что и с первой картинкой, и копируем код во второй элемент двумерного массива. Загружаем скетч в Ардуино и видим как наше нарисованное сердце начинает пульсировать. Вращая ручку энкодера по часовой стрелке, мы увеличиваем пульс (т.е. число кадров в секунду), а против часовой уменьшаем.

-10

Теперь предположим, что мы создали или нашли в Интернете готовую анимацию в формате gif. Например, анимация огня. К сожалению, программа Lcd image converter не позволяет разбить анимированную картинку на кадры. Зато с этим прекрасно справляется Photoshop. Открываем картинку. Каждый кадр представлен отдельным слоем. Выбрав Окно -> Анимация можно управлять анимацией.

-11

В данном случае нам это не нужно, а нужно сохранить каждый слой как отдельный файл BMP. Наиболее просто это сделать через Файл -> Сценарии -> Экспортировать слои в файлы. Выбираем папку для сохранения, тип файлов BMP и нажимаем кнопку Выполнить. Слои экспортируются в файлы. Далее возвращаемся в Lcd image converter выбираем сразу все 4 созданных файла. Преобразуем каждый в шестнадцатиричный код и копируем в заранее подготовленный новый массив. После загрузки в Ардуино первой анимацией будет сердце, а при нажатии на кнопку энкодера мы переходим к анимации огня. И так по кругу.

-12

Таким образом можно создавать оригинальные композиции, со множеством заранее запрограммированных эффектов, и переключать их с помощью энкодера.

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

Ссылка на скетч и картинки из видео - https://yadi.sk/d/MZKIhfh1qJbk4g

Ниже размещено видео по материалам данной статьи. Спасибо, что дочитали до конца! Всем пока!

_________________________________________________________

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

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