Руссификация библиотеки UTFT
- Войдите на сайт для отправки комментариев
Сб, 13/02/2016 - 01:09
Доброй ночи.
Возникло желание руссифицировать библиотеку, порывшись нашел на гитхабе , но не запустил, куча ошибок.
Железо такое:
IDE 1.6.7 Arduino DUE +CTE 7'' 1963 дисплей. +CTE Shild for DUE.
Нашел толковый пример:
Все сделал, а на экране вот это:
Пример компилируется без ошибок, в чем дело? Может в файле русских шрифтов?
Все изобретают велосипед. Я сделал по простому. В настройках IDE устанавливаем preproc.substitute_unicode=false. Это дает возхможность отображать не от -128 до 128, а от 0 до 255. Дописываете таблицу знакогенератора русским алфовитом, ву а ля. Только в гребаной UTFT это дело сожрет кучу ROM, так как под каждый размер шрифта надо писать свой дамп знакогенератора. Или размещать его во внешней флэш и при необходимости размещать в RAM. Но тогда опять возникает проблема, надо переписать функцию вывода пикселя для вывода символа т.к. он буде размещен не в ROM.
Спасибо конечно. Если бы понимал о чем вы пишете, то вероятно разобрался с проблемой выше. Чем плох способ указанный в первом сообщении? У кого-то же он работал...
Способ плох тем, что не работает.
И ссылка какая-то странная. Я по ней попадаю на http://arduino.ru/?p=2240 .
Пробовал править, один хер сюда ведет. В общем, скопировать и в браузер закинуть.
Способо не работает у меня. У дргих то он работал. Наверное...
Думаю что достаточно поменять настройку IDE как я писал выше и попробовать не используя эту функцию выполнить вывод русского шрифта с помощью стандартно функции UTFT. Что то мне подсказывает что будет выведен русский шрифт. Почему я так уверен, да потому что у меня так работает, правда в библиотеке Adafruit. Способ с перекодировкой довольно сложен, так как здесь, как я понял, происходит обращение к таблицы через преобразование кода буквы в указатель на позицию в массиве в которой размещен 1 байт выводимого символа.
Ух запарился пока писал.
Подскажи пожалуйста, где эта настройка в каком файле?
Открываем IDE arduino. Меню Файл/настойки.\ В открывшимся окне внизу выбераем C:\Users\.........
В открывшемся окне находим файл preferences, открываем, там находим строчку preproc.substitute_unicode=true, меняем значение на false. Обязательно!!! закрываем IDE!!!! Сохраняем изменения. Запускаем IDE пробуем.
С UTFT не пробовал, но при необходимости можно попробовать TFT есть, mega256 собрано штук 7, файл с кирилицей скачал, осталось выкроить время для эксперимента.
Попробовал русский шрифт выводится с настройкой preproc.substitute_unicode=true, но со всякими слешами и опострофами, при этом кодировка нарушена смещение примерно в 29 символов. Вместо "А" выводится 'Ъ" . Надо попытаться понять как функция printChar определяет адрес первого байта символа. Тогда можно отредактировать файл RussianFonts так чтобы все русские символы выводились правильно. Еще раз убеждаюсь в том что UTFT ламерская библиотека заточенная только на латиницу.
Ну походу понял в чем суть, увеличил количество байт в файле знакогенератора, перепишу знакогенератор на кирилицу , выложу файл. Попробуешь. Уже заглавные корректно выводит.
Ну вот, закончил. http://178.130.34.198/adafruit/UTFT/Rus_font/RussianFonts_UTFT.c
Тут лежит файл c SmallRusFont. Также содержит некоторые иконки, есть возможность добавит еще около 30 иконок. точно не считал. Меняем как описано выше preproc.substitute_unicode=true на false. И как ни вчем небывало, переключив регистр языка, выводим в скетче используя стандартную функцию UTFT myGLCD.print( "* Пишем по русски без гомороя *", CENTER, 1); . Можно сказать спасибо.
Желающие по аналогии могут создать шрифты нужных размеров.
P.S. неудалось создать прописную "ё", если остро необходимо вписываем ее в свободную строку дампа знакогенератора и выводим например как "\xA0". Что бы вы не мучались вот строчка которую надо подставит вместо свободной заполненной значениями 0x00. 0x00,0x00,0x00,0x28,0x00,0x30,0x48,0x78,0x40,0x30,0x00,0x00, // ё
http://178.130.34.198/adafruit/picture/pic_0004.jpg
...
Большое спасибо за старания. Но нихрена не вышло. Видимо я туплю где-то. Мои шаги:
1. Справил преференсес на false. Проверяю, ок, значение не изменилось.
2. Закидываю шрифт в папку скетча.
3. Обявляю шрифт
4. Компилю, шью, и вижу зюги.
вот код скетча:
Какого оно глючит?
Кидал фонт и в либу поп пути указанном в примере, те же фаберже.
1. Если вы используете UTFT_CTE библиотеку, знакогенератор должен распологаться в IC SPI flash на шилде.
2. Что бы использовать его надо раскоментировать строку "#define CTE_DUE_SHIELD 1" в файле HW_ARM_defines.h, папка \hardware\arm и как я понял он туда загрузится при прошивке (может и ошибаюсь) почитайте файл readme в папке с библиотекой. Интересно что такого define в этом файле нет.
3. Мой вариант работает с UTFT, когда массив расположен в памяти программ и вы не используете UTFT_CTE.
Резюмирую. При использовании UTFT_CTE создаем массив знакогенератора, прошиваем во внешнюю флэшь, при выводе букв и цифр библиотека извлекает данные из внешней флэш. Мало того там можно хранить и картинки. Вобщем используем на подобии SD. Попробуйте отключить UTFT_CTE и посмотреть отразится ли текст нормально. Потом разбирайтесь с этой библиотекой.
P.S.
Прочитал про CTE модули. Похоже шрифты зашиты жестко и сделать что то с ними не просто. Надо брать даташит и читать. В монохромных помню можно было записав смещение в память контроллера матрицы скопировать туда свои шрифты из программы и юзать их.
Благодарю. Буду пробовать, отпишусь. Так или иначе, мое глубокое уважение и благодарности за уделенное время.
Только обратил внимание. Где у вас в скетче строка #define <UTFT_CTE.h>?
SmallFont подключать нет нужды в файле SmallRusFont содержится и кирилица и латиница.
Под Due указанный пример надо чуть переделать, тогда будет нормально отображать русские буквы из файла шрифта. Дело в том, что под Due не так определён pgm_read_byte, поэтому символы не так читаются. Короче, решение: там, где было:
Заменить на
и будет щастье :)
Я добавил в библиотеку кириллические символы на накидал не замысловатую функцию для их вывода в кодировке UTF-8
Так же допилил поддержку ST7796
Если кому надо, вот https://github.com/Muramur2000/UTFT_Rus
Текст с кириллицей выводится функцией printrus
Вот маленький пример
Проверял только на DUE