Сегодня я хотел бы выступить в необычном для хаба Arduino качестве и рассказать не об устройстве, а о библиотеке.
Речь пойдет о библиотеке LedMatrix (русскоязычное описание), которая умеет управлять светодиодными матрицами 8x8 на чипах MAX7219 и MAX7221.
Я не буду здесь пересказывать readme из репозитория, а остановлюсь на основных особенностях.
Основополагающая концепция – это код должен подстраиваться под архитектуру вашего монтажа, а не монтаж под код.
Итак, что же такое умеет моя библиотека.
1. Она умеет программно поворачивать матрицы. Таким образом, вам не нужно стараться подогнать расположение матриц, что бы задуманная вами картинка отображалась корректно.
Такая проблема действительно существует. И часто поднимается на форумах.
2. Она умеет объединять матрицы в каскады. Работа с каскадом как с отдельной сущностью гораздо удобнее чем с простым массивом индивидуальных матриц.
3. Она умеет объединять каскады в суперкаскады.
Чипы MAX7219 и MAX7221 накладывают аппаратное ограничение на размер каскада в 8 матриц на каскад. Но можно подключить несколько каскадов, объединить их в один суперкаскад и работать с ним как с единым каскадом. Суперкаскад – это просто большой каскад. Интерфейсных отличий нет.
4. Она умеет работать как через аппаратный SPI так и через программный. Вы сами выбираете способ подключения своего устройства и в зависимости от ваших потребностей выбираете через какой интерфейс работать.
5. Она снабжена небольшой порцией синтаксического сахара в виде итераторов, удобной работы с бинарными представлениями.
6. Ну и конечно, она умеет все что должна уметь такая библиотека. Сюда относится работа с отдельными строками, столбцами, точками. Получение, установка, инверсия, сдвиги et cetera.
Ну и в заключении, скажу, что библиотека имеет выверенный и гибкий интерфейс написанный на современном C++.
С примерами использования вы можете познакомиться на страничке русскоязычного описания и в разделе примеры.
В настоящее время, Arduino IDE поставляется со встроенным avr-g++ версии 4.8.1, который, в достаточно полной мере, поддерживает стандарт C++11. Так почему же мы наблюдаем удручающую картину, когда большинство библиотек – это просто C с классами. Считаю, что пришло время переходить на современные стандарты. И предлагаю поддержать мое начинание.
Автор: rotor