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

Это очень легко решается - берете блекпилл вместо блюпила и все. Код переписывать не придётся

Это отличная новость:)

Разбирался с двойным буфером и наконец-то получилось сделать то, что я хотел.
Резюмируя вышесказанное нужна вот эта информация:

#define ENABLE_DUAL_BUFFER true

Именно так и делайте.
Включаете двойную буферизацию.
Сначала выводите в буфер бегущий текст на всю ширину,
потом поверх него по краям рисуете сердечки.
Только после этого выводите буфер на матрицу - тогда не будет моргания.
При каждом сдвиге бегущего текста сердечки надо перерисовывать заново.

При использовании двойного буфера нужно явно давать команду

// output mem buffer to matrix
dmd.swapBuffers(true); //функция вывода данных на матрицу
иначе на матрице ничего не будет.

Смысл в том, что пока один буфер показывается, вы без помех рисуете на втором. И только когда вы поменяете буфера местами - изменения станут видны на экране.

И для будущих новичков часть кода для бегущей строки в середине матрицы выглядит примерно вот так:

while (1) {

    dmd.drawMarqueeX(m, step, 16); // бегущая строка
    dmd.drawChar(2, 16, 'A', 255); // в данном случае буква А которая выводится поверх бегущей строки
    dmd.swapBuffers(true); //вывод строки и буквы на матрицу

    delay(50);
    for (uint8_t i = 0; i < 1; i++) {
      step -= 1;
      delay(50);
      if (step < -100) {
        step = 128;
        dmd.clearScreen(true);
      }
    }
  }
}

Оказалось всё очень даже просто, но первый раз тяжело это даётся. И поэтому хочу сказать большое спасибо b707 за его библиотеку и самое главное за помощь в разборе этой библиотеки. :slight_smile:

1 лайк

Рад что все получилось.

Сорри за придирки, а вот это что такое? Цикл от нуля до единицы?
Зачем он тут?

Это я делал бегущую строку и получилось что если цикл до единицы, то сдвиг происходит на один пиксель. Если поставлю 10, то каждый цикл строка смещается сразу на 10 пикселей. И происходит не плавная бегучка, а прыжки гигантскими шагами. Уверен, что это костыли, но работает. delay(50); регулирую скорость бегучки.

Если честно, методом “тыка” делал код и получилось, что нужен цикл от 0 до 1.

Кстати, сейчас заметил, что один delay(50); перед циклом можно удалить, а в цикле просто увеличить время.

У вас цикл от 0 до 1 НЕ ВКЛЮЧАЯ 1, то есть реально это не цикл, а однократное выполнение. Поэтому цикл можно выкинуть из кода вовсе.

Но это так, косметическое замечание.

Да, действительно, без цикла тоже работает.

У меня еще один вопрос назрел. Для функции dmd.drawRGBBitmap(); мы забиваем файл битмапа числами а ля 0xFFA2 для выбора цвета пикселя.
А для функции dmd.drawBitmap(); файл битмапа забиваем значениями 0x00, или 0x01? Мы же все равно в функции потом цвет выберем.

Эти обе функции наследуются из библиотеки AdafruitGfx и смотреть их описание надо там. Честно говоря, я не помню точно, чем они отличаются.

Подозреваю что несколько сложнее - каждый бит это одна точка, то есть в байте не 0 и 1, а сразу 8 пикселей

Попробовал залить прошивку в блэкпилл и естественно, сразу это дело не заработало. Поэтому опять вопрос к знающим.

Имеется STM32F401CCU6 и программатор ST-Link V2 (не модифицированный). Имеется Arduino IDE и аддоны установленные из самой arduino ide (заходим в настройки иде добавляем ссылку http://dan.drown.org/stm32duino/package_STM32duino_index.json
и где-то в менеджере плат можно скачать аддоны для stm32f103 и stm32f401…) Вот по такой технологии добавлял и с F103 сейчас все работает.

Когда выбираю плату в arduino ide F401CC вместо Upload method: “STlink” или Upload method: “Serial” появляется строка USB Configuration: в котором “Serial” “Inactive” “Mass Storage”
Serial - это загрузка через UART, как я понимаю
Mass Storage - это какая-то специфическая загрузка с флешки, диска или какого-то еще носителя.
Inactive - вот это я не понимаю, что за режим.

Но сейчас попробовал просто скомпилировать прошивку под чип F401 и компилятор выдает много ошибок (хотя тот же код под F103 нормально компилируется). Судя по написанному он не может найти нужные ему файлы.
Так вот подбираясь к сути, на форуме нашел ссылку на правленые аддоны как раз от b707
я их скачал и положил как есть в папку C:\Users\Serg\Documents\Arduino\libraries.
И то ли нужно сначала старые аддоны удалять, то ли я не туда положил скачанные аддоны, но с F401 не получилось подружиться, хотя на F103 работает.

Подскажите, куда мне положить аддоны, чтобы можно было залить скетч в F401??
И способа заливки, я так понял, тоже два осталось! Или через модифицированные ST Link или через UART.

Да нет, не работает. Вы уже все позабыли - но месяц назад вы уже приходили с подобной проблемой - и в сообщении 342 я отвечал вам, что библиотека работает только с аддоном Кларка, который и надо ставить.

Неправильно.
Надо класть в C:\Users\Serg\Documents\Arduino\hardware

Подробнее читайте тут:

ЗЫ Аддон брать мой, ссылка в описании библиотеки.

Если к этой библиотеке добавить описание как на этом сайте в разделе документация https://alexgyver.ru/microled/ то будет конфетка, а не библиотека)

Я с удовольствием приму любые дополнения к коду или документации.

Но только после моей правки. Ибо… извиняюсь за мнение - но лучше уж никакой документации, чем плохая

Я понимаю, что если компилятор выдает ошибки - значит что-то неправильно. Я не претендую добавление моей информации куда-либо или в принципе использование данной информации. Я просто поделился информацией, как мне удалось решить проблему. Поэтому если мой пост удалят - ничего страшного не произойдет.

И да вместо STM32F1xx/GD32F1xx boards нужно поставить Arduino SAM (Cortex-M3) и проект станет компилироваться

Не совсем по теме вроде. У меня специфичная матрица 20х40 поэтому нужны мелкие буквы. Нарисовал для себя - может кому то еще пригодяться https://github.com/asultanov/DMD_AbtSmallFont.

Спасибо, только почему-то ссылка не открывается.
Открыл Ваш гитхаб - такого репо нет.

Да, забыл репозиторий сделать публичным. Открыл.

спасибо.
Не будете против, если я его, может, в один из следующих релизов добавлю? - с сохранением ссылок на авторство, разумеетеся

Да, конечно. Буду только рад. Будет неплохо, если участники скажут какой символ как подправить.

Хорошо, если что будет - передам.
Но это такая редкость, чтобы кто-то какой-нить фидбек оставил. Разве когда что-то вообще не работает :slight_smile:

1 лайк