На восьмой меге модуль ИК пиёмника ))). А по коментам, да как то стремаюсь я показывать как всё это у меня туго выходило и как всем форумом наставляли на путь истинный. В ролике вроде как со стороны всё просто получается, а если по ссылкам ковырнуть так нуб нубом получусь.
Ага - я подозревал, что кому-то пригодится ИК на восьмой.
Нечего там стесняться - начал с нуля и довёл до реализации проекта в железе.
Бывает, увидишь на ютубе интересную реализацию - ни описания, что это, как это, не понятно, где концы искать.
Сделай - оно полезно всем будет, и новичкам, и тебе.
3. Так как русский в юникоде кодируется 2 байтами а библиотека работает с однобайтовыми строками - юникод отпадает на глаза попалась кодировка ISO8859-5 где английские и руские буквы ограниченны одним байтом. Конвертим кодировку BDF c помощью fontforge, добавляем свои символы если надо.
4. используя команды типа "bdf2u8g font/6x10.bdf u8g_font_6x10 utility/u8g_font_6x10.c" конвертим обратно, попутно удаляя дубликаты из "utility/u8g_font_data.c" или добавляем как новый в "utility/u8g.h" и кидаем рядом ".с" файлик
Переписал исходники IDE добавил настройку в какой кодировке выводить исходник. Вобщем теперь он UTF8 перекодирует в то что я хочу во время препроцессинга исходника.
Ай молодца, не удержался, зарегистрировался, чтобы респект выразить. Как в "Назад в будущее" - неужели я сделал что-то, что работает? Молодец. Достал всех, но это того стоило))
Ай молодца, не удержался, зарегистрировался, чтобы респект выразить. Как в "Назад в будущее" - неужели я сделал что-то, что работает? Молодец. Достал всех, но это того стоило))
О вам) Или про вас. Про тебя, в общем. Законченная конструкция - это так редко бывает. Молодец. По ходу пьесы, кстати, быстренько разобрался с нокиевским экранчиком. Огромный респект титовичу и лешаку. Очень полезный и доступный материал получился.
По ходу пьесы, кстати, быстренько разобрался с нокиевским экранчиком..
Чтож, спасибо. По поводу нокиевского экранчика кстати, нашёл времечко и дописываю библиотеку для МК с килобайтной оперативкой и возможностью вывода граффики и текста. Пишу это к тому что в основе её принцип, похожий на U8G. Помню как "хаил" создателя за такую бибу, а когда надумал как "писать и рисовать" на экранчике без чтения из него, вспомнил, что где-то я это уже видел.... но это уже совсем другая история.
Коли уж зашёл в тему, как то рисовал для себя русский 10х14, тоже самое - может кому-нЬтЬ.....
а bdf-ки под него не сохранилось? Или, еще лучше, если есть 6х9 и 6х10... был бы благодарен
никак не могу раскурить как внутри эти шрифты рисовать чтобы после конвертации в код нормально отображались, везде в виде кода уже, подглядеть негде. Уже думаю написать софтинку для обратной конвертации в битмап
значит не правильно в били шрифт. Насколько я знаю там в шрифтах у каждого символа задается его ширина - у вас она встала поумолчанию. Переделайте шрифт правильно.
Вы были правы - проверил ширину символов, и у пустых она оказалась равна шести. Не знаю почему, но после того как я выставил им ширину 1, всё встало на свои места. Еще чуть причешу шрифт и выложу сюда
Скорее всего процедура вывода строки не понимает юникод и для нее строчка "Готов" выглядит как "*Г*о*т*о*в"
где * - первый байт двухбайтного символа в кодировке юникод.
Поэтому, когда ширина "непечатаемых" символов была равна ширине символа - эти * печатались как пробел. Когда Вы изменили их ширину на 1, они стали незаметными.
Может вобще не то скажу, но IMHO ))).... Когдат подгонял вывод русских для экрана от нокиа 1280 (кодировка та же), также выводились с пробелом только не перед, а после русской буквы. На солько потом понял, после символа читаются и выводятся данные за пределами массива символов (шрифта) с шириной символа т.к. при загрузке в разные контроллеры или даже другой код с такой же функцией могли не пробелы выводится а "краказюки". Указал номер последнего символа в массиве шрифта и если номер выводимого символа больше последнего, он игнорируется. Крайний "п" это 191. Всё что больше, return. И пошло всё поехало...
как мне показалось, там определенный код используется в качестве дефолтного символа. Когда все пустые сделал равными одному пикселю в ширину, то и проблема ушла. Хотя, разумеется, умнее было бы разобраться, но мне пока некогда
Залил fon файлы на дропбокс, может кому полезны будут. В архиве 6х9 и 6х10. Там пара символов еще добавлена служебных для интерфейса 3D-принтера, не стал их удалять.
Товарищ NeiroN, меня заинтересовал ваш пост. Не смотря на то, что в описанной вами инструкции количество действий около 0, у меня не получилось повторить ваш подвиг.
Я занимаюсь тем же что и goodwind - руссификация LCD для 3D-принтера. И так же как у него возникла проблема с кодировкой. Путём небольших доработок кода получилось отобразить русские буквы без этих громадных пробелов между ними (коими являются спец символы русских букв в UTF-8), а так же верно выщитывать длины этих строк, что влияет на табуляцию в отображении. Но все же хотелось бы сделать красиво - иметь исходные строки в однобайтовой кодировке, чтобы можно было запутсить тот же самый механизм как и для латиницы.
Использую версию Arduino IDE 1.0.5 (тобишь как и у вас), скачал ваш pde.jar и заменил им одноименный в папке lib, в настройках появилось поле "Кодировка строк". Какие я только не ставил кодирвоки: и MS-DOS и KOI8-R и ASCII. Результат один и тот же - конечная строка так и остается в UTF-8.
Подкиньте, пожалуйста, мысль где и что я не так делаю. Спасибо за внимание.
Может я не писал - оно не меняет кодировку скетча при его сохранениее, оно меняет его кодировку преред компиляцией. Шрифт тоже должен быть в этой кодировке. Скачайте лучше целиком мою версию иде, где все библиотеки http://yadi.sk/d/B-IHNu6QJdiCX
я использовал этот шрифт и думаю что он оптимален u8g.setFont(u8g_font_6x10e); он уже скомпилирован и нет никаких пробелов, кодировка шрифта ISO-8859-5(вы спросите отчего же не CP-1251 - программа редактирования не поддерживала его)
1. Первое наперво нужно изменить шрифты 6x9 и 6x10, которые сделал goodwind. А именно нужно сделать ширину всех символов 6 точек (будь то "точка", "пробел" или буква). Это объясняется тем, что длина любой отображаемой строки на дисплее должна быть одинаковой в независимости от содержимого. У вас, например, "восклицательный знак" занимает 2 или 3 точки. Спецсимволы, которые вы сделали шириной в 1 точку а на дисплее они отображались в самом начале пробелами, можно сделать как угодно, так как в итоге нашей целью является исключение этих кодов при выводе информации на LCD. Это умозаключение я сделал, когда распечатал всю латиницу, знаки и символы стандартным марлиновским шрифтом и своим акуляром оценил занимаемое пространство на дисплее каждым символом.
2. Далее делаем уже не раз обмусоленную операцию конвертирования bdf2u8g отредактированных шрифтов и идём в конец файла dogm_font_data_marlin.h и вставляем что-то типа токого текста:
где u8g_font_6x9_cyrillic.h и u8g_font_6x10_cyrillic.h это заголовочные файлы где лежат массивы соответсвующих шрифтов. Я сделал подмену имён массивов с помощью макроопределений лишь с той и только с той целью, чтобы не бегать по скетчу и не искать где нужно поменять шрифты. А так в "language.h" поменял дефайн LANGUAGE_CHOICE и не паришься.
3. Самый ёмкий пункт. Тут пришлось переделать код в файле dogm_lcd_implementation.h. В нём очень часто встречается следующий код:
Очевидно, что этот код выводит посимвольно строку на LCD дисплей. Имеено сдесь находится причина вывода пустых спецсимволов (пробелов), так как в кодировке UTF-8 русские буквы кодируются двумя байтами, где 1ый - это код страницы (кстати он никогда, вроде, не совпадает по значению с литинскими буквами) и 2ой - это сам код символа. Понятно, что программа не должна выводить спецсимволы. Так же нужно будет в этом файле переделать функцию расчета длины строки с учетом вышесказанного, т.к. действующая считает число однобайтовых символов в строке. Не буду вас утомлять теорией и кину листинг этого файла:
Итог: Все это конечно не плохо, но сам подход ведёт к большому количеству доработок кода (как уже существующего так и добавляемого). Так, например, изменения которые мы сделали они каснулись только меню. А отображение строк на стартовой странице экрана также остается с "пробелами" между буквами ("*Г*о*т*о*в"). Можно и тут что-нибудь придумать. Но надо мыслить универсально! Именно поэтому я не считаю этот способ хорошим решением проблемы руссификации. А склоняюсь к методу, который предложил "NeiroN".
Кстати поковырявшись в редакторе FontForge нашол как добавить(Encoding->Add encoding Name ...) кодировки мелкомягких называются "windows-1251" и "cp866" - теперь можно запилить шрифты русские и в этих кодировках. Кстати строки выводимые в сериал(веб интерфейс, запись в файлы) будут в них же(потому что скетч перед заливкой конвертится в них), вот только "Монитор порта" их не съест, ну можно любым другим терминалом.
Так и не получилось по NeiroN'овски сделать. Вот взять, например, такой код:
char lcd_status_message[20] = "АБВГДЕЖЗИКЛМН";
Объявлен однобайтовый массив размером в 20 символов и тутже проинициализировали его 13 символами. С учетом применения либы pde.jar by NeiroN, которая должна перед компиляцией текст "АБВГДЕЖЗИКЛМН" из UTF-8 перевести в указанную мною однобайтовую кодировку, компилятор выдает ошибку вида: инициализируемая строка слишком велика для объявленного массива.
Я решил не тратить время на поиск особенностей своей стреды, а решил на корню решить проблему - сохранять текст сразу в нужной мне кодировке. Я месяц как уже хотел перейти с Arduino IDE на Eclipse c плагином для работы с AVR микроконтроллерами. А тут ещё один лишний повод сделать это. Надо сказать пришлось немного подза***ться, но результат стоил стараний - удобство, быстрота, комфорт при работе с разными кодировками. В итоге взял за основу Windows-1251, налобал шрифт для неё в *.bdf формате, сконвертил, скомпилил, зашил и вот результат:
Офтоп! Вот интересно, осенне - весеннее увеличение числа девушек, резко увлекшихся ардуоной как то связано с приближающейся сессией?
а, мне уже и не интересно, почему буквы, сцуко, "русские" - в свете чудеснога спасения хуйлом Крыма от бендеровцев, уже не удивляюсь врождённому идиотизму "рускага народа".
Сорри. Но просто мои познания далеки от топик стартера.
А свой Мендель русифицировать хочеться. (заводской дисплей 12864)
Я бы была признательна за готовые файлы, которые необходимо поменять в прошивке чтобы получился русский шрифт как на скрине выше.
Так что мне если можно, мне именно "файликом". Пиво или шоколадку в качестве благодарности гарантирую ;)
Парни, ну вы реально как здрасте среди ночи. Какой дисплей? Синий с белыми квадратиками или всёж на вышеобсуждаемом контроллере?
В какой Вы прошивке и что собрались менять и в чём именно Вы слабы?
Наверное Вы думаете что существует некий файл, который можно просто загрузить в экранчик как то подключив его к компьютеру и он сразу скажет - " О-о-о-о, ПРИВЕТ МИР!" ну и в таком духе? Нет.
Я надеюсь Ваши познания достаточны чтоб уметь читать? Уверен что да. Прочтите Всю тему сначала, уж как тут я выносил мощзг форумчанам и тому же засранцу Клапуцию, и как они всё это мне разжували, по моему детальней некуда. Вы просто примерно поймёте что русские символы не просто отдельный файлик, а целый ритуал и в то же время мелочь, приятная мелочь, особенно когда сам нарисовал.
Надо заняться и сконвертировать все шрифты в windows-1251 кодировку, чтобы вместо дополнительных символов там была кириллица. один фиг памяти столько же занимают.
Ссылку на среду видела. Спасибо. Просто файлов Марлина там не нашла. Поэтому и спросила.
Да. реально полагала, что есть какой-то файлик вроде Configuration.h или language.h в котором хранится русский шрифт. И считала что кому-то не жалко ими поделиться.
temperator, у меня не всегда есть возможность попасть на форум, поэтому я могу ответить не сразу. К вашему сожалению это не один файлик, а целая последовательность действий. Мои результы были получины при помощи: Eclipse IDE + AVR Plugin, создания собственных шрифтов для кодировки в которой я пишу русский текст (в моём случае это Windows-2151), доработки кода в 2-3 файлах + создание новых. Если в целом смотреть на задачу руссификации графического дисплея,то у вас есть 2 выхода: пойти по пути NeiroN (работая в стандартной среде Arduino IDE с его либой, которая перед компиляцией конвертит текст из стандартной ардуиновской кодировки UTF-8 в ту, для которой у вас есть шрифты), либо как я - поставить Eclipse IDE (настроив его под AVR) и уже работать в той кодировке, под которую вы заточили свои шрифты. И в том и в другом случае предётся:
0. Создать шрифты для своей кодировки в bdf-формате, как это, например, было уже сделано goodwind'ом и сконвертировать их в u8g формат при помощи bdf2u8g (все это уже было)
1. Заменить ими шрифты прописанные в файле dogm_font_data_marlin.h. Я не стал менять стандартный марлиновский шрифт, поэтому новые шрифты я сделал в других файлах, а в этом - я лишь добавил концовочку, которая в случая компиляции английской прошивки использует марлиновски шрифт, а в случае русской - собственносделанный (смотрите мои предыдущие пасты).
2. Ещё я вынес русский перевод из language.h в отдельный файл с той целью, чтобы language.h редактировать в UTF-8 а русский текст в Windows-1251. Если идти по пути NeiroN'а, то этот пункт не нужно выполнять.
Разрешите предугадать реаакцию temperator. я непоняла не единого слова...
По всей видимости предсавление следующее:
как в копьютерах есть проги и иногда идут в комплекте руссификаторы, так и сдесь видимо была надежда что Вы сделали готовый руссификатор и Вас не затруднит им поделится.
Разрешите предугадать реаакцию temperator. я непоняла не единого слова...
По всей видимости предсавление следующее:
как в копьютерах есть проги и иногда идут в комплекте руссификаторы, так и сдесь видимо была надежда что Вы сделали готовый руссификатор и Вас не затруднит им поделится.
Примерно так и есть =)
m3xx пишет:
temperator, у меня не всегда есть возможность попасть на форум, поэтому я могу ответить не сразу. К вашему сожалению это не один файлик, а целая последовательность действий. Мои результы были получины при помощи: Eclipse IDE + AVR Plugin, создания собственных шрифтов для кодировки в которой я пишу русский текст (в моём случае это Windows-2151), доработки кода в 2-3 файлах + создание новых. Если в целом смотреть на задачу руссификации графического дисплея,то у вас есть 2 выхода: пойти по пути NeiroN (работая в стандартной среде Arduino IDE с его либой, которая перед компиляцией конвертит текст из стандартной ардуиновской кодировки UTF-8 в ту, для которой у вас есть шрифты), либо как я - поставить Eclipse IDE (настроив его под AVR) и уже работать в той кодировке, под которую вы заточили свои шрифты. И в том и в другом случае предётся:
0. Создать шрифты для своей кодировки в bdf-формате, как это, например, было уже сделано goodwind'ом и сконвертировать их в u8g формат при помощи bdf2u8g (все это уже было)
1. Заменить ими шрифты прописанные в файле dogm_font_data_marlin.h. Я не стал менять стандартный марлиновский шрифт, поэтому новые шрифты я сделал в других файлах, а в этом - я лишь добавил концовочку, которая в случая компиляции английской прошивки использует марлиновски шрифт, а в случае русской - собственносделанный (смотрите мои предыдущие пасты).
2. Ещё я вынес русский перевод из language.h в отдельный файл с той целью, чтобы language.h редактировать в UTF-8 а русский текст в Windows-1251. Если идти по пути NeiroN'а, то этот пункт не нужно выполнять.
По какому пути вам пойти - выбирайте сами.
Есть и 3й путь. Выпросить у Вас готовую прошивку, а уже потом подправить под себя конфиг =)
Я понимаю что путь неправильный, но он единственный, который я смогла бы реализовать.
Можно с Вами по такому пути договориться? Сколько коврижек для меня такое удовольствие будет стоить? =)
К сожалению, из-за отличия кодировки файла с русским переводом от UTF-8, Arduino IDE не сможет скомпилировать код, который успешно компилируется в Eclipse IDE. Если вы установите среду, то я без особых усилий выслал бы вам инструкцию и необходимые файлы для вашего принтера на указанную вами электронную почту.
гыы ну да мозг ты повыносил знатно, тебя уже просто игнорили.. но получилось хорошо, акуратно, мыладец!
На восьмой меге модуль ИК пиёмника ))). А по коментам, да как то стремаюсь я показывать как всё это у меня туго выходило и как всем форумом наставляли на путь истинный. В ролике вроде как со стороны всё просто получается, а если по ссылкам ковырнуть так нуб нубом получусь.
Ага - я подозревал, что кому-то пригодится ИК на восьмой.
Нечего там стесняться - начал с нуля и довёл до реализации проекта в железе.
Бывает, увидишь на ютубе интересную реализацию - ни описания, что это, как это, не понятно, где концы искать.
Сделай - оно полезно всем будет, и новичкам, и тебе.
Отошли от темы!
Я решил поиграться с аналогичным дисплеем подключил по HW SPI - указывая только CS пин - все замечательно, но нет русского языка.
1. Ставим Fontforge (если некорретно отображаются строки - удалить русскую локаль - будет инглиш)
2. качаем шрифты BDF
3. Так как русский в юникоде кодируется 2 байтами а библиотека работает с однобайтовыми строками - юникод отпадает на глаза попалась кодировка ISO8859-5 где английские и руские буквы ограниченны одним байтом. Конвертим кодировку BDF c помощью fontforge, добавляем свои символы если надо.
4. используя команды типа "bdf2u8g font/6x10.bdf u8g_font_6x10 utility/u8g_font_6x10.c" конвертим обратно, попутно удаляя дубликаты из "utility/u8g_font_data.c" или добавляем как новый в "utility/u8g.h" и кидаем рядом ".с" файлик
5. записывать строки придется "\xb0\xb1\xb2\xb3" //АБВГ
В планах переписать препроцессор Arduino IDE добавив перекодировку UTF-8 -> ISO8859-5 - чтобы записывать как есть.
Переписал исходники IDE добавил настройку в какой кодировке выводить исходник. Вобщем теперь он UTF8 перекодирует в то что я хочу во время препроцессинга исходника.
Выкладывать пока рано - не тестировал.
Выкладывать пока рано - не тестировал.
Протестировал! Все работает как Запланировано
/lib/pde.jar Настройки->Кодировка строк->[кодировка шрифта]
PROFFIT!!!
titovich, а можно на BDF этого шрифта взглянуть?
Ай молодца, не удержался, зарегистрировался, чтобы респект выразить. Как в "Назад в будущее" - неужели я сделал что-то, что работает? Молодец. Достал всех, но это того стоило))
Ай молодца, не удержался, зарегистрировался, чтобы респект выразить. Как в "Назад в будущее" - неужели я сделал что-то, что работает? Молодец. Достал всех, но это того стоило))
А Вы о чём? Ну или о ком?
Коли уж зашёл в тему, как то рисовал для себя русский 10х14, тоже самое - может кому-нЬтЬ.....
О вам) Или про вас. Про тебя, в общем. Законченная конструкция - это так редко бывает. Молодец. По ходу пьесы, кстати, быстренько разобрался с нокиевским экранчиком. Огромный респект титовичу и лешаку. Очень полезный и доступный материал получился.
Чтож, спасибо. По поводу нокиевского экранчика кстати, нашёл времечко и дописываю библиотеку для МК с килобайтной оперативкой и возможностью вывода граффики и текста. Пишу это к тому что в основе её принцип, похожий на U8G. Помню как "хаил" создателя за такую бибу, а когда надумал как "писать и рисовать" на экранчике без чтения из него, вспомнил, что где-то я это уже видел.... но это уже совсем другая история.
Коли уж зашёл в тему, как то рисовал для себя русский 10х14, тоже самое - может кому-нЬтЬ.....
а bdf-ки под него не сохранилось? Или, еще лучше, если есть 6х9 и 6х10... был бы благодарен
никак не могу раскурить как внутри эти шрифты рисовать чтобы после конвертации в код нормально отображались, везде в виде кода уже, подглядеть негде. Уже думаю написать софтинку для обратной конвертации в битмап
А чегож, остался. Я тоже когда завёлся с русским, нужен был исходник. Правда не докричался.
В других размерах руского нет. Как напишите, миласти просим выкласть тут.
Благодарю, как сделаю - обязательно заделюсь
странно, отрисовал шрифт 6х9, залил в ардуино и получил вот такое: буквы пишутся через пробел
Причем, английские выглядят нормально.
значит не правильно в били шрифт. Насколько я знаю там в шрифтах у каждого символа задается его ширина - у вас она встала поумолчанию. Переделайте шрифт правильно.
Спасибо!
Вы были правы - проверил ширину символов, и у пустых она оказалась равна шести. Не знаю почему, но после того как я выставил им ширину 1, всё встало на свои места. Еще чуть причешу шрифт и выложу сюда
Скорее всего процедура вывода строки не понимает юникод и для нее строчка "Готов" выглядит как "*Г*о*т*о*в"
где * - первый байт двухбайтного символа в кодировке юникод.
Поэтому, когда ширина "непечатаемых" символов была равна ширине символа - эти * печатались как пробел. Когда Вы изменили их ширину на 1, они стали незаметными.
P.S. IMHO )))
Может вобще не то скажу, но IMHO ))).... Когдат подгонял вывод русских для экрана от нокиа 1280 (кодировка та же), также выводились с пробелом только не перед, а после русской буквы. На солько потом понял, после символа читаются и выводятся данные за пределами массива символов (шрифта) с шириной символа т.к. при загрузке в разные контроллеры или даже другой код с такой же функцией могли не пробелы выводится а "краказюки". Указал номер последнего символа в массиве шрифта и если номер выводимого символа больше последнего, он игнорируется. Крайний "п" это 191. Всё что больше, return. И пошло всё поехало...
как мне показалось, там определенный код используется в качестве дефолтного символа. Когда все пустые сделал равными одному пикселю в ширину, то и проблема ушла. Хотя, разумеется, умнее было бы разобраться, но мне пока некогда
Залил fon файлы на дропбокс, может кому полезны будут. В архиве 6х9 и 6х10. Там пара символов еще добавлена служебных для интерфейса 3D-принтера, не стал их удалять.
/lib/pde.jar Настройки->Кодировка строк->[кодировка шрифта]
Товарищ NeiroN, меня заинтересовал ваш пост. Не смотря на то, что в описанной вами инструкции количество действий около 0, у меня не получилось повторить ваш подвиг.
Я занимаюсь тем же что и goodwind - руссификация LCD для 3D-принтера. И так же как у него возникла проблема с кодировкой. Путём небольших доработок кода получилось отобразить русские буквы без этих громадных пробелов между ними (коими являются спец символы русских букв в UTF-8), а так же верно выщитывать длины этих строк, что влияет на табуляцию в отображении. Но все же хотелось бы сделать красиво - иметь исходные строки в однобайтовой кодировке, чтобы можно было запутсить тот же самый механизм как и для латиницы.
Использую версию Arduino IDE 1.0.5 (тобишь как и у вас), скачал ваш pde.jar и заменил им одноименный в папке lib, в настройках появилось поле "Кодировка строк". Какие я только не ставил кодирвоки: и MS-DOS и KOI8-R и ASCII. Результат один и тот же - конечная строка так и остается в UTF-8.
Подкиньте, пожалуйста, мысль где и что я не так делаю. Спасибо за внимание.
Поделитесь решением проблемы с табуляцией, пожалуйста.. Все руки не дойдут разобраться
Может я не писал - оно не меняет кодировку скетча при его сохранениее, оно меняет его кодировку преред компиляцией. Шрифт тоже должен быть в этой кодировке. Скачайте лучше целиком мою версию иде, где все библиотеки http://yadi.sk/d/B-IHNu6QJdiCX
я использовал этот шрифт и думаю что он оптимален u8g.setFont(u8g_font_6x10e); он уже скомпилирован и нет никаких пробелов, кодировка шрифта ISO-8859-5(вы спросите отчего же не CP-1251 - программа редактирования не поддерживала его)
По просьбе goodwind:
1. Первое наперво нужно изменить шрифты 6x9 и 6x10, которые сделал goodwind. А именно нужно сделать ширину всех символов 6 точек (будь то "точка", "пробел" или буква). Это объясняется тем, что длина любой отображаемой строки на дисплее должна быть одинаковой в независимости от содержимого. У вас, например, "восклицательный знак" занимает 2 или 3 точки. Спецсимволы, которые вы сделали шириной в 1 точку а на дисплее они отображались в самом начале пробелами, можно сделать как угодно, так как в итоге нашей целью является исключение этих кодов при выводе информации на LCD. Это умозаключение я сделал, когда распечатал всю латиницу, знаки и символы стандартным марлиновским шрифтом и своим акуляром оценил занимаемое пространство на дисплее каждым символом.
2. Далее делаем уже не раз обмусоленную операцию конвертирования bdf2u8g отредактированных шрифтов и идём в конец файла dogm_font_data_marlin.h и вставляем что-то типа токого текста:
где u8g_font_6x9_cyrillic.h и u8g_font_6x10_cyrillic.h это заголовочные файлы где лежат массивы соответсвующих шрифтов. Я сделал подмену имён массивов с помощью макроопределений лишь с той и только с той целью, чтобы не бегать по скетчу и не искать где нужно поменять шрифты. А так в "language.h" поменял дефайн LANGUAGE_CHOICE и не паришься.
3. Самый ёмкий пункт. Тут пришлось переделать код в файле dogm_lcd_implementation.h. В нём очень часто встречается следующий код:
Очевидно, что этот код выводит посимвольно строку на LCD дисплей. Имеено сдесь находится причина вывода пустых спецсимволов (пробелов), так как в кодировке UTF-8 русские буквы кодируются двумя байтами, где 1ый - это код страницы (кстати он никогда, вроде, не совпадает по значению с литинскими буквами) и 2ой - это сам код символа. Понятно, что программа не должна выводить спецсимволы. Так же нужно будет в этом файле переделать функцию расчета длины строки с учетом вышесказанного, т.к. действующая считает число однобайтовых символов в строке. Не буду вас утомлять теорией и кину листинг этого файла:
Итог: Все это конечно не плохо, но сам подход ведёт к большому количеству доработок кода (как уже существующего так и добавляемого). Так, например, изменения которые мы сделали они каснулись только меню. А отображение строк на стартовой странице экрана также остается с "пробелами" между буквами ("*Г*о*т*о*в"). Можно и тут что-нибудь придумать. Но надо мыслить универсально! Именно поэтому я не считаю этот способ хорошим решением проблемы руссификации. А склоняюсь к методу, который предложил "NeiroN".
Кстати поковырявшись в редакторе FontForge нашол как добавить(Encoding->Add encoding Name ...) кодировки мелкомягких называются "windows-1251" и "cp866" - теперь можно запилить шрифты русские и в этих кодировках. Кстати строки выводимые в сериал(веб интерфейс, запись в файлы) будут в них же(потому что скетч перед заливкой конвертится в них), вот только "Монитор порта" их не съест, ну можно любым другим терминалом.
Выкладывать пока рано - не тестировал.
Протестировал! Все работает как Запланировано
/lib/pde.jar Настройки->Кодировка строк->[кодировка шрифта]
PROFFIT!!!
Специально зарегистрировался, чтобы сказать спасибо.
Спасибо.
Так и не получилось по NeiroN'овски сделать. Вот взять, например, такой код:
Объявлен однобайтовый массив размером в 20 символов и тутже проинициализировали его 13 символами. С учетом применения либы pde.jar by NeiroN, которая должна перед компиляцией текст "АБВГДЕЖЗИКЛМН" из UTF-8 перевести в указанную мною однобайтовую кодировку, компилятор выдает ошибку вида: инициализируемая строка слишком велика для объявленного массива.
Я решил не тратить время на поиск особенностей своей стреды, а решил на корню решить проблему - сохранять текст сразу в нужной мне кодировке. Я месяц как уже хотел перейти с Arduino IDE на Eclipse c плагином для работы с AVR микроконтроллерами. А тут ещё один лишний повод сделать это. Надо сказать пришлось немного подза***ться, но результат стоил стараний - удобство, быстрота, комфорт при работе с разными кодировками. В итоге взял за основу Windows-1251, налобал шрифт для неё в *.bdf формате, сконвертил, скомпилил, зашил и вот результат:
Не поделетесь файликами для русскикации прошивки?
И мне, пожалуйста =)
Что значит "для руссификации прошивки"? Просмотрите тему сначала. Уже всё выложили.
Сорри. Но просто мои познания далеки от топик стартера.
А свой Мендель русифицировать хочеться. (заводской дисплей 12864)
Я бы была признательна за готовые файлы, которые необходимо поменять в прошивке чтобы получился русский шрифт как на скрине выше.
Так что мне если можно, мне именно "файликом". Пиво или шоколадку в качестве благодарности гарантирую ;)
Офтоп! Вот интересно, осенне - весеннее увеличение числа девушек, резко увлекшихся ардуоной как то связано с приближающейся сессией?
Офтоп! Вот интересно, осенне - весеннее увеличение числа девушек, резко увлекшихся ардуоной как то связано с приближающейся сессией?
а, мне уже и не интересно, почему буквы, сцуко, "русские" - в свете чудеснога спасения хуйлом Крыма от бендеровцев, уже не удивляюсь врождённому идиотизму "рускага народа".
Сорри. Но просто мои познания далеки от топик стартера.
А свой Мендель русифицировать хочеться. (заводской дисплей 12864)
Я бы была признательна за готовые файлы, которые необходимо поменять в прошивке чтобы получился русский шрифт как на скрине выше.
Так что мне если можно, мне именно "файликом". Пиво или шоколадку в качестве благодарности гарантирую ;)
Парни, ну вы реально как здрасте среди ночи. Какой дисплей? Синий с белыми квадратиками или всёж на вышеобсуждаемом контроллере?
В какой Вы прошивке и что собрались менять и в чём именно Вы слабы?
Наверное Вы думаете что существует некий файл, который можно просто загрузить в экранчик как то подключив его к компьютеру и он сразу скажет - " О-о-о-о, ПРИВЕТ МИР!" ну и в таком духе? Нет.
Я надеюсь Ваши познания достаточны чтоб уметь читать? Уверен что да. Прочтите Всю тему сначала, уж как тут я выносил мощзг форумчанам и тому же засранцу Клапуцию, и как они всё это мне разжували, по моему детальней некуда. Вы просто примерно поймёте что русские символы не просто отдельный файлик, а целый ритуал и в то же время мелочь, приятная мелочь, особенно когда сам нарисовал.
P.S. Извиняюсь за "Парни",окончание глагола "былА" не сразу увидел.
Я уже где-то кидал ссылку на "свою" среду целиком, со всеми нужными и ненужными библиотеками, тем что я пишу для
развлечениятренировки мозговДа, так и есть. В этой же теме выше. Я ж не просто так посылаю в начало...
Надо заняться и сконвертировать все шрифты в windows-1251 кодировку, чтобы вместо дополнительных символов там была кириллица. один фиг памяти столько же занимают.
Сорри, если кого задела или обидела ;(
Экран вот такой: http://www.elecrow.com/12864-smart-lcd-controller-with-adapter-for-reprap-ramps-14-p-1095.html
Прошивка: Marlin
Принтер: Prusa I2 Mendel
Ссылку на среду видела. Спасибо. Просто файлов Марлина там не нашла. Поэтому и спросила.
Да. реально полагала, что есть какой-то файлик вроде Configuration.h или language.h в котором хранится русский шрифт. И считала что кому-то не жалко ими поделиться.
Так с этого надо было начинать. Тогда стучите к m3xx.
И я тоже оффтоп. Не пойму, вы все что 3Д принтер почастям собираете чтоли?
стУдентЫ, колитесь - в каком универе лаба с принтером и "рускими буквами"?
Меня давно терзает вопрос - "в каком универе работает пухлявый?" - полюбому это он задал детишкам)))
Так с этого надо было начинать. Тогда стучите к m3xx.
И я тоже оффтоп. Не пойму, вы все что 3Д принтер почастям собираете чтоли?
1) В теме не отвечает. А как в личку ему стукнуть?
2) нет. Покупаем в сборе в Китае, а после получения хочеться чтобы принтер заговорил на великом и могучем...
скомпилил, зашил и вот результат:
Куда тащить шоколадку? =)
temperator, у меня не всегда есть возможность попасть на форум, поэтому я могу ответить не сразу. К вашему сожалению это не один файлик, а целая последовательность действий. Мои результы были получины при помощи: Eclipse IDE + AVR Plugin, создания собственных шрифтов для кодировки в которой я пишу русский текст (в моём случае это Windows-2151), доработки кода в 2-3 файлах + создание новых. Если в целом смотреть на задачу руссификации графического дисплея,то у вас есть 2 выхода: пойти по пути NeiroN (работая в стандартной среде Arduino IDE с его либой, которая перед компиляцией конвертит текст из стандартной ардуиновской кодировки UTF-8 в ту, для которой у вас есть шрифты), либо как я - поставить Eclipse IDE (настроив его под AVR) и уже работать в той кодировке, под которую вы заточили свои шрифты. И в том и в другом случае предётся:
0. Создать шрифты для своей кодировки в bdf-формате, как это, например, было уже сделано goodwind'ом и сконвертировать их в u8g формат при помощи bdf2u8g (все это уже было)
1. Заменить ими шрифты прописанные в файле dogm_font_data_marlin.h. Я не стал менять стандартный марлиновский шрифт, поэтому новые шрифты я сделал в других файлах, а в этом - я лишь добавил концовочку, которая в случая компиляции английской прошивки использует марлиновски шрифт, а в случае русской - собственносделанный (смотрите мои предыдущие пасты).
2. Ещё я вынес русский перевод из language.h в отдельный файл с той целью, чтобы language.h редактировать в UTF-8 а русский текст в Windows-1251. Если идти по пути NeiroN'а, то этот пункт не нужно выполнять.
По какому пути вам пойти - выбирайте сами.
Разрешите предугадать реаакцию temperator. я непоняла не единого слова...
По всей видимости предсавление следующее:
как в копьютерах есть проги и иногда идут в комплекте руссификаторы, так и сдесь видимо была надежда что Вы сделали готовый руссификатор и Вас не затруднит им поделится.
Разрешите предугадать реаакцию temperator. я непоняла не единого слова...
По всей видимости предсавление следующее:
как в копьютерах есть проги и иногда идут в комплекте руссификаторы, так и сдесь видимо была надежда что Вы сделали готовый руссификатор и Вас не затруднит им поделится.
Примерно так и есть =)
temperator, у меня не всегда есть возможность попасть на форум, поэтому я могу ответить не сразу. К вашему сожалению это не один файлик, а целая последовательность действий. Мои результы были получины при помощи: Eclipse IDE + AVR Plugin, создания собственных шрифтов для кодировки в которой я пишу русский текст (в моём случае это Windows-2151), доработки кода в 2-3 файлах + создание новых. Если в целом смотреть на задачу руссификации графического дисплея,то у вас есть 2 выхода: пойти по пути NeiroN (работая в стандартной среде Arduino IDE с его либой, которая перед компиляцией конвертит текст из стандартной ардуиновской кодировки UTF-8 в ту, для которой у вас есть шрифты), либо как я - поставить Eclipse IDE (настроив его под AVR) и уже работать в той кодировке, под которую вы заточили свои шрифты. И в том и в другом случае предётся:
0. Создать шрифты для своей кодировки в bdf-формате, как это, например, было уже сделано goodwind'ом и сконвертировать их в u8g формат при помощи bdf2u8g (все это уже было)
1. Заменить ими шрифты прописанные в файле dogm_font_data_marlin.h. Я не стал менять стандартный марлиновский шрифт, поэтому новые шрифты я сделал в других файлах, а в этом - я лишь добавил концовочку, которая в случая компиляции английской прошивки использует марлиновски шрифт, а в случае русской - собственносделанный (смотрите мои предыдущие пасты).
2. Ещё я вынес русский перевод из language.h в отдельный файл с той целью, чтобы language.h редактировать в UTF-8 а русский текст в Windows-1251. Если идти по пути NeiroN'а, то этот пункт не нужно выполнять.
По какому пути вам пойти - выбирайте сами.
Есть и 3й путь. Выпросить у Вас готовую прошивку, а уже потом подправить под себя конфиг =)
Я понимаю что путь неправильный, но он единственный, который я смогла бы реализовать.
Можно с Вами по такому пути договориться? Сколько коврижек для меня такое удовольствие будет стоить? =)
P.S. А как на форуме писать в личку?
К сожалению, из-за отличия кодировки файла с русским переводом от UTF-8, Arduino IDE не сможет скомпилировать код, который успешно компилируется в Eclipse IDE. Если вы установите среду, то я без особых усилий выслал бы вам инструкцию и необходимые файлы для вашего принтера на указанную вами электронную почту.
Большущие спасибо. Начну освоение ;)
mariya_gadaeva(тяф-тяф)mail.ru
Готовьте коврижки :)