Русификация библиотеки Adafruit-GFX и вывод русских букв на дисплей в кодировке UTF-8 из Arduino IDE

arduinec
Offline
Зарегистрирован: 01.09.2015

Краткие итоги предыдущих 500 постов

Для русификации библиотеки Adafruit-GFX требуется:
- скачать любой из приведённых ниже архивов;
- заменить файл glcdfont.c в Adafruit-GFX;
- добавить функцию utf8rus() в скетч;
- вставить в начале скетча команду: display.cp437(true);

Применять функцию utf8rus() можно внутри команд печати строк:
display.println(utf8rus("Тест"));

В архивах примеры и библиотеки, различающиеся по виду дисплея:

0.96" OLED 128x64
https://yadi.sk/d/dd7ULuRftVcRV

2.8" TFT Touch Shield 320x240
https://yadi.sk/d/FgUr5NPztVcRd

Nokia 5110 84x48
https://yadi.sk/d/juZ_mZbfsTpez

Более подробная информация в предыдущих постах.
Например:
В посте 27 демонстрируется скетч, с помощью которого можно редактировать шрифты (в том числе и в glcdfont.c).
В посте 40 приводится вариант utf8rus() с экономным использованием оперативной памяти (с char-строками вместо String).
В посте 46 показан 2.8" TFT Touch Shield для Uno и Mega, и прилагается полный набор библиотек и примеров для него.
В посте 80 описаны изменения в шрифте для проекта Transistor Tester (http://arduino.ru/forum/proekty/transistor-tester-arduino).
В посте 379 дополнительно приведён скетч для демонстрации динамических эффектов из символов, содержащихся в шрифте.
В посте 399 приводится скетч с функцией utf8rus2hex(), которая перекодирует русские буквы и преобразует их в строчные HEX-символы.
В посте 405 приводится вариант функции utf8rus_P() для работы со строками, размещёнными в PROGMEM.
 

andrus
Offline
Зарегистрирован: 20.10.2019

andrus пишет:

mifar пишет:

Скомпилировалось нормально

Тут причина в чем-то другом по-видимому.

Установил IDE на ноутбук с Win10. Запустил на нем компиляцию. Все работает. Так что, скорее всего, проблема не в библиотеках и не в Arduino IDE. mifar - большое спасибо за помощь!

michroz
Offline
Зарегистрирован: 10.03.2022

Огромное спасибо автору arduinec за работающую русификацию!!!

Единственно, у меня не работал символ градуса «°». Выдавал конкретно вместо этого: «В°» (русская В). Выяснилось, что почему-то мой «градус» представляется 2-мя байтами 0xC2, 0xB0. Не спрашивайте в какой кодировке - не знаю. На клавиатуре (Windows) я просто сделал когда-то горячую клавишу, удобно выдающую «°», которую взял в Character Map. Откуда там второй байт - не знаю.
Тем не менее этот ° - довольно нужный символ в микропроцессорных проектах.
Поэтому пришлось «подштопать» utf8rus  - убрать у такого градуса первый байт. Не мудрствуя лукаво в том, в чём не полностью разбираюсь, добавил 3-й «case» в имеющийся switch:

        case 0xC2: {
          n = source[i]; i++;
          if (n == 0xB0) break;
          n = 0xC2; i--;
          break;
        }

Вроде работает...

   

borsuk
Offline
Зарегистрирован: 19.04.2022

русификация работает если utf8rus() вызвать из setup, но не работает если вызвать из loop. В чем причина, подскажите пожалуйста

hugoboss317
Offline
Зарегистрирован: 21.03.2013

А может начать с "Я подключил свой экран, взял из примера библиотеки Adafruit-GFX и вывел на экран "hello world" (и тут же фото), а вот этот кусочек кода (тут далее по тексту код) с фразой "привет мир" не получается"?

b707
Offline
Зарегистрирован: 26.05.2017

borsuk пишет:

русификация работает если utf8rus() вызвать из setup, но не работает если вызвать из loop. В чем причина, подскажите пожалуйста

очень напиминает известное

"Товарищи ученые, весной у меня подполе происходит непонятный стук. Подскажите, в чем причина. пожалуйста?"

Показывайте полный код

 

borsuk
Offline
Зарегистрирован: 19.04.2022
проблема была в побочных эффектах от других функций вызываемых в loop(). Сейчас все работает. Спасибо за советы. 
 
 
b707
Offline
Зарегистрирован: 26.05.2017

borsuk пишет:

проблема была в побочных эффектах от других функций вызываемых в loop().
 
иными словами - причина была в вашем кривом коде? - бывает
 
Цитата:
Спасибо за советы. 
 

всегда пожалуйста

b707
Offline
Зарегистрирован: 26.05.2017

уважаемый arduinec

За последние дни уже два человека приходили с жалобами на вашу функцию utf2rus. У потерпевших были проблемы со String версией функции, но версия через char (из сообщения #40 ветки) тоже не слишком хорошо написана. Поскольку Ваше решение руссификации очень популярно, наверно лучше исправить.

Вот тут  описал те моменты, которые мне кажется стоит изменить

Bobbi86
Offline
Зарегистрирован: 15.09.2022

 Я со шрифтами и с русификацией намучился. Использовал конвертер шрифтов для adafruit gfx с github, но что-то не пошло. Потом решил проблемы другим путем — сам нарисовал нужные мне шрифты. Основы взял из библиотеки https://ffont.ru/, исправил, как мне надо. Возни меньше. 

Joiner
Offline
Зарегистрирован: 04.09.2014

Bobbi86 пишет:

 Я со шрифтами и с русификацией намучился. Использовал конвертер шрифтов для adafruit gfx с github, но что-то не пошло. Потом решил проблемы другим путем — сам нарисовал нужные мне шрифты. Основы взял из библиотеки https://ffont.ru/, исправил, как мне надо. Возни меньше. 

По ссылке выходит

An Error Was Encountered

The URI you submitted has disallowed characters.

Но если не переходить по ссылке, а просто её скопировать в адресную строку, то всё получается.

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Правильный адрес такой: https://ffont.ru

baby_in_Arduino
Offline
Зарегистрирован: 21.07.2019

что случилось с форумом?? новый форум это .... просто!

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

не хочете - не ешьте.

baby_in_Arduino
Offline
Зарегистрирован: 21.07.2019

дедушка не поверишь! c ТРЕХ браузеров попробовал и ни в одном форум новый не заработал, пишет обновите браузер! а у меня Windows XP!! и все браузеры стоят последние для этой системы!!

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Дак обнови сначала Виндовс ХР, до семерки хотя бы

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DetSimen пишет:
Дак обнови сначала Виндовс ХР, до семерки хотя бы

не хочешь обновлять XP поставь Линукс на этот же диск, в нём работает

kalyan-m@mail.ru
Offline
Зарегистрирован: 05.12.2014

Ребят, подскажите, как длинный текст вывести? Матрица Р4,в режиме бегущей строки, только 13 символов выводится, например пишу "выберите программу", вижу "выберите прог" размер текста 2. При размере текста 1, текст выводится полностью