Ви не увійшли.
Сторінки 1
Всем привет! Заранее прошу прощения за возможно нубский и сто раз обмусоленный вопрос. Поиск по форуму ощутимых результатов не принес.
Есть дисплей. Если покопаться в его официальной библиотеке, то легко увидеть несколько файлов, содержащих шрифты. Содержимое, скажем латинской буквы "А" размером 16 пикселей выглядит так
// @1056 'A' (11 pixels wide)
0x00, 0x00, //
0x00, 0x00, //
0x3F, 0x00, // ######
0x0F, 0x00, // ####
0x09, 0x00, // # #
0x19, 0x80, // ## ##
0x19, 0x80, // ## ##
0x1F, 0x80, // ######
0x30, 0xC0, // ## ##
0x30, 0xC0, // ## ##
0x79, 0xE0, // #### ####
0x00, 0x00, //
0x00, 0x00, //
0x00, 0x00, //
0x00, 0x00, //
0x00, 0x00, //
На просторах интернета нашлась программа The Dot Factory. В ней очень много настроек и она умеет из любого встроенного в винду шрифта сделать файл, похожий с оригинальным файлом со шрифтом от дисплея. Похожий, но видимо не совсем. При попытке добавить файл в проект, я получаю ошибку. Если просто тупо заменить в оригинальном файле латинскую букву "A" на "Ф", то можно добиться вывода именно "Ф".
// @4408 'Ф' (16 pixels wide)
0x00, 0x00, //
0x00, 0x00, //
0x00, 0x00, //
0x00, 0x00, //
0x07, 0xC0, // #####
0x01, 0x00, // #
0x0F, 0xE0, // #######
0x11, 0x10, // # # #
0x21, 0x08, // # # #
0x21, 0x08, // # # #
0x21, 0x08, // # # #
0x11, 0x10, // # # #
0x0F, 0xE0, // #######
0x01, 0x00, // #
0x07, 0xC0, // #####
0x00, 0x00, //
0x00, 0x00, //
0x00, 0x00, //
0x00, 0x00, //
Но это как бы не правильно, долго и неудобно
Кто нибудь имеет опыт с решением такого вопроса?
Остання редакція luminofor (2020-02-17 10:58:49)
Неактивний
Примерно разобрался. Могу сделать любой латинский шрифт и вывести на дисплей. Нужно сгенерировать его программой, заменить код в библиотечном шрифте на сгенерированный, поправить в конце файла ширину и высоту в битах. Ну или создать с нуля файл со шрифтом и описать его в файле fonts.h
А вот с кириллицей проблема. Долго не мог понять почему. Дело в длине слова, описывающего массив с символами. Оно занимает 128 байт. (0-127)
Если я, в конце латинских букв присоединяю кириллицу, то вызывая например символ с номером 127, я получу букву "А". А если 128, то уже абракадабру.
То есть открывается два варианта.
1. Искать где в библиотеке можно расширить диапазон массива. Но тут есть пара проблем. Массив идет сплошной. А между последним символом таблицы ASCII и "А" на кириллице есть 40 других символов, которые тоже нужно забить в массив (хоть пустые), чтобы "А" попала на свое законное 160-е место и комп нормально все понимал при компиляции.
2. Просто тупо исправить латиницу на кирилицу, в тексте программы писать латиницей, а вывод будет кириллицей.
Есть еще один вариант, но для программеров - написать свою библиотеку вывода символов на дисплей
Неактивний
Кажись нарыл кое что полезное.
В файле GUI_Paint.h есть например строка
void Paint_DrawChar(UWORD Xstart, UWORD Ystart, const char Acsii_Char, sFONT* Font, UWORD Color_Background, UWORD Color_Foreground);
Это функция, выводящая отдельный символ из массива символов.
В ней указан тип константы char, которая может принимать значение от -127 до 127, то есть функция не может обратиться по адресу больше чем 127 (если от нуля считать)
Если я в этом файле меняю все типы константы на unsigned char (от 0 до 255) и потом во всех связанных с этим местах в файле GUI_Paint.cpp, то я могу по номеру символа в массиве вывести символ кириллицы.
Как бы УРА!
Но пока не совсем.
По одному символу выводить текст накладно, есть для этого другая функция Paint_DrawString_EN. Она должна выводить набор символов, используя Paint_DrawChar. Но она выводит не правильно. Вместь любых букв, я получаю "с" + пробел или "т" + пробел.
Пока не пойму где еще копнуть.
Но прогресс есть, это радует.
Неактивний
ЕСС, товарищи, ЕСС!!!
Не скажу что все тупо просто, но есть не сложное решение!
Кодировкой по умолчанию, используемой компилятором Arduino IDE является UTF-8. А в ней килиллица кодируется двухбайтным числом. Поэтому-то при выводе строки на кириллице отображаются два символа и не те, что надо.
Есть костыль. Используем внешний редактор. Например Notepad++
В настройках IDE ставим галочку "Использовать внешний редактор"
Открываем скетч и в IDE и в Notepad++, в Notepad++ идем во вкладку "Кодировки"-"Кодировки"-"Windows-1251"
Пишем текст, который нужно вывести на дисплей кириллицей, сохраняем скетч, переходим в IDE, заливаем. Профит!
Кстати, в посте №2 я ошибся. Между последним читаемым символом "~" в стандартной таблице ASCII и первым символом "А" в кириллице (в кодировке Windows-1251) 66 символов. Поэтому в таблицу шрифта нужно добавить 66 пустых символов (допустим пробелов)
Остання редакція luminofor (2020-02-19 18:40:26)
Неактивний
Неактивний
... Всем сочувствующим спасибо
А про собаку? "The quick brown fox jumps over the lazy dog".
luminofor пише:... Всем сочувствующим спасибо
А про собаку? "The quick brown fox jumps over the lazy dog".
Нее.., этож у них ТАМ про собак, а у нас ТУТ про булки
Остання редакція luminofor (2020-02-19 23:50:53)
Неактивний
Сторінки 1