Можно так. Включить двойную буферизацию, после чего сначала вывести центральный текст, а потом обрезать его по краям наложением крайних секций.
Тыкал,тыкал ваш код ничего не натыкал… Ситуация как при обычном коде 4,104x52,13,3.
https://youtube.com/shorts/MnydR6iEj5E
Как будто PEE метка должна заполнять пиксель на матрице но не учитывать его в координатах в коде. а по факту получается что PEE не передаёт ничего на матрицу и буфер не существующего пикселя не заполняется и соответственно не происходит сдвига
Вы не забыли настройку RGB_DMA в конфиг-файле выключить?
Вы указали 26 строчку но там dma для f4 его закомментировал, а рядом для f1 я не нашёл где закомментировать можно.
Понятно.
Надо подумать.
Сейчас попробую на f4 переехать. О результатах сообщу)
На f4 точно такая же ситуация. Dma точно выключен так как на этой плате со включенным dma панель вообще не заводилась.
@craftish
Добрый день
В коде из сообщения 397 попробуйте поменять макрос PEE
На вот такой
#define PEE \
*this->datasetreg = this->clkmask; \
*this->datasetreg = this->clkmask << 16;
А что за “почти”, что не доделали?
Извините,не уточнил. При движении текста в лево (на видео в конце) он не доходит до конца а вместо текста там какие-то помехи.
Это не баг, а фича так задумано. Это демонстрация работы двойного буфера. Точнее демонстрация будет, если включить двойную буферизацию - помехи исчезнут
@craftish
Еще одна поправка
Порядок операторов в PEE лучше поменять на обратный:
Подскажите, не могу до конца разобраться как сделать бегущую строку не во всю led панель, а с отступами от краев? То есть хочу с левого края нарисовать сердечко, с правого края нарисовать сердечко, а между ними чтобы бегал текст.
По левому краю я выставляю координаты допустим 10 пикселей и у меня бегушка как раз оставляет это количество пикселей, но вся бегушка не доходя 10 пикселей стирается и начинает бежать от самого края правого угла.
Я хотел бы чтобы весь текст пробегал, (пропадал где-то в текстурах левого края), но только упирался не в край матрицы, а отступ на заданное количество пикселей.
На видео где говорили про фичу двойного буфера как раз получается то, что я бы хотел получить, только вместо моргания я хочу нарисовать сердечко. И с другого края такой же отступ, сердечко и внутри бегушка.
Именно так и делайте. Включаете двойную буферизацию. Сначала выводите в буфер бегущий текст на всю ширину, потом поверх него по краям рисуете сердечки. Только после этого выводите буфер на матрицу - тогда не будет моргания.
При каждом сдвиге бегущего текста сердечки надо перерисовывать заново.
И я пока с отступами разбирался выводил буквы, а как лучше сердечко нарисовать? Это мне через битмап надо делать? Или в таблицу шрифтов заменить какой-нибудь символ на сердечко и потом посылать этот символ? Как сделать лучше?
я бы через битмап
А где можно по подробнее почитать про двойную буферизацию? При включении двойного буфера у меня вообще всё отображаться перестало:(
Или может быть какой-нибудь простецкий пример приведете?
При использовании двойного буфера нужно явно давать команду
// output mem buffer to matrix
dmd.swapBuffers(true);
иначе на матрице ничего не будет.
Смысл в том, что пока один буфер показывается, вы без помех рисуете на втором. И только когда вы поменяете буфера местами - изменения станут видны на экране.
В общем и целом концепция ясна, но я так и не понял, а как управлять этими буферами?
dmd.swapBuffers(true); //это функция активации двойного буфера.
char c[] = "Привет Ардуино!"; //первый буфер
char s[] = "Привет STM32"; // второй буфер
utf8_rus(k, (const unsigned char*)s); // функция конвертации кодировки
utf8_rus(l, (const unsigned char*)c); // функция конвертации кодировки
dmd.drawMarqueeX(m, step, 16); //функция вывода буфера s
dmd.drawMarqueeX(n, step, 2); //функция вывода буфера с
А как выглядит функция вывода первого буфера, пока я редактирую второй буфер