Официальный сайт компании Arduino по адресу arduino.cc
как вывести русские буквы на LCD ST7920?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Чт, 28/03/2013 - 23:23
здравствуйте.
Пытаюсь вывести русские буквы на дисплей с контроллером ST7920. Использую библиротеку U8GLIB и шрифт unifont_0_8. https://code.google.com/p/u8glib/wiki/fontgroupunifont В место русских букв пишет другие символы, которые тоже есть в библиотеке. Как это можно победить? Такой же шрифт установил в папку font на компьютере и всеравно не помагает.
И еще вопрос - какой программой можно создать свой шрифт для этой библиотеке? Например только цифры и русские буквы?
Пример кода: При этом слово hello пропечатывается нормально
#include "U8glib.h" U8GLIB_ST7920_128X64_1X u8g(3, 8, 7); void draw(void) { // graphic commands to redraw the complete screen should be placed here u8g.setFont(u8g_font_unifont_0_8); //u8g.setFont(u8g_font_osb21); u8g.drawStr( 0, 22, "Hello Лунатикам "); } void setup(void) { // flip screen, if required // u8g.setRot180(); // set SPI backup if required //u8g.setHardwareBackup(u8g_backup_avr_spi); // assign default color value if ( u8g.getMode() == U8G_MODE_R3G3B2 ) u8g.setColorIndex(255); // white else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) u8g.setColorIndex(3); // max intensity else if ( u8g.getMode() == U8G_MODE_BW ) u8g.setColorIndex(1); // pixel on } void loop(void) { // picture loop u8g.firstPage(); do { draw(); } while( u8g.nextPage() ); // rebuild the picture after some delay delay(500); }
LCD (ЖК) индикаторы
"Вывод русского текста имеет ряд особенностей в связи с тем....."
Вы говорите о индикаторе, в контроллере которого ужен есть русские буквы. В моем случае имеет место быть графический индикатор. И по идее когда я задаю использование шрифта unifont_0_8, то напечатав текст русскими буквами, библиотека U8GLIB должна преобразовать мой текст в код, который отразит русские буквы на дисплее.
В принципе она так и делает, т.е. выводит на дисплей буквы, имеющиеся в таблице символов шрифта, но эти буквы не совпадают с буквами которые я ввел с клавиатуры. И я не могу понять почему так.
Может можно создать свой собственный шрифт? Для библиотеки GLCD есть программа которая генерит свои собственные шрифты, а для библиотеки U8GLIB я такой программы не знаю. Может кто подскажет?
...библиотека U8GLIB должна преобразовать мой текст в код, который отразит русские буквы на дисплее.
а вы уверены, что именно "должна"?
Для другого проекта использовал другой дисплей (TFT), так там (покопавшись в коде библиотеки) обнаружился файл, где прописаны доступные шрифты. Кириллицы, естественно, там не оказалось.
Пришлось самому нарисовать: http://devicter.blogspot.ru/2013/03/rusUTFT-SmallFont.html
Почитайте, возможно, натолкнет на мысли (а глядишь, и "инструмент" для генерации шрифта подсмотрите).
спасибо за ссылку, но страница не найдена, хотя по блогу я пошарю. Относительно "должна". Да я уверен, потомучто при подключении дргого шрифта, например без латиницы, при вводе с клавиатуры латинских букв на дисплее появляются кракозябры и символы имеющиеся в этом шрифте. Так вот я не могу разобраться каким образом мне совместить кнопки на клавиатуре с символами в шрифте.
А еще есть такое понятие, как "кодировка символов". Для кириллицы это и DOS, и КОИ-8, и Windows-1251, и ... еще много разных "и".
Ответьте на два вопроса:
1) Какую кодировку вы используете в скетче
2) В какой кодировке расположены образы русских букв в используемом вами шрифте (предполагаем, что они там есть).
Если ответы будут различаться, то вам сюда.
Вы говорите о индикаторе, в контроллере которого ужен есть русские буквы.
Нет, я говорю про русские буквы в среде ArduinoIDE. Я же дал, вместе с ссылкой, начало абзаца в котором про это говорится. И там же есть пример как нужно кодировать русские символы.
Ну вот ниже step962 уже попытался другими словами про это же рассказать.
Вообщем открывайте мою ссылку, смотрите пример "вывод строки ЖК дисплей", открывайте свою ссылку
https://code.google.com/p/u8glib/wiki/fontgroupunifont
выписывайте на бумажку коды из своего шрифта - и правте этот пример под себя.
спасибо за ссылку, но страница не найдена, хотя по блогу я пошарю. Относительно "должна". Да я уверен, потомучто при подключении дргого шрифта, например без латиницы, при вводе с клавиатуры латинских букв на дисплее появляются кракозябры и символы имеющиеся в этом шрифте. Так вот я не могу разобраться каким образом мне совместить кнопки на клавиатуре с символами в шрифте.
там в ссылку в конце пробел затесался. Попробуйте так
стыдно признаться, но я не знаю как соотнести букву в таблице шрифта к её коду. Подскажите пожалуйста.
стыдно признаться, но я не знаю как соотнести букву в таблице шрифта к её коду. Подскажите пожалуйста.
версия "в картинках"
Тут не "знать", а догадатся, медитируя на эту табличку :)
В конце, концов, даже не имея ее вы можете просто в цикле for(i=0;i<255) - вывести все имеющиеся у вас символы и посмотреть :)
Вообщем моя "медитация на таблицу сказала такое"
Находим нужную букву. Напирмер букву "Д". Смотрим левую колонку это строки, видим там 176/0xb0 . Судя по всему это код первой буквы в строке (в десятичном и шестнадцатеричном виде). Буква "Д", у нас 5-тая в строке. Значит ее код будет 176+4=180 (+4, а не +5 потому что первая буква имеет "нулевой индекс". Вообщем считаем буквы начиная с нуля).
Итого, что-бы вывести ее нам нужно сделать что-то типа lcd.print("\180");
В принципе понятно, но что тогда означают цифры и буквы после слеша, например /0хf0 ?
В принципе понятно, но что тогда означают цифры и буквы после слеша, например /0хf0 ?
А я ведь написал. Да даже если бы и не написал, то конструкцию начинающуюся на 0x нужно опознавать на глаз. А поможет в этом чтение Целочисленные константы
В принципе понятно, но что тогда означают цифры и буквы после слеша, например /0хf0 ?
А я ведь написал. Да даже если бы и не написал, то конструкцию начинающуюся на 0x нужно опозавать на глаз. А поможет в этом чтение Целочисленные константы
Да, вы правы, извините. Это я невнимательно прочитал.
Не получается. При написани кода вида
на дисплее пишется 9. Что я не правльно делаю?
Можете попробовать вывести все символы, и посмотреть их коды. Убедится что он вообще показывает русские буквы, а потом уже разбиратся "когда какую правильно".
Сделать что-то типа
По идее это будет выводит в Serial код символа, а на экране показывать - показывать сам символ.
Возможно через u8g.print получился сразу на экран и код символа показывать что-бы глаза не разбегались. Вообщем пустите, вообще хоть какие-то русские буквы мелькают на экране?
Спасибо за подсказку. через 5 часов попробую.
Здравствуйте.
Сделал как сказал leshak и о чудо - буквы шрифта полностью совпали с вводимыми цифрами.
Но теперь у меня небольшая проблемма: пытаюсь вывести какойто определенный символ из шрифта, но компилятор выдает ошибку. Подскажите пожалуйста, где я ошибся??
Ну во первых, привыкайте аккуратно расставлять скобки и отступы. А то в этой мешанине - трудно понять что куда отностися.
Лучше это делать руками. С помощью выделения и TAB и Shift-Tab. Но если уже есть "мешанина кода", который нужно привести в порядок - есть волшембная комбинация CTRL-T приводящая в более менее читаемый вид (это в самой ArduinoIDE нажимать нужно).
>Подскажите пожалуйста, где я ошибся??
Ну как минимум в том, что никому не признаетесь что за ошибка.
Не ставить же мне библиотеку вашего шрифта только ради того, что-бы узнать какую ошибку вы видите (а без библиотеку - у меня будут видны совсем другие ошибки).
А дали бы сюда ошибку - глядишь и сами бы ее прочитали. А возможно и догадались бы тогда "что не так". Компилятор же не матом ругается, а пытается максимально помоч в том что-бы было понятно "что не так" (не всегда конечно у него это получается, но все же...)
Подозреваю что кричит он вам, что-то типа "переменная i уже определена". В сроке 14-ть. Вы опять пытаетесь ее объявить, хотя уже завели ее в строке 11 (да еще другого типа).
А возможно еще на чем-то раньше компилятор споткнулся.
Извините.
Ошибка следующая:
Ну смотрите. Даже не заглядывая в доку, по названию функции drawStr можно предположить, что выводит она СТРОКИ.
А вы попытались ей, третьим параметром, скормить то ли char, то ли int (на двойное определение i - компилятор обязательно ругнется тоже).
Посмотрите в мой пример. Видите? Я начале сформировал строку. Сделал массив чаров из двух символов. Послединй символ - всегда ноль (в Си строки это и есть массив char с нулем в конце).
Потом в цикле - менял первый char (то есть задавал код символа). И вот получившуюся строку (мой символ+\0) - скармливал drawStr.
Вы же решили это просто - выкинуть :)
Вам нужно:
1. Делать так же как я, или
2. Искать в документации на библиотеку функцию которая умеет принимать/выводить не строки, а числа. Скажем drawInt, или функцию которая "берет что угодно и сама переводит в строку" (вообщем за вас сделает эту работу). Подозреваю что это будет функция print(), что-то видел такое вчера/позавчера.
спасибо, буду пробовать.
Не получается. При написани кода вида
на дисплее пишется 9. Что я не правльно делаю?
Есть подозрение, что в процессе копипастов и попыток набирать по русски у вас могли невидимые символы попасть туда.
Попробуйте эту строку набрать руками заново . Полностью с нуля. Как минимум - то что в внутри кавычек (и сами кавычки - тоже, сотрите и наберите заново). И без пробела в конце. То есть "\209", а не "\209 " (не копируейте, наберите, предварительно стерев). Можете еще попробовать вот такое "\209\0", хотя, по идее само должно ноль в конце додумывать.
Конструкция "\ddd" служит для вывода символа, представленного числом в восьмиричной системе исчисления ("\070" выведет "8", "\101" выведет "A").
Конструкция "\xdd" (но не "\Xdd") служит для вывода символа, представленного числом в шестнадцатиричной системе исчисления ("\x38" выведет "8", "\x41" выведет "A").
Ну а "\209" - это заворот мозгов для компилятора, ибо старшей цифрой в восьмиричном исчислении является семерка...
Предполагаю, что он волевым решением прекращает интерпретацию последовательности цифр сразу при появлении недопустимого символа (т.е. девятки) и в результате выводится "\20" (управляющий символ, 0x10) и "9". В пользу этого предположения говорит то, что последовательность "\709" выводится как "89" (70 в восьмиричной системе это 38 в шестнадцатиричной, или "8")
Конструкция "\ddd" служит для вывода символа, представленного числом в восьмиричной системе исчисления
Вот же блин горелый. Никогда бы в голову не пришло. Привык, что для всего отличного от 10-тичного, нужно какие-то префиксы, а по дефолту - десятчиный.
И если верить Escape Sequences (C)
То десятичными вообще никак .
Значит либо городить порнографию вида
Либо на 16-тиричные переходить
Спасибо всем за участие в моем вопросе. Видно в какую сторону копать и главное с примерами.
Но есть одно НО: Мне кажется вывод букв и символов из шрифта путем указания номера его букв сложен, и для новичков (на моем примере) будет очень заморочен.
Проблем с вводом латинских символов с клавиатуры нет. Наверное потому что во всех шрифтах буквы соответствуют одному и тому же номеру. Я так понимаю что и в Windows буква в шрифте соответствует своему омеру. Соответсвенно если мы в скетче пишем буква F (номер буквы 70), то при компилировании из шрифта выбирается буква под номером 70, та же F.
А проблеммы с кирилицей в библиотеке U8GLib вызываны тем что номер буквы кирилицы в Windows не соответсвует номеру буквы в используемом шрифте.
Отсюда вопрос - быть может на будущее один раз помучится и сделать один шрифт, по выводу совпадающий с номерами букв Windows. Я бы с удовольствием занялся этим делом, с уменьшение размера букв, тем более что размеры букв в моем случае велики и строка не влазит в дисплей.
Только бы подсказали как. В библиотеке есть файл Font_Data.с В этом файле лежат все шрифты библиотеки. Я попытался изменить размер шрифта, но не получилось. Если кто подскажет как изменить шрифт - буду благодарен.
Пример "подскажите как фонт переколбасить" - вам ustas дал ссылку. Там именно про это речь и идет.
Кстати это не обязательно делать именно на уровне библиотеки. Можно написать функцию которая просто конвертирует строку из одной кодировки - в другую. И деать что-то типа u8g.drawStr(0,22,converEncoding("Моя строка"));
Так будет проще и более универсально (правда ценой расхода памяти, особенно если делать "в лоб", без выискивания закономерностей в таблицах).
Но... несовпадение кодировок (то что вы назвали "номер в Windows не соотсветсует") - это пол беды. К сожалению проблема не ограничивается "другие номера". Как выше уже говорили, для русских букв ArduinoIDE исползует UTF16. То есть на каждую букву приходится ДВА байта. И фиг с ним, если бы оно всю строку целиком делал UTF16. Если строке есть и русские и английские буквы (а, к примеру "пробел" - это тоже "английский"), то у вас в строке часть букв получается однобайтовыми, а часть - двубайтовыми.
Попробуйте сделать что-то типа
И лично я, как отличать одни от других, при пробегании по строке - не вижу (хотя возможно они есть). Скажем если попались два байта 0x4e 0x10 - как узнать это два байта из ASCII таблицы или один символ русский?
Воообщем прежде чем Windows кодироку конвертировать в "библиотечную кодировку" (или править фонт), вначале нужно двух-байтные русские свести к однобайтным русским. В Windows - не одна кодировка для русских возможна. И разница - не только в номерах.
Вообщем, что-бы понять суть печали - пустите вот этот кусок кода
И посмотрите как отличаются длины строк (сколько байт в памяти заняла строка с русскими и латинецей).
Вообщем если бы я делал "для себя",то наверное забил бы на попытки "впихарить эти конвертации в дуину".
Не будет же у меня в скетче "тысячи строк русских". Скорее в свего пару, ну может десяток, строк.
Я бы сделал, на каком-то строннем языке утилитку. Которая берет строку и выводит что-то типа
А дальше copy-past в ардуино код руками.
Практически уверен что такие утилиты уже есть, но найти их может оказатся сложней чем написать. К тому же "написать под себя" - позволяет сразу еще и конвертацию кодировки из windows-1251 в кодировку библиотеки сделать. Такое уже вряд ли "готовое будет".
То же имею такой дисплей. И вот подумалось, дисплею этому нужен отдельный МК, дополнительный. Который будет обрабатывать русский шрифт. Это может быть "каша" латиница и отдельные кириллица, как рука возьмет! А основной МК будет подавать этому переводчику строку без заморотов - "pishem po russki" или тоже по таблице 1 - а, 2 - б, 3 - в, и т. д. Либо просить китайцев о русском знакогенераторе! :) А так никакой памяти не хватит.
> Либо просить китайцев о русском знакогенераторе!
Я же уже выше расписывал. Что "знакогенератор" тут не поможет. Так как у вас проблема не только в конвертации windows-1251 ---> библиотечная кодировка, а и в том что перед этим нужно еще UTF16--->windows-1251 сделать. И не очень понятно как это сделать однозначно. Так как у вас в строке седержится, на самом деле, не UTF16, а "каша" из UTF8 и UTF16. То есть виновато - кривая работа самой ардуиноIDE (или кривость java на которой оно сделанно, не очень хорошо с ней знаком).
Переход на траслит - это в принципе вариант. Но IMHO не очень удобный. А если еще вспомнить про "отдельный котроллер" - кучеряво (стоимость, сложность, место, потребление тока...)
тес более зачем этим заниматся на лету? Все равно же в 99% случаев все тексты заранее известны в момент компиляции. И достаточно конвертнуть их один раз.
Делаем скажем файлик res1.rus, ложим в него содержимое
Пишем консольную утилиту (скажем на C#) которая просто находит в папке все файлы типа *.rus и создаем им соотвествующие файлы типа res1.h
C содержимым вида:
А так же генерит еще один файл, скажем all_res.h содержий инглуды на все это сгенеренный файлы
Далее, нам осталось только в основном скетче прописать
И все. Можем, где нам нужно пользоватся переменными
rusStr1, rusStr2 и т.п.
Вообщем вышли - обычные файли ресурсов. Точно так же как и шрифты генертся/подключаются. Только тут - для строковых переменых.
Если нам нужно поменять текст. Меняем его в .rus файле и кликаем на утилитку для перегенрации.
Плюс к этому получаем еще и возможность локализации :) . Скажем создадим еще файлы типа *.ukr и консольной утилите будем указывать параметром какие именно расширения нужно искать. В итоге, не меняя скетча можем собирать как русский, так и украинский вариант (английских, суахили и т.п.).
Если потребуется, может поменять логику генерации и размещать эти переменные сразу в PROGMEM
Если покопатся, то возможно получится эту тулзень прямо в билд-процесс встроить. Что-бы ардуиноIDE сама вызывала ее при компиляции (но не уверен в этом, в крайнем случае можно взять другие IDE, многие позволяют настраивать билд процесс).
Значит дело в следующем.
Идея вывода русскоязычного шрифта из готовой библиотеки всей проблеммы не решит. Напимер в моем случае имеющиеся буквы слишком большие и строка не влазит в дисплей.
Надо делать свои собственные шрифты. По идее для каждого проекта можно создавать свой уникальный шрифт. И чтобы в обязательном порядке ввод русских букв с клавиатуры совпадал с русскими буквами шрифта.
Я уже разобрался как можно конвертировать свой шрифт в шрифт библиотеки. Теперь пытаюсь разобраться как его запихнуть в общий файл со шрифтами.
Не могу найти редактор BDF шрифтов. Подскажите пожалуйста, где можно скачать. FontForge не предлагать, с официального сайта у меня не пошел.
char d[10] = " ";
u8g.setFont(u8g_font_unifont_0_8);
//Д //а //в //л //е //н //и //е //:
d[0] = 180; d[1] = 208; d[2] = 210; d[3] = 219; d[4] = 213; d[5] = 221; d[6] = 216; d[7] = 213; d[8] = 58;
u8g.drawStr(1, 15, d);
Выведет слово "Давление:"
По аналогии можно закодировать любое слово, главное, чтобы шрифт поддерживал кириллицу, а их там несколько точно есть стандартных из библиотеки.
Добрый день (ночь, утро)!
В рамках проекта системы автоматического полива сделал простой шрифт 5x7 для основного контроллера. Отлично подходит для вывода на LCD 128x64. Возможно кому-то будет полезным )))
В ардуино символы выводятся без каких-либо конвертаций
Шрифт:
Пример сектча для популярного LCD 128x64 на контроллере ST7920 работающего в последовательном режиме:
Соответственно в строчке U8GLIB_ST7920_128X64 u8g(10, 9, 8, U8G_PIN_NONE); вместо 10,9,8 подставляем пины к которым подлкючены сигналы вашего LCD SCK = en, MOSI = rw, CS = di
Оказалось полезным, спасибо. Поделитесь секретом создания шрифта для этой библиотеки.
Оказалось полезным, спасибо. Поделитесь секретом создания шрифта для этой библиотеки.
Пожалуйста. Шрифт для U8G делается очень просто. Сначала создаете шрифт в формате .bdf (bitmap definition font). Затем с помощью утилиты bdf2u8g.exe конверитируете его в библиотечный формат. Есть очень неплохой редактор шрифтов - Fony, который умеет экспортировать в формат bdf. Кроме этого он умеет импортировать различные шрифтовые форматы. Т.е. с помощью описанной выше связки можно для библиотеки u8g создать практически любой шрифт без особых усилий. Правда шрифт 5x7 я так и не нашел откуда импортнуть, поэтому пришлось поработать.
Благодарю, по итогам отпишусь.
Блин, у меня bdf2u8g.exe не запускается, появляется на пол секунды командная строка и всё...(((
Блин, у меня bdf2u8g.exe не запускается, появляется на пол секунды командная строка и всё...(((
так и должно быть. Вы должны запустить программу из под командной строки в той же директори что и файл с шрифтом. при вызове указатть имя файла с шрифтом и имя вновь создаваемого файла. В описании библиотеки все подробно написано.
так и должно быть. Вы должны запустить программу из под командной строки в той же директори что и файл с шрифтом. при вызове указатть имя файла с шрифтом и имя вновь создаваемого файла. В описании библиотеки все подробно написано.
ага........ о как.....
может просто расскажите как вы её запускаете, может тогда пойму
так и должно быть. Вы должны запустить программу из под командной строки в той же директори что и файл с шрифтом. при вызове указатть имя файла с шрифтом и имя вновь создаваемого файла. В описании библиотеки все подробно написано.
ага........ о как.....
может просто расскажите как вы её запускаете, может тогда пойму
Пример:
Из командной строки запускаете:
bdf2u8g.exe my5x7rus_2.bdf my5x7rus my5x7rus.h
где
my5x7rus_2.bdf - имя исходного BDF-шрифта
my5x7rus - имя шрифта в библиотеке (т.е. это название будете указывать в процедуре u8g.setFont(fontname);
т.е. для указанного вторым параметром my5x7rus, выбор шрифта будет осуществляться так: u8g.setFont(my5x7rus);
my5x7rus.h - имя выходного файла шрифта, который вы будете подключать в проект
P.S. Там есть опции, но я с ними не разбирался, поскольку небыло необходимости.
пишет "bdf2u8g.exe" не является внутренней или внешней командой. Может bdf2u8g.exe должен быть расположен в какойто определённой папке? и в каком виде должен быть шрифт перед преобразованием для этой библиотеки?
У меня в ".h" в таком виде.
пишет "bdf2u8g.exe" не является внутренней или внешней командой. Может bdf2u8g.exe должен быть расположен в какойто определённой папке? и в каком виде должен быть шрифт перед преобразованием для этой библиотеки?
У меня в ".h" в таком виде.
Утилита должна быть в том каталоге из которого вы её запускаете или же путь к ней прописан в переменной среды %PATH%. Исходный шрифт должен быть в формате BDF (погуглите bitmap definition font).
Файл формата BDF выглядит так:
Я конечно извиняюсь, но можно по русским обьяснить, хотябы каку запустить bdf2u8g? Командная строка горворить что нет такой команды. Гугл говорит что Fony - нет такой программы. У меня с десяток программ по созданию любых шрифтов из любых но все они в один голос говорят о bdf что нет такого формата (гугл подтверждает). откуда Вы вобще это берёте?
С:Users\Администратор>_ Дальше что?
Я конечно извиняюсь, но можно по русским обьяснить, хотябы каку запустить bdf2u8g? Командная строка горворить что нет такой команды. Гугл говорит что Fony - нет такой программы. У меня с десяток программ по созданию любых шрифтов из любых но все они в один голос говорят о bdf что нет такого формата (гугл подтверждает). откуда Вы вобще это берёте?
С:Users\Администратор>_ Дальше что?
Вы меня конечно извините, но я уже и не знаю как более подробно объяснить. Тут уже все разжевано, осталось только взять и съесть. Кстати, если в гугле вбить fony, то на второй позиции ссылка на скачивание с официального сайта (http://fony.en.softonic.com/) (работа с BDF через File->Import, File->Export)
С:Users\Администратор>_ Дальше что?
Дальше переходите в каталог в котором лежит bdf2u8g.exe (вы его вообще нашли?) и исходный bdf шрифт, запускаете утилиту описанным ранее способом.
Дальше переходите в каталог в котором лежит bdf2u8g.exe (вы его вообще нашли?) и исходный bdf шрифт, запускаете утилиту описанным ранее способом.
Да неужели так трудно написать как это сделать. В том то и дело что всё почастям и отрывкам. Я конечно благодарен что Вы мне помогаете, только отрывки информации я не могу сложить вмечте. Во-первых я не дружу с командной строкой и по возможновти избегаю её. Мне не понятно как перейти туда или туда, она пишет что нет такой команды и как я куда то перейду.
<bdf2u8g.exe (вы его вообще нашли?)
Вы спрашиваете нашёл ли я место куда сохранил этот файл? или я чего то ещё не понимаю
Вы спрашиваете нашёл ли я место куда сохранил этот файл? или я чего то ещё не понимаю
Ну необязательно работать именно с командной строкой в чистом виде. Можно через файловый менеджер перейти в каталог, в котором находится утилита, скопировать туда же BDF-шрифт, который вы хотите сконвертировать для библиотеки U8G. И в командной строке файлового мнедежера запустить
bdf2u8g.exe исходный_шрифт.bdf имя_шрифта выходной_файл
По-моему проще объяснить нельзя.
Видимо создатель всех этих програм он же создатель библиотеки U8GLib.
я конечно мало что ешё видел что касается програмирования, но более тормознутой вещи чем эта биба я не видел. Как и зачем писать библиотеку, которая выводит инфу на экран в самом конце тела loop. контроллер уже посчитал, выполнил, считает другое, меняет данные, а что происходит и результаты не видно, тормоз u8glib ложил на команду "печатать данные" и пока отрабатывает действие оператор "for" или do....while, u8g даже не почешется чтоб что то отобразить. А как тогда отобразить , ну скажем выстраивание линии по пиксельно, походу никак. У меня прям по GLCD настальгия, там если сказал "печатать" она печатает и дебилоидных заморочек с какимито страницами, первоя или вторая, нет. Для отображения картинки достаточно включить в код имя и напечатать в заданом месте и не надо гемороится с размерами картинки вписывать его в скетчь. Программ для создания шрифта полный интернет и запускаются нормально, ненадо никуда ходить, пенреходить и заходить, искать какие то дериктории, лаборатории и прафилактории. Конечно в glcd тоже есть утилита посозданию фонта но её можно легко заменить и замену легко найти.
Тогда вам нужно 2 контроллера один который считает, другой который только выводит получив команды по RS232, причем аппаратный RS232. Или просто готовый дисплей взять с графическим контроллером(видеокартой)
Видимо создатель всех этих програм он же создатель библиотеки U8GLib.
я конечно мало что ешё видел что касается програмирования, но более тормознутой вещи чем эта биба я не видел. Как и зачем писать библиотеку, которая выводит инфу на экран в самом конце тела loop.
Вот же гад такой. Это он специально. Что-бы люди мучались. А он злобно смотрит и хихикает.
А то что он рассказывает зачем он это делал (и чем за это пришлось расплатится) - это он тупо врет:
U8glib addresses several problems:
With some minor restrictions, these problems are solved with U8glib.
я конечно мало что ешё видел что касается програмирования, но более тормознутой вещи чем эта биба я не видел. Как и зачем писать библиотеку, которая выводит инфу на экран в самом конце тела loop. контроллер уже посчитал, выполнил, считает другое, меняет данные, а что происходит и результаты не видно,
Через U8G данные выводятся ровно тогда, когда вы указываете в своей программе.
тормоз u8glib ложил на команду "печатать данные" и пока отрабатывает действие оператор "for" или do....while, u8g даже не почешется чтоб что то отобразить.
Через команду печатать данные U8G формирует страницы для отображения. Затем через связку
u8g.firstPage();
do {
draw();
} while( u8g.nextPage() );
данные выводятся на экран (по сути - обновление экрана)
А как тогда отобразить , ну скажем выстраивание линии по пиксельно, походу никак.
Элементарно. Рисуете линию от заданных координат до координат циклических переменных. И соответственно каждый раз обновляете экран. Второй вариант - сделать массив видеопамяти. Делаете с видеопамятью что угодно, не забывая при этом обновлять экран. Функция рисования будет выводить на экран из видеопамяти через процедуру drawBitmap.
У меня прям по GLCD настальгия, там если сказал "печатать" она печатает и дебилоидных заморочек с какимито страницами, первоя или вторая, нет. Для отображения картинки достаточно включить в код имя и напечатать в заданом месте и не надо гемороится с размерами картинки вписывать его в скетчь. Программ для создания шрифта полный интернет и запускаются нормально, ненадо никуда ходить, пенреходить и заходить, искать какие то дериктории, лаборатории и прафилактории. Конечно в glcd тоже есть утилита посозданию фонта но её можно легко заменить и замену легко найти.
Ну так поему-бы вам её не использовать?
Могу сказать, что u8g отличная библиотека. Шустрая, удобная и универсальная. Главное разобраться что к чему. Слишком просто неразобравшись говорить о том, что продукт плохой. Но ведь бывают и руки кривые.
P.S. Вот мне интересно по-поводу GLCD. Вы говорите - сказал - нарисовала. Ну и как скорость? Т.е. у вас данные выводятся неспеша постепенно?