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

    Микроконтроллеры это просто. 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
    Опубликовать в Мой Мир
    Опубликовать в Одноклассники
    Опубликовать в Яндекс

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