8-900-374-94-44
[email protected]
Slide Image
Меню

Utft русский шрифт: Arduino Mega2560. Библиотека UTFT. Вывод кирилицы — Cтатьи — Статьи

Крупные шрифты на TFT-экране Arduino: ammo1 — LiveJournal

?

Алексей Надёжин (ammo1) wrote,

Category:
  • Техника
  • Cancel
Сегодня я научился делать шрифты любого размера и выводить ими надписи на экране, подключённом к Arduino. Разобраться с этим оказалась сложнее, чем можно было предположить.


Для того, чтобы сделать экран-информер (https://ammo1.livejournal.com/1114988.html) я заказал на Aliexpress плату Arduino Wi-Fi за $5 и 3.95″ экран за $12, который просто ставится вторым этажом на плату Arduino и не требует соединения проводами.

Продавец Ардуины написал, что на ней есть dip-переключатели, выбирающие режимы работы двух процессоров (ATmega328 и ESP8266), но описать назначение переключателей забыл.

У этой платы нет определённого названия, поэтому таблицу назначения переключателей удалось найти не сразу. Но я всё же нашёл её в каком-то российском магазине, торгующим такими платами.

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

В попытках найти инструкцию, на сайте iarduino.ru нашлась информация о библиотеке UTFT, поддерживающей множество экранов, в том числе этот. На сайте автора бибилотеки Rinky-Dink Electronics есть и сама библиотека и онлайн-инструмент для создания любых шрифтов.

А дальше всё просто: в любом редакторе создаём картинку со всеми символами шрифта (есть два типа шрифтов — алфавитный с 95 символами и цифровой с 10 символами).

Дальше с помощью онлайн-инструмента делаем из этой картинки шрифт. Получается файл с расширением «.c», который нужно положить в папку библиотеки UTFT.

И наконец подключаем свой шрифт и пишем им всё, что угодно.

Главное теперь, чтобы эти большие шрифты не заняли всю память Arduino и хватило места на всё остальное. 🙂

P.S. Не понимаю, как люди делают на Arduino хоть что-то нестандартное. Как только пытаешься сделать хоть что-то, не как все, тут же выясняется, что всё нужно искать наугад и методом тыка.

© 2020, Алексей Надёжин


Основная тема моего блога — техника в жизни человека. Я пишу обзоры, делюсь опытом, рассказываю о всяких интересных штуках. А ещё я делаю репортажи из интересных мест и рассказываю об интересных событиях.
Добавьте меня в друзья здесь. Запомните короткие адреса моего блога: Блог1.рф и Blog1rf.ru.

Второй мой проект — lamptest.ru. Я тестирую светодиодные лампы и помогаю разобраться, какие из них хорошие, а какие не очень.

Tags: arduino

Subscribe

  • Правила и запреты в комментариях

    Во вчерашнем вполне безобидном посте о рынке в Хургаде мне пришлось удалить более половины комментариев. В связи с этим объявляю простые правила…

  • Я переименовал блог

    Добавил к названию блога своё имя и фамилию и на это есть две причины. Мой блог в ЖЖ и каналы на Дзене и Youtube теперь называются «Алексей…

  • Я на iXBT Live

    Теперь большинство моих публикаций сначала будут выходить на платформе технических блогов iXBT Live, а позже или на следующий день в ЖЖ, Дзене,…

  • Что у меня происходит

    Расскажу, что у меня происходит и почему я снова начал делать публикации в блоге. Когда начался весь тот ужас, который продолжает происходить…

  • День рождения и новый чатик

    Сегодня у меня день рождения и по многолетней традиции в этот день я запускаю небольшой новый проект. Группа @AmmoChat в Телеграме существует…

  • Реклама или не реклама

    Вчера я получил несколько обвинений в том, что не пометил рекламу. Давайте обсудим. Я написал пост об акции по кредитной карте Tinkoff (…

  • 11 лет блогу и что со мной происходит

    Ровно одиннадцать лет назад произошло событие, радикально изменившее мою жизнь. 13 марта 2010 года я разместил в блоге рассказ о фестивале и начал…

  • Повторы старых постов

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

  • 30000 подписчиков в ЖЖ

    Сегодня аудитория моего блога в LiveJournal достигла 30 тысяч человек. Точнее, сейчас уже 30007. Это число складывается из 22523 друзей и 7484…

Photo

Hint http://pics.livejournal.com/igrick/pic/000r1edq

  • Правила и запреты в комментариях

    Во вчерашнем вполне безобидном посте о рынке в Хургаде мне пришлось удалить более половины комментариев. В связи с этим объявляю простые правила…

  • Я переименовал блог

    Добавил к названию блога своё имя и фамилию и на это есть две причины. Мой блог в ЖЖ и каналы на Дзене и Youtube теперь называются «Алексей…

  • Я на iXBT Live

    Теперь большинство моих публикаций сначала будут выходить на платформе технических блогов iXBT Live, а позже или на следующий день в ЖЖ, Дзене,…

  • Что у меня происходит

    Расскажу, что у меня происходит и почему я снова начал делать публикации в блоге. Когда начался весь тот ужас, который продолжает происходить…

  • День рождения и новый чатик

    Сегодня у меня день рождения и по многолетней традиции в этот день я запускаю небольшой новый проект. Группа @AmmoChat в Телеграме существует…

  • Реклама или не реклама

    Вчера я получил несколько обвинений в том, что не пометил рекламу. Давайте обсудим. Я написал пост об акции по кредитной карте Tinkoff (…

  • 11 лет блогу и что со мной происходит

    Ровно одиннадцать лет назад произошло событие, радикально изменившее мою жизнь. 13 марта 2010 года я разместил в блоге рассказ о фестивале и начал…

  • Повторы старых постов

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

  • 30000 подписчиков в ЖЖ

    Сегодня аудитория моего блога в LiveJournal достигла 30 тысяч человек. Точнее, сейчас уже 30007. Это число складывается из 22523 друзей и 7484…

Шрифты для графического дисплея? Это же очень просто / Хабр

Скажете, это же все электрические приборы? Бесспорно. Но еще у них есть дисплей. Да, холодильники чаще могут обходиться без дисплея, чем смартфоны, но это неточно. В этом вопросе время на стороне холодильников.

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

Монохромная анимация

Например

монохромная анимация

Однако, графический интерфейс пользователя практически никогда не может быть реализован только графическими примитивами — точками, линиями, геометрическими фигурами — без использования текста. Текст точно и однозначно «рассказывает» человеку о параметрах системы, ее настройках, прошлом и текущем состояниях.

Сегодня широкое распространение получила пользовательская и специальная электронная техника, значительная часть которой построена на базе микроконтроллеров. Микроконтроллер представляет собой вычислительную платформу, которая может быть запрограммирована почти неограниченным количеством алгоритмов, реализованных на разных языках программирования. Правда, на реализацию накладывают свои ограничения небольшой размер памяти программ (в среднем от единиц килобайт до единиц мегабайт) и ещё меньший размер оперативной памяти, обычно на порядок. А вот драйверы дисплеев, графические библиотеки и сам пользовательский графический интерфейс — отнюдь не компактные алгоритмы. Именно поэтому Вы вряд ли отыщете графические библиотеки для систем на микроконтроллерах, которые бы использовали «взрослые» векторные шрифты для вывода текста. Конечно, есть и такие микроконтроллеры, которые могут дать жару многим серьезным микропроцессорам прошлых лет, но это уже отдельная «весовая категория».

Embedded-шрифт изнутри

Обычно для решения задачи вывода текста в памяти программ создаётся специальный массив данных, так называемая таблица знакогенератора. Не пугайтесь, что он специальный, — все очень просто. В массиве-таблице по сути хранятся растровые изображения всех необходимых приложению символов. Функция графической библиотеки, выводящая текстовые строки, по очереди считывает из таблицы изображение каждого символа и «рисует» его в нужной позиции на дисплее. Все! Идея проста, как столб.

Рассмотрим пример такой таблицы. Предположим, что нам требуется изображение символа шириной 6 и высотой 8 пикселей. Причем, вертикальный ряд пикселей — столбец высотой 8 пикселей — будем кодировать ровно одним байтом. Самый первый байт будет кодировать самый левый столбец. Самый младший бит будет кодировать самый верхний пиксель столбца. Вот пример части такой таблицы:

0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, // Символ 33  <!>
...
0x7E, 0x09, 0x09, 0x09, 0x7E, 0x00, // Символ 65  <A> 
0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, // Символ 66  <B> 
0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, // Символ 67  <C> 

А вот та же часть в двоичной записи (посмотрите внимательно на биты — каждый из них кодирует один пиксель изображения):

0b01011111, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, // Символ 33  <!> 
.
.. 0b01111110, 0b00001001, 0b00001001, 0b00001001, 0b01111110, 0b00000000, // Символ 65 <A> 0b01111111, 0b01001001, 0b01001001, 0b01001001, 0b00110110, 0b00000000, // Символ 66 <B> 0b00111110, 0b01000001, 0b01000001, 0b01000001, 0b00100010, 0b00000000, // Символ 67 <C>

И, конечно же, посмотрим, как эти символы выводятся на дисплее (прямоугольники для лучшего представления знакомест символов):

Такой подход в хранении шрифта имеет свои преимущества и недостатки.

К преимуществам можно отнести небольшой размер таблицы знакогенератора в сравнении с размером файлов стандартных форматов шрифтов для «больших» систем, а также простоту программной реализации графических библиотек, основанных на этом подходе. И первое, и второе чрезвычайно важны в условиях жесткого дефицита памяти и вычислительных возможностей микроконтроллеров.

К недостаткам следует отнести проблемы с масштабированием, что является прямым следствием растровой природы такого шрифта. Приемлемый по качеству результат получается только, если увеличивать размер символов в кратное количество раз, например, в два, три или четыре раза. В таком случае нет искажений изображений символов, но чем больше кратность увеличения, тем более заметна «растровость» символов. Если в разрабатываемой системе требуется иметь несколько разных шрифтов и масштабирование одного не решает задачу удовлетворительно, тогда используют несколько шрифтов — таблиц знакогенератора.

Предыстория

В своё время мне пришлось разрабатывать программное обеспечение для устройства с графическим дисплеем RDX0120 на контроллере UC1601s. Использовался микроконтроллер Microchip PIC18. Тогда была найдена только одна работающая реализация драйвера, которая была жутко медленной и использовала моноширинный шрифт, внешним видом которого можно разве что отпугнуть будущего пользователя.

И вот, не впечатлившись результатом, была изучена документация на контроллер дисплея и разработана довольно быстрая библиотека. Шрифт, естественно, было решено сделать заново. Хотелось также, чтобы шрифт был не только моноширинным, но и пропорциональным, то есть чтобы символы в ширину занимали ровно столько места, сколько им требуется, с равным межсимвольным расстоянием.

Тут-то и понадобилось приложение, умеющее создать ту самую таблицу знакогенератора. Разработчики, которые хоть раз сталкивались с подобной проблемой, сразу же скажут: «Задача известная, решение тоже — утилита от MikroElektronika для создания именно таких шрифтов, и код генерирует аж на трех языках». Действительно, есть такая утилита. Я тоже пробовал ее использовать. Впечатления двоякие. Вроде бы все работает, и в то же время не хватает удобства и гибкости, сама таблица знакогенератора генерируется только по одному единственному алгоритму, который, очевидно, используется в графических библиотеках от той же MikroElektronika.

Идея

Народная мудрость гласит: «Если хочешь сделать что-то хорошо, сделай это сам». После изучения утилиты от MikroElektronika вдоль и впоперек пришло понимание, что так жить дальше нельзя. Тогда было решено начать собственный проект приложения, которое смогло бы удовлетворить самого требовательного разработчика. Хотелось видеть удобный редактор символов, предварительный просмотр образцов текста, наглядный импорт системных шрифтов, компактный формат хранения шрифтов, настраиваемый генератор кода и, конечно же, гибкость внешнего вида и функций приложения.

Как, наверное, большинство начинающих разработчиков, я был величайшим оптимистом и оценил время разработки в несколько месяцев. Как же я ошибался! Нет, действительно, за несколько месяцев был сделан рабочий прототип, но в таком виде его даже друзьям показывать было стыдно. Начался долгий процесс доведения до ума, в ходе которого приложение много раз изменилось внешне, обросло многими полезными и удобными инструментами. К сожалению, проект всегда был хоббийным, поэтому разработка была сильно неравномерной и разорванной во времени. Что в итоге сказалось на сроках выпуска готового приложения. Ведь старт проекту был дан где-то в конце 2015, а сейчас уже 2021.

Показывай уже!

«Вот он! Вот он — этот коварный тип…» (с).

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

Полагаю, что дальше расписывать работу приложения будет нецелесообразно — получится длинное руководство пользователя. Которое, кстати, присутствует в репозитории проекта.

Пример реализации очень мелкого шрифта — меньше просто физически некуда.

Послесловие

Проект приложения имеет открытые исходные коды и является свободным программным обеспечением.

Сейчас приложение выпущено только под Windows. Может быть, в неопределённом будущем, будут выпуски и под другие ОС.

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

И, естественно, автор ждёт Ваших отзывов и комментариев — от похвалы до жёсткой критики. Всем удобной работы и хорошего настроения!

Обновление 1. Чтобы не превращать статью в сборник картинок, добавил ссылки на разделы справки, где есть иллюстрирующие скриншоты.

c++ — уменьшение памяти, необходимой для библиотеки KeDei TFT, используемой с 3,5-дюймовым TFT-дисплеем с Arduino

Мне нужно уменьшить объем памяти, требуемой библиотекой KeDei TFT, используемой с 3,5-дюймовым сенсорным TFT-дисплеем Osoyoo для Arduino Uno и ATmega 2560. Когда я пытаюсь написать простое приложение для Arduino, использующее TFT-дисплей с библиотекой KeDei, большая часть доступной памяти на Arduino занята самой библиотекой.

К сожалению, я обнаружил, что, хотя ATmega 2560 имеет необходимый объем памяти, библиотека KeDei TFT не обеспечивает правильных сенсорных координат, когда TFT-дисплей используется с этим устройством, поэтому ATmega 2560 невозможна, если не приедет поддержка клиентов Osoyoo. хоть и с раствором.

Исследуя исходный код библиотеки, я обнаружил в файле KeDei_font.cpp таблицу растровых шрифтов, используемую для генерации отображаемых символов. Эта таблица растровых шрифтов представляет собой массив unsigned char font16_B[96][16] и, по-видимому, является основным потребителем памяти. Этот массив содержит растровые шрифты для символов ASCII от пробела 0x20 до тильды 0x7e .

Одна вещь, которую я сделал, это уменьшил количество символов, удалив строчные буквы и преобразовав строчные буквы в прописные. В результате получается таблица 9.0007 const unsigned char font16_B[59][16]

, что чуть больше половины размера исходной таблицы.

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

 #если определено (SMALLER_FONT_TABLE)
    статическая константа без знака char font16_B[59][16] = {
#еще
    статическая константа без знака char font16_B[95][16] = {
#endif
            {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*", ",0*/
            {0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x38,0x38,0x00,0x00},/*"!",1*/
            {0x00,0xD8,0xFC,0x6C,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/
            {0x00,0x00,0x00,0x6C,0x6C,0x6C,0xFF,0x36,0x36,0x36,0xFF,0x36,0x36,0x36,0x00,0x00},/*"#",3*/
            {0x00,0x00,0x18,0x3C,0x7E,0x7E,0x1E,0x1C,0x38,0x78,0x78,0x7E,0x7E,0x3C,0x18,0x18},/*"$",4*/
            {0x00,0x00,0x00,0x66,0x6F,0x3F,0x3F,0x3F,0x7E,0xF8,0xFC,0xFC,0xFC,0x66,0x00,0x00},/*"%",5*/
            {0x00,0x00,0x00,0x1C,0x36,0x36,0x36,0x1E,0xFE,0x6F,0x7B,0x33,0xB3,0xFE,0x00,0x00},/*"&",6*/
            {0x00,0x0E,0x0E,0x0C,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/
            {0x00,0xC0,0x60,0x30,0x30,0x18,0x18,0x18,0x18,0x18,0x18,0x30,0x30,0x60,0xC0,0x00},/*"(",8*/
            {0x00,0x06,0x0C,0x18,0x18,0x30,0x30,0x30,0x30,0x30,0x30,0x18,0x18,0x0C,0x06,0x00},/*")",9*/
            {0x00,0x00,0x00,0x00,0x18,0x18,0xFF,0x3C,0x3C,0xFF,0x18,0x18,0x00,0x00,0x00,0x00},/*"*",10*/
            {0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x18,0xFF,0x18,0x18,0x18,0x18,0x00,0x00,0x00},/*"+",11*/
            {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x0E,0x0C,0x07},/*",",12*/
            {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"-",13*/
            {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x0E,0x00,0x00},/*",",14*/
            {0x00,0x00,0x80,0xC0,0xC0,0x60,0x60,0x30,0x30,0x18,0x18,0x0C,0x0C,0x06,0x06,0x00},/*"/",15*/
            {0x00,0x00,0x00,0x38,0x6C,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0x6C,0x38,0x00,0x00},/*"0",16*/
            {0x00,0x00,0x00,0x18,0x1E,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x7E,0x00,0x00},/*"1",17*/
            {0x00,0x00,0x00,0x7C,0xC6,0xC6,0xC6,0x60,0x60,0x30,0x18,0x0C,0xC6,0xFE,0x00,0x00},/*"2",18*/
            {0x00,0x00,0x00,0x7C,0xC6,0xC6,0x60,0x38,0x60,0xC0,0xC0,0xC6,0x66,0x3C,0x00,0x00},/*"3",19*/
            {0x00,0x00,0x00,0x60,0x70,0x78,0x6C,0x6C,0x66,0x66,0xFE,0x60,0x60,0xF8,0x00,0x00},/*"4",20*/
            {0x00,0x00,0x00,0xFE,0x06,0x06,0x06,0x3E,0x6E,0xC0,0xC0,0xC6,0x66,0x3C,0x00,0x00},/*"5",21*/
            {0x00,0x00,0x00,0x78,0x6C,0x06,0x06,0x3E,0x6E,0xC6,0xC6,0xC6,0x6C,0x38,0x00,0x00},/*"6",22*/
            {0x00,0x00,0x00,0xFE,0x66,0x66,0x30,0x30,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00},/*"7",23*/
            {0x00,0x00,0x00,0x7C,0xC6,0xC6,0xC6,0x6C,0x38,0x6C,0xC6,0xC6,0xC6,0x7C,0x00,0x00},/*"8",24*/
            {0x00,0x00,0x00,0x38,0x6C,0xC6,0xC6,0xC6,0xEC,0xF8,0xC0,0xC0,0x6C,0x3C,0x00,0x00},/*"9",25*/
            {0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x38,0x00,0x00,0x00,0x00,0x38,0x38,0x00,0x00},/*":",26*/
            {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x0C},/*";",27*/
            {0x00,0x00,0x00,0xC0,0x60,0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x60,0xC0,0x00,0x00},/*"<",28*/
            {0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00},/*"=",29*/
            {0x00,0x00,0x00,0x06,0x0C,0x18,0x30,0x60,0xC0,0x60,0x30,0x18,0x0C,0x06,0x00,0x00},/*">
",30*/ {0x00,0x00,0x00,0x7C,0xC6,0xC6,0xCE,0xC0,0x60,0x30,0x30,0x00,0x38,0x38,0x00,0x00},/*"?",31*/ {0x00,0x00,0x00,0x3C,0x66,0xFE,0xFF,0xFF,0xFF,0xFF,0x7F,0xC6,0x66,0x3C,0x00,0x00},/*"@",32*/ {0x00,0x00,0x00,0x18,0x18,0x38,0x3C,0x3C,0x6C,0x7C,0x66,0xC6,0xC6,0xEF,0x00,0x00},/*"A",33*/ {0x00,0x00,0x00,0x3F,0x66,0x66,0x66,0x3E,0x66,0xC6,0xC6,0xC6,0x66,0x3F,0x00,0x00},/*"B",34*/ {0x00,0x00,0x00,0xFC,0xC6,0xC6,0x03,0x03,0x03,0x03,0x03,0xC6,0x66,0x3C,0x00,0x00},/*"C",35*/ {0x00,0x00,0x00,0x3F,0x66,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0x66,0x3F,0x00,0x00},/*"D",36*/ {0x00,0x00,0x00,0x7F,0xC6,0x36,0x36,0x3E,0x36,0x36,0x06,0xC6,0xC6,0x7F,0x00,0x00},/*"E",37*/ {0x00,0x00,0x00,0x7F,0xC6,0x36,0x36,0x3E,0x36,0x36,0x06,0x06,0x06,0x0F,0x00,0x00},/*"F",38*/ {0x00,0x00,0x00,0x7C,0x66,0x66,0x03,0x03,0x03,0xF3,0x63,0x66,0x66,0x3C,0x00,0x00},/*"G",39*/ {0x00,0x00,0x00,0xEF,0xC6,0xC6,0xC6,0xC6,0xFE,0xC6,0xC6,0xC6,0xC6,0xEF,0x00,0x00},/*"H",40*/ {0x00,0x00,0x00,0x7E,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x7E,0x00,0x00},/*"I",41*/ {0x00,0x00,0x00,0xFC,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x33,0x1F},/*"J",42*/ {0x00,0x00,0x00,0xFF,0x66,0x36,0x1E,0x1E,0x1E,0x36,0x36,0x66,0x66,0xFF,0x00,0x00},/*"K",43*/ {0x00,0x00,0x00,0x0F,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xC6,0xFF,0x00,0x00},/*"L",44*/ {0x00,0x00,0x00,0xFF,0x7E,0x7E,0x7E,0x7E,0x7E,0x7E,0x7E,0x7E,0x7E,0xFF,0x00,0x00},/*"M",45*/ {0x00,0x00,0x00,0xE7,0xCE,0xCE,0xDE,0xDE,0xF6,0xF6,0xF6,0xE6,0xE6,0xCF,0x00,0x00},/*"N",46*/ {0x00,0x00,0x00,0x3C,0x66,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0x66,0x3C,0x00,0x00},/*"O",47*/ {0x00,0x00,0x00,0x7F,0xC6,0xC6,0xC6,0xC6,0x7E,0x06,0x06,0x06,0x06,0x0F,0x00,0x00},/*"P",48*/ {0x00,0x00,0x00,0x3C,0x66,0xC3,0xC3,0xC3,0xC3,0xC3,0xDF,0xF7,0x76,0x3C,0xE0,0x00},/*"Q",49*/ {0x00,0x00,0x00,0x7F,0xC6,0xC6,0xC6,0x7E,0x36,0x36,0x66,0x66,0xC6,0xCF,0x00,0x00},/*"R",50*/ {0x00,0x00,0x00,0xFC,0xC6,0xC6,0x06,0x0C,0x38,0x60,0xC0,0xC6,0xC6,0x7E,0x00,0x00},/*"S",51*/ {0x00,0x00,0x00,0xFF,0xDB,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00},/*"T",52*/ {0x00,0x00,0x00,0xEF,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00},/*"U",53*/ {0x00,0x00,0x00,0xEF,0xC6,0xC6,0x66,0x6C,0x6C,0x3C,0x3C,0x38,0x18,0x18,0x00,0x00},/*"V",54*/ {0x00,0x00,0x00,0xFF,0xDB,0xDB,0xDB,0xDB,0xFF,0xFF,0x7E,0x66,0x66,0x66,0x00,0x00},/*"W",55*/ {0x00,0x00,0x00,0xEF,0xC6,0x6C,0x6C,0x38,0x38,0x38,0x6C,0x6C,0xC6,0xEF,0x00,0x00},/*"X",56*/ {0x00,0x00,0x00,0xFF,0x66,0x66,0x3C,0x3C,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00},/*"Y",57*/ {0x00,0x00,0x00,0xFE,0x63,0x60,0x30,0x30,0x18,0x0C,0x0C,0xC6,0xC6,0x7F,0x00,0x00},/*"Z",58*/ #если !определено(SMALLER_FONT_TABLE) // В целях снижения требований к памяти для библиотеки TFT мы // позволяет использовать меньшую таблицу шрифтов, которая устраняет строчные буквы // а также несколько символов. См. ниже преобразование строчных букв в прописные. // Ричард Чемберс, 25.04.2021 {0x00,0xF8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xF8,0x00},/*"[",59",62*/ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF},/*"_",63*/ {0x00,0x0E,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xF8,0xCC,0xC6,0xC6,0xFC,0x00,0x00},/*"a",65*/ {0x00,0x00,0x00,0x07,0x06,0x06,0x06,0x3E,0x6E,0xC6,0xC6,0xC6,0x6E,0x3E,0x00,0x00},/*"b",66*/ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0xCC,0x06,0x06,0x06,0xCC,0x78,0x00,0x00},/*"c",67*/ {0x00,0x00,0x00,0xE0,0xC0,0xC0,0xC0,0xF8,0xCC,0xC6,0xC6,0xC6,0xEC,0xF8,0x00,0x00},/*"d",68*/ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xFE,0x06,0x06,0xC6,0x7C,0x00,0x00},/*"e",69*/ {0x00,0x00,0x00,0xF0,0x98,0x18,0x18,0xFE,0x18,0x18,0x18,0x18,0x18,0x7E,0x00,0x00},/*"f",70*/ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x66,0x66,0x3C,0x06,0x7C,0xC6,0xC6,0x7C},/*"g",71*/ {0x00,0x00,0x00,0x07,0x06,0x06,0x06,0x7E,0xCE,0xC6,0xC6,0xC6,0xC6,0xEF,0x00,0x00},/*"h",72*/ {0x00,0x00,0x00,0x1C,0x1C,0x00,0x00,0x1E,0x18,0x18,0x18,0x18,0x18,0x7E,0x00,0x00},/*"i",73*/ {0x00,0x00,0x00,0x70,0x70,0x00,0x00,0x78,0x60,0x60,0x60,0x60,0x60,0x60,0x66,0x3E},/*"j",74*/ {0x00,0x00,0x00,0x07,0x06,0x06,0x06,0xF6,0x36,0x1E,0x3E,0x36,0x66,0xFF,0x00,0x00},/*"k",75*/ {0x00,0x00,0x00,0x1E,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x7E,0x00,0x00},/*"l",76*/ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xB6,0xB6,0xB6,0xB6,0xB6,0xFF,0x00,0x00},/*"m",77*/ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xCE,0xC6,0xC6,0xC6,0xC6,0xEF,0x00,0x00},/*"n",78*/ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00},/*"o",79*/ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x6E,0xC6,0xC6,0xC6,0x66,0x3E,0x06,0x0F},/*"p",80*/ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xCC,0xC6,0xC6,0xC6,0xCC,0xF8,0xC0,0xE0},/*"q",81*/ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xDC,0x0C,0x0C,0x0C,0x0C,0x3F,0x00,0x00},/*"r",82*/ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xC6,0x06,0x7C,0xC0,0xC6,0x7E,0x00,0x00},/*"s",83*/ {0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x7E,0x18,0x18,0x18,0x18,0x18,0x70,0x00,0x00},/*"t",84*/ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE7,0xC6,0xC6,0xC6,0xC6,0xE6,0xFC,0x00,0x00},/*"u",85*/ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEF,0xC6,0x6C,0x6C,0x3C,0x18,0x18,0x00,0x00},/*"v",86*/ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xDB,0xDB,0xFF,0xFF,0x66,0x66,0x00,0x00},/*"w",87*/ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x6C,0x38,0x38,0x38,0x6C,0xFE,0x00,0x00},/*"x",88*/ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEF,0xC6,0x6C,0x6C,0x3C,0x38,0x18,0x18,0x0F},/*"y",89*/ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x66,0x30,0x18,0x18,0xCC,0xFE,0x00,0x00},/*"z",90*/ {0x00,0xC0,0x60,0x60,0x60,0x60,0x60,0x30,0x60,0x60,0x60,0x60,0x60,0x60,0xC0,0x00},/*"{",91*/ {0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30},/*"|",92*/ {0x00,0x0E,0x18,0x18,0x18,0x18,0x18,0x30,0x18,0x18,0x18,0x18,0x18,0x18,0x0E,0x00},/*"}",93*/ {0x1C,0x76,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"~",94*/ #endif };

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

 #если определено (SMALLER_FONT_TABLE)
    // Переводим символ в один из печатных
    // символы в нашей таблице шрифтов. То, что мы делаем, это
    // перевести строчные буквы в прописные
    // так как для того, чтобы иметь меньшую таблицу шрифтов, занимающую
    // меньше памяти убираем строчные буквы.
    // Ричард Чемберс, 25.04.2021
    если (_data < ' ' || _data > 'z') вернуть;
    если (_data >= 'a') _data = _data - 'a' + 'A';
#endif
    char_i=(int)_data - ' ';
 

При таком подходе, когда я компилирую скетч Arduino с определенной таблицей SMALLER_FONT_TABLE, компиляция завершается со следующим предупреждением:

 Sketch использует 12844 байта (39%) пространства для хранения программы. Максимум 32256 байт.
Глобальные переменные используют 1556 байт (75%) динамической памяти, оставляя 492 байта для локальных переменных. Максимум 2048 байт.
Недостаточно доступной памяти, могут возникнуть проблемы со стабильностью.
 

Что можно сделать, чтобы еще больше уменьшить объем памяти, необходимый для отображения шрифта? Есть ли другой тип растрового шрифта, который использует меньше памяти?

mcufriend fonts — Googlesuche

AlleBilderVideosShoppingMapsNewsBücher

suchoptionen

mcufriend 3. 5″ LCD, я хотел бы иметь возможность выбирать разные шрифты

9000 2 forum.arduino.cc › Использование Arduino › Дисплеи

14.02.2016 · Если вы просто хотите использовать некоторые пользовательские шрифты, взгляните на текущую библиотеку Afafruit_GFX. Имейте в виду, новые возможности шрифта — это что-то вроде кошмара.0003

Добавление пользовательских шрифтов в MCUFRIEND — Дисплеи — Форум Arduino

Библиотека и шрифты MCUFriend kvb — Дисплеи — Форум Arduino

Обновление шрифта БИБЛИОТЕКИ MCUFRIEND — Дисплеи — Форум Arduino 0038

Использование шрифтов | Графическая библиотека Adafruit GFX

Learn.adafruit.com › adafruit-gfx-graphics-library

Включенные шрифты получены из проекта GNU FreeFont. Три начертания: «Serif» (напоминает Times New Roman), «Sans» (напоминает Helvetica …

Как использовать шрифты? · Issue #29 · prenticedavid/MCUFRIEND_kbv

github.com › MCUFRIEND_kbv › Issues

12.01.2018 · Я запускаю GLUE_Demo_480x320,. он работает хорошо, но я хочу использовать FreeDefaultFonts.h. Я комментирую #undef GFXFONT_H //прокомментируйте эту строку, чтобы включить …

MCUFRIEND_kbv Библиотека для Uno 2.4, 2.8, 3.5, 3.6, 3,95 дюйма …

github.com › prenticedavid › MCUFRIEND_kbv 9 0003

# Библиотека MCUFRIEND_kbv для Uno 2.4, 2.8, 3.5, 3.6, 3.95-дюймовые щиты mcufriend. Менеджер библиотек Arduino должен найти и установить библиотеку MCUFRIEND_kbv.

Библиотека TFT-дисплеев и шрифтов Arduino: 11 шагов — инструкции

www.instructables.com › Схемы › Arduino

Эта библиотека используется вместе с библиотекой Adafruit_GFX. Попробовав несколько примеров, я был немного разочарован тем, что были доступны только масштабированные блочные шрифты.0003

Шрифты UTFT. Инструкции. Эти шрифты предназначены только для моей библиотеки UTFT. Они не будут работать ни с одной из моих других библиотек дисплеев. Нажмите на изображение, чтобы увидеть …

Как использовать драйвер ILI9486 3,5-дюймовый сенсорный TFT-экран с Arduino

www. engineersgarage.com › arduino-ili9486-driver… Шилд на Ардуино УНО. 3,5-дюймовый ЖК-дисплей TFT можно использовать для ряда приложений, таких как –. Для отображения текста и шрифтов.

MCUFRIEND_kbv — Список библиотек Arduino

www.arduinolibraries.info › библиотеки › mcufriend_k…

Библиотека TFT для экранов mcufriend UNO Shield 2,4, 2,8, 3,5, 3,6, 3,95 дюйма. Должен иметь вывод /RD, чтобы его можно было прочитать. Загрузки. Имя файла, дата выпуска, размер файла …

OpenSmart 2.2inch ILI9225 Shield — Hackster.io

www.hackster.io › patrick-fitzgerald2

05.01.2023 . … by OpenSmart #include // шрифты находятся в файле DefaultFonts.c extern …

Шрифты Mcufriend — tagwerkerding.de

tagwerkerding.de › страницы › шрифты mcufriend

Шрифты Mcufriend — pgnn Adafruit Gfx Graphics Library — Бесплатная загрузка в виде файла PDF (Растровые шрифты Контент сообщества доступен по лицензии CC-BY-SA если .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *