Как прокручивать данные в светодиодной матрице через несколько модулей?
Я долгое время боролся с этой проблемой и знаю, что есть люди, которые с этим справились.
Но у меня недостаточно опыта работы с языком C, чтобы иметь навыки проектирования или разработки таких сложных функций.
Я хочу прокручивать данные, например текст, символы или числа, как в замечательных проектах на YouTube о точечной матрице.
Как это: Как сделать дисплей с бегущей строкой текста дома
Я знаю, как отображать символы, но не знаю, как их прокручивать. Если я пытаюсь, то не получаю желаемого результата.
Это моя функция для отображения символов:
void draw(void)
{
s=0;
uint8_t data_shift_buf;
for (l=0;l<26;l++) // для печати 26 букв
{
for (row=1;row<9;row++) // для 8 строк матрицы
{
SPI_TX_m16(data = (row<<8) | (Alphabet[s]),4);// попытка задать данные по столбцу
s++;_delay_ms(300);
}
}
}
@R1S8K, 👍0
Обсуждение1 ответ
Лучший ответ:
▲ 0
Это функция для решения моей проблемы.
void draw(void)
{
uint32_t map_buffer=0;int8_t i,k;
uint8_t data_reg[4] = {0xaa,0xbb,0xff,0xff}; // случайные данные для записи
uint8_t dis_buf[4],no_device,no_col;s=0;l=3;
for (i=0;i<4;i++)
map_buffer |= data_reg[i] << i*8; // загрузка данных в map_buffer
for (col=0;col<32;col++) // для 8 столбцов матрицы
{
map_buffer >>= 1; // начинаем сдвигать данные на 1 пиксель
for (i=0;i<4;i++)
dis_buf[i] = map_buffer >> i*8; // загрузка сдвинутых данных в буферы отображения
for (i=0;i<4;i++)
{
for (row=1;row<9;row++) // для 8 строк матрицы
{
SPI_TX_m(data = (row<<8) | (dis_buf[i]),i);
}
}_delay_ms(1000);
}
}
,
@R1S8K
Смотрите также:
- AVR (Arduino Uno) Serial.print и Serial.println печатают только 1 или 2 символа
- Прерывание переполнения таймера AVR не работает
- Как адресуются контакты порта arduino, если я хочу получить к ним доступ с помощью указателя?
- Как погасить светодиод за определенное время с помощью FastLED
- Использовать светодиод или подтягивающий резистор для предотвращения «плавания» или «фантомного изображения» матричной клавиатуры?
- Использование двух светодиодов с одной кнопкой
- Данные в двух 8-битных сдвиговых регистрах не изменятся
- Почему я получаю только первый байт адреса? (Протокол I2C)
Что это значит?
Светодиодная матрица с несколькими модулями... что вы высвечиваете?, @jsotolaОчевидно, что «сквозь». Не стесняйтесь уточнить вопрос, как я только что сделал., @Nick Gammon
Какой именно модуль у вас установлен? Возможно, это поможет: http://www.gammon.com.au/forum/?id=11516, @Nick Gammon
@NickGammon Спасибо за редактирование :) Например, вот это: http://www.belajarduino.com/2016/08/4in1-dot-matrix-led-module-32x8-pixel.html, @R1S8K
Да, MAX7219 — с его помощью можно прокручивать. См. ссылку выше. Не знаю, как ответить, не скопировав/вставив всю ссылку. :), @Nick Gammon
@NickGammon Большое спасибо, я просмотрел ссылку и нашел много информации о разработке MAX7219, а также нашел интересный комментарий в конце поста: «Также есть демонстрация прокрутки текста, однако она прокручивает по одному чипу за раз, а не по одному пикселю за раз. ", именно это я и ищу! Мне нужна прокрутка по пикселям., @R1S8K
В следующем абзаце под этим говорится: *Библиотека обновлена 2 октября 2015 года для обеспечения плавной прокрутки. Добавлен новый пример, демонстрирующий это. Для достижения этого для каждого модуля отображения (8 x 8 пикселей) код вычисляет пиксели для байта до, текущего байта и байта после. Затем он применяет смещение пикселей для выбора начальной точки где-то среди этих 24 (по горизонтали) пикселей.*, @Nick Gammon
ВАУ, это должно быть потрясающе, я уже несколько дней пытаюсь решить эту проблему. Да, он вычисляет для первого и второго отображения, хорошо, спасибо большое за поддержку., @R1S8K
Также ознакомьтесь с библиотекой Parola.h. https://github.com/MajicDesigns/MD_Parola Она может прокручиваться вверх, вниз, влево, вправо и на больших количествах дисплеев., @CrossRoads
Спасибо за ответ. Эта библиотека для меня очень сложная, поэтому я долго пытался, пока не справился сам. Умею только прокручивать вправо. Но функция длинная по сравнению с функциями в библиотеке Parola, она написана на C++. Очень интересно делать такие вещи в маленьких функциях., @R1S8K