DMD_STM32 - библиотека DMD матриц для СТМ32 и RP2040

Можно так. Включить двойную буферизацию, после чего сначала вывести центральный текст, а потом обрезать его по краям наложением крайних секций.

Тыкал,тыкал ваш код ничего не натыкал… Ситуация как при обычном коде 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;

Здравствуйте!
Работает почти идеально

не хватает только DMA но rp2040 уже едет)
Спасибо вам!

А что за “почти”, что не доделали?

Извините,не уточнил. При движении текста в лево (на видео в конце) он не доходит до конца а вместо текста там какие-то помехи.

Это не баг, а фича :slight_smile: так задумано. Это демонстрация работы двойного буфера. Точнее демонстрация будет, если включить двойную буферизацию - помехи исчезнут :slight_smile:

@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); //функция вывода буфера с
А как выглядит функция вывода первого буфера, пока я редактирую второй буфер