Это очень легко решается - берете блекпилл вместо блюпила и все. Код переписывать не придётся
Это отличная новость:)
Разбирался с двойным буфером и наконец-то получилось сделать то, что я хотел.
Резюмируя вышесказанное нужна вот эта информация:
#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 за его библиотеку и самое главное за помощь в разборе этой библиотеки.
Рад что все получилось.
Сорри за придирки, а вот это что такое? Цикл от нуля до единицы?
Зачем он тут?
Это я делал бегущую строку и получилось что если цикл до единицы, то сдвиг происходит на один пиксель. Если поставлю 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.
Спасибо, только почему-то ссылка не открывается.
Открыл Ваш гитхаб - такого репо нет.
Да, забыл репозиторий сделать публичным. Открыл.
спасибо.
Не будете против, если я его, может, в один из следующих релизов добавлю? - с сохранением ссылок на авторство, разумеетеся
Да, конечно. Буду только рад. Будет неплохо, если участники скажут какой символ как подправить.
Хорошо, если что будет - передам.
Но это такая редкость, чтобы кто-то какой-нить фидбек оставил. Разве когда что-то вообще не работает