Свежие комментарии
Благодарности: денежное общество и мойка авто

Микроконтроллеры это просто. TFT дисплеи. Вывод шрифтов.

Я рассказывал как вывести русский шрифт на LED матрицы, а так же как создавать свои шрифты для LED матриц, в этой статье речь будет о выводе шрифтов на TFT экраны, их создание и оптимальное использование в Arduino IDE.

Теория.

Для начала немного теории. В Arduino IDE русский текст имеет кодировку UTF-8, то есть каждый символ закодирован 2 байтами, за исключением латинских символов, цифр и знаков, которые имеют 1 байт, вернее 7 бит (от 32 до 127). Библиотеки обрабатывают только одно байтовые строки и если им попадется символ из кодировки UTF-8 то напечатано будет 2 знака. Например буква А русского алфавита в кодировке UTF-8 имеет кодировку 208 144 в десятичной системе и соответственно будут напечатаны 2 символа имеющие код 208 и 144

Как использовать русские символы в этом случае? Вариантов тут несколько, один из них предложил пользователь на форуме arduino сделав шрифт в кодировке win-1251 и в скетче используя функцию конвертирования из utf-8 в win-1251. Недостатком использования этого способа является большой размер шрифта, начиная от пробела (код 32) и заканчивая буквой «я» (код 255) размер шрифта от 32-го до 255-го символа при этом имеется 40 неиспользуемых символов которые занимают место (с шрифтом по умолчанию таблица шрифта начинается с 0) . Это было бы не критично при использовании библиотеки Parola но с библиотекой Adafruit GFX которая отвечает за обработку шрифтов не всё так просто. При использовании стандартного шрифта в файле glcdfont.c символы которые не используются занимают в памяти микроконтроллера 5 байт, внешние символы этого лишены но так же используют память из-за указания параметров символа нулевой длинны. Второй недостаток использования шрифта win-1251 это необходимость использования функции преобразования, что занимает так же память. На рисунке окно программы FontForge c русскими символами соответствующие кодировке win-1251, синим указаны неиспользуемые символы.

Для исключения этих недостатков (одного или сразу двух) таблицу шрифтов лучше сделать следующим образом.

При таком расположении все русские буквы имеют такое же значение младшего байта в кодировке UTF-8 кроме букв Ё ё. А это значит, что для использования нам надо лишь отбрасывать старший байт. В кодировке UTF-8 старший байт русских символов имеет код 208 или 209, если не надо использовать букву ё то достаточно в шрифте использовать символы с кодом 208 и 209 нулевой длинны и такой шрифт будет отображаться без перекодирования, кроме того, по сравнению с шрифтом win1251 имеет меньший размер.

Использование.

Для использования скачайте шрифты и функцию перекодировки поместите папку FontsRus в папку с библиотекой Adafruit-GFX

С использованием букв Ё ё и при использовании стандартного шрифта использовать функцию utf8rus2, положите файл utf8rus2.ino в папку с скетчем

Подключаемый шрифт

Стандартный шрифт (положите файл glcdfont.c в папку с библиотекой Adafruit-GFX)

Вот отображение внешнего шрифта TimesNewRomanCyr на экране

Сверху шрифт батарейки, который содержит 5 символов батарейки на месте цифр 0-4

Поделиться в соц. сетях

Опубликовать в Facebook
Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в Яндекс

Оставить комментарий