Матрица 8х32 на MAX7219 и перевернутое изображение
- Войдите на сайт для отправки комментариев
Ср, 17/06/2020 - 17:05
Получил наконец-то матрицу и начал опыты. К собственному удивлению обнаружил, что текст на матрице почему-то перевернут набок, соответственно, на большинстве примеров получается фигня. Только один пример выдал мне строку в горизонтали, но в обратной последовательности, т.е. первая матрица почему-то получилась последней. Видимо, автор тоже боролся с подобным глюком.
Вот кусок тестового скетча из примеров к LedControl
#include <LedControl.h> /* Now we need a LedControl to work with. ***** These pin numbers will probably not work with your hardware ***** pin 6 is connected to the DataIn pin 5 is connected to the CLK pin 4 is connected to LOAD We have only a single MAX72XX. */ LedControl lc = LedControl(6, 5, 4, 4); void setup() { /* The MAX72XX is in power-saving mode on startup, we have to do a wakeup call */ for (int i = 0; i < 4; i++) { lc.shutdown(i, false); /* Set the brightness to a medium values */ lc.setIntensity(i, 8); /* and clear the display */ lc.clearDisplay(i); } /* here is the data for the characters */ byte r[5] = {B00111110, B00010000, B00100000, B00100000, B00010000}; byte one[6] = {B00000000, B10000010, B11111111, B11111111, B10000000, B00000000}; /* now display them one by one with a small delay */ lc.setRow(0, 0, r[0]); lc.setRow(0, 1, r[1]); lc.setRow(0, 2, r[2]); lc.setRow(0, 3, r[3]); lc.setRow(0, 4, r[4]); lc.setColumn(1, 0, one[0]); lc.setColumn(1, 1, one[1]); lc.setColumn(1, 2, one[2]); lc.setColumn(1, 3, one[3]); lc.setColumn(1, 4, one[4]); lc.setColumn(1, 5, one[5]); } void loop() { }
массив r[5] и блок lc.setRow()... взял из примера
массив one[6] и блок lc.setColumn()... нарисовал сам.
Результат выполнения скетча на фото
Как видим - картинка зеркалится и нулевой пиксель блока матрицы находится почему-то в нижнем правом углу. Как это можно победить?
проблема известная. Лежащие в инете скетчи рассчитаны на отдельные матрицы , а вы явно купили целиковый модуль. Будь у вас матрицы - вы бы их просто повернули на бок и проблема бы решилась. Варианта тут два - один для умелых, другой для ленивых :) Умелые берут ножовку и распиливают плату на отдельные матрицы. Остальные переписывают код. Поскольку я не "умелый". а скорее наоборот, типичный "рукожоп" - я переписывал. Заняло, как помню, минут пятнадцать...
Если бы еще не зеркалило)))
Да, модуль цельный. Пилить вроде не нужно, плата подрезанная, по идее можно просто поломать. Но возиться не хочется ))
Если вспомнить не трудно - в каком направлении смотреть, что переписать?
для случая повернутых на бок символов - менять SetRow и SetColumn местами и при необходимости зеркалить
Отзеркалить то, что изначально выводилось setColumn() оказалось просто - отзеркалить номера столбцов (вместо i сделал 7 - i)
А вот с заменой setRow на setColumn все оказалось не просто
Тут нужно зеркалить по вертикали, т.е. нужно разворачивать байты наоборот. Как-то так
Ну, не знаю, насколько это оправданно, но таки получилось так
Ох и муторно ))