Кириллица на дисплее или что я делаю не так?
- Войдите на сайт для отправки комментариев
Кириллица на дисплее или что я делаю не так?
Честно говоря, мне самому кириллица как-то без особой надобности.
Но, почему-то, на форуме вокруг нее творятся страшные вещи.
Например, по ссылкам:
http://lesson.iarduino.ru/page/urok-8-russkiy-yazyk-na-oled-displee-128x64/
http://arduino-project.net/russkie-ukrainskie-shrifty-oled-i2c/
предлагают использовать ее следующим образом.
Допустим, все библиотеки, шрифты и т.п. скачаны и установлены, переходим к программированию.
Скажем, нужно вывести на экран фразу "Моя Arduino сгорела.". Оказывается, что просто так это сделать нельзя. Следует:
- установить русский фонт,
- вывести "Моя " с нужного места экрана,
- теперь переключить фонт на английский,
- посчитать, сколько символов занимает первая надпись,
- вывести строку с учетом указанного смещения,
- вывести строку "Arduino ",
- снова переключить фонт - обратно на русский,
- снова посчитать смещение,
- вывести "сгорела."
Мало того, при наборе строк "Моя " и "сгорела." нужно переключить клавиатуру в латинскую раскладку, но набирать, глядя на русские надписи на клавиатуре.
Что при этом будет на экране - сложно представить.
А чтобы потом самому не запутаться в коде, рекомендуется дублировать надписи в комментариях - теперь уже в нормальной кодировке.
То есть это должно выглядеть примерно так:
myOLED.setFont(RusFont); myOLED.print("Vjz ", 0, 3); // Выводим надпись "Моя " myOLED.setFont(LatFont); myOLED.print("Arduino ", 4, 3); // Выводим надпись "Arduino " myOLED.setFont(RusFont); myOLED.print("cujhtkf/", 12, 3); // Выводим надпись "сгорела."
Я лично делаю так:
LD.printString6("0123456789!\"#$%&'()*+", 0, 0, 21); LD.printString6(",-./:;<=>?@[\\]^_`{|}~", 0, 1, 21); LD.printString6("ABCDEFGHIJKLMNOPQRSTU", 0, 2, 21); LD.printString6("VWXYZabcdefghijklmnop",0, 3, 21); LD.printString6("qrstuvwxyzАБВГДЕЁЖЗИЙ", 0, 4, 21); LD.printString6("КЛМНОПРСТУФХЦЧШЩЪЫЬЭЮ", 0, 5, 21); LD.printString6("Яабвгдеёжзийклмнопрст", 0, 6, 21); LD.printString6("уфхцчшщъыьэюяЇїЎў§°±µ", 0, 7, 21);
и получаю на экране:
При этом моя IDE, как и положено, работает в utf-8.
Что я делаю неправильно?
разве неясно что ты делаешь неправильно? Ты используешь волшебную библиотеку, в которой есть то, что не смогли сделать другие программисты.
Выход только один - срочно её удалить. А также все ее копии из архивов. Тогда ты будешь как все - корячиться с написанием кода и комментированием для потомков. Ведь только умственный процесс - это эволюция, выживают сильнейшие, а не ленивые.
Ну, библиотекой это пока называть рано. Это - пока мои первые попытки что-то написать для arduino.
Удалить, конечно, можно.
Только ведь я снова смогу это написать - вот проблема!
Придётся тебя ликвидировать. Человечество важнее.
А по делу - мне строки LD.printString6 незнакомы, это что-то новое, и что значат три цифры в конце?
"6" в конце названия функции означает фонт шириной 6 пикселей.
Послежние 3 цифры - наследие библиотеки by Oscar Liang (OzOLED), которая послужила одним из прототипов: первые два числа означают координаты символа на экране, а последняя - количество выводимых символов.
В общем, все это нуждается в упорядочивании, чем я постепенно и занимаюсь.
Так как никакой конструктивной критики моей идеи по использованию кириллицы в Ардуино не последовало (за исключением предложения убицца ап стену), выкладываю предварительный вариант библиотеки.
Библиотека разрабатывалась, исходя из минимизации занимаемого ею места как в постоянной, так и в оперативной памяти.
Библиотека работает с кодировкой utf-8, которая принята в IDE Arduino.
Библиотека позволяет отображать все символы ASCII кроме управляющих, все символы русского алфавита, включая Ёё, некоторые символы кириллицы украинского и беларусского алфавита [ЃѓЄєІіЇїЎўҐґ], и четыре прочих символа, которые мне понравились [§°±µ].
Никакие другие символы библиотека отображать не может. Зато при попытке отображения произвольной последовательности utf-8 символов последствия могут быть непредсказуемы.
Библиотека позволяет отображать символы двух размеров 6х8 и 12х16 пикселей, но в целях экономии большой фонт получается путем "растягивания" малого, а потому довольно угловат.
Для меня пока непонятен принци переключения между фонтами. Я вижу здесь 2 варианта:
и
Хотелось бы услышать мнение, какой вариант удобнее.
Библиотека проверялась исключительно с 0.96" OLED дисплеем SSD1306 128x64, может ли она работать с чем-либо другим, не знаю.
Работа над библиотекой пока не закончена, поэтому просьба не распространять эту библиотеку.
Пример работы (файл Test_ASOLED_1.ino):
Заголовочный файл библиотеки (ASOLED.h):
Код библиотеки (ASOLED.cpp):
Шрифт (a_Small_Rus.c):
И демонстрационная картинка (mice.c) - к библиотеке отношения не имеет, просто для иллюстрации:
Потому что критиковать было нечего, была только декларация о намерениях. Вот теперь есть реальный результат, значит можно тестировать на хомячках и давать реальные замечания.
Пока с меня только вопросы:
фильтровать входящее, все недопустимое отбрасывать.
Второй удобнее, т.к. нагляднее. Кстати, как насчет объединенных строк, типа
LD.printStringSmall(
"Темп. =", temp, "
°")
;
?Библиотека толко текст отображает? Без линий и прямоугольников красивое меню сложно будет нарисовать. Может просто взять этот кусок из тех библиотек? (моему минимализму достаточно только прорисовки горизонтальных линий "от ... и до ...").
Спасибо за конструктивную критику.
А нужно ли это?
Компьютер с 32 Кбайтами ROM и 2 Кбайтами RAM в принципе неспособен отобразить всю таблицу utf-8. Приходится ограничиваться чем-то существенно меньшим.
Кроме того, это две совершенно разные задачи:
- обрабатывать произвольные ВНЕШНИЕ данные,
- обрабатывать заранее заданный набор ВНУТРЕННИХ данных.
В первом случае контроль и отсечение недопустимого обязателен, а во втором - он вряд ли целесообразен. Устройство будет отображать только те тексты, которые для него заранее подготовил программист и никакие другие. Значит, это его забота - чтобы все данные входили в допустимый диапазон, и незачем тратить на обработку таких ситуаций лишние байты памяти.
Волюнтаризм в чистом виде. Можно добавить любое количество (пока их общее число не превысит 255), но каждый будет стоить довольно много памяти, т.к. помимо 5 байт в знакогенераторе на каждый дополнительный символ требуется отдельная ветка в коде.
LD.printStringSmall(
"Темп. =", temp, "
°")
;
?Меня тоже сильно напрягает отсутствие в Arduino стандартной С-шной функции printf, но т.к. мое знакомство с данным устройством составляет пока менее 2-х недель, я не успел достоверно выяснить, с чем это связано. Сильно подозреваю, что с существенным ограничением по памяти.
Кому нравится поп, а кому - попадья.
Если Вы измеряете температуру, то, вероятно, Вам гораздо важнее "градус" чем "мю". А если емкость конденсаторов, - скорее всего, будет наоборот.
Но добавить еще пару-тройку символов по заказам трудящихся - без проблем.
Только текст и вертикальные линии.
Фактически в условиях Arduino может быть только два типа библиотек для подобного дисплея:
1. Допускают попиксельную графику, в частности позволяет рисовать произвольные линии, окружности и т.п. В частности, позволяют вывести букву в любом месте экрана. Отжирают более 2/3 всей доступной оперативной памяти.
2. Позволяют рисовать только символы (и только по сетке в 8 пикселей по вертикали) и вертикальные линии. Имеют довольно скромные запросы по оперативной памати.
Первые, на мой взгляд, имеют право на существование в проектах, где дисплей - центральное устройство, а весь код предназначен именно для того, чтобы вывести нечто полезное на дисплей.
Если же дисплей имеет вспомогательное значение (например, проекты с развитой электромеханикой: роботы, манипуляторы, управление производственными процессами и пр.), то в большинстве случаев единственно приемлемым будет второй вариант.
Моя библиотека рассчитана именно на 2-й вариант.
PS. В библиотеку входит процедура отображения битмапа. Можно создать любую картинку в битмапе и вывести ее на экран. Так что теоретически пиксельная графика здесь также возможна.
фиг с ней, это графикой. А будет возможность программно задавать несколько пользовательских символов (как это сделало в библиотеках для текстовых LCD), т.е. без правки библиотечных файлов?
А какой смысл в этих нескольких порльзовательских символах?
И каким образом Вы предлагаете их задавать?
Если Вы знаете, как их нарисовать, не будет ли проще добавить их в существующий знакогенератор (т.е. путем правки библиотеки)?
И еще: должны ли им соответствовать какие-либо utf-8 коды, или основная мысль как раз отображать символы, не имеющие utf-8 кодов?
Немного подрихтовал библиотечку.
Решил, что для переключение фонта нужно оставить оба варианта. Строку можно вывести одной из трех процедур: две из них устанавливают конкретный фонт и выводят им, третья выводит ранее установленным фонтом.
Демонстрационная программа:
Заголовочный файл (ASOLED.h):
Код библиотеки (ASOLED.cpp):
Остальные два файла (шрифт и демонстрационный битмап) остались без изменений, так что их можно взять из 5-го поста настоящей темы.
Советую досмотреть демонстрацию до крнца: хотя библиотека формально и не поддерживает графику, но...
Спасибо за ответ!
И спасибо за библиотеку! Библиотека понравилась, честно! Спасибо за Ваш труд!
Если позволите, скажу несколько слов про концепцию РУССКОГО ШРИФТА. Я по образованию инженер-электронщик, имею некоторый жизненный опыт и некоторые свои мысли по поводу развития РУССКОГО ПРОЕКТА АРДУИНО, с которыми хочу поделиться.
1) По моему мнению надо сделать революционное решение и перестать тащить за собой "БАБУШКИН САКВОЯЖ", который и выбросить жалко, и пользы от него с гулькин нос. Что я имею в виду? Предлагаю отказаться от полной поддержки кодировки ANSI в проекте РУССКОГО ARDUINO. ПОСЕМУ ПРЕДЛАГАЮ ПЕРЕПИСАТЬ ТАБЛИЦУ СИМВОЛОВ ПОД ПОТРЕБИТЕЛЬСКИЕ НУЖДЫ МАСТЕРОВ ПО ЭЛЕКТРОНИКИ И ВЫКИНУТЬ ИЗ ЭТОЙ ТАБЛИЦЫ ВСЕ ЗАГЛАВНЫЕ АНГЛИЙСКИЕ БУКВЫ, ЗАМЕНИВ ИХ НА ВОСТРЕБОВАННЫЕ СПЕЦИАЛИЗИРОВАННЫЕ СИМВОЛЫ ДЛЯ ИНДИКАЦИИ ДАТЧИКОВ И ИСПОЛНИТЕЛЬНЫХ УСТРОЙСТВ СТАНДАРТНЫМИ СРЕДСТВАМИ ШРИФТА. Предлагаю оставить только малые английские буквы исключительно только для совместимости и интернет шилдами.
2) Создать шрифтовые символы таких элементов как батарейка, термопара, солнечная панель, мотор, насос, реле, автомат, кнопка, лампа, кран, звонок и т.д. Эти символы должны быть в двух графических видах - активный т.е.(включенный) и неактивный (выключенный). Можно использовать инверсию графического изображения, или еще что.
3) Считаю, что в шрифт также необходимо добавить фукцию рисования таблиц, в ячейки которых можно раставлять буквенно - численные значения, а также в процессе наладки изделия, выводить матрицы и массивы.
Вот такое мое предложение. Жду ваших коментариев.
Если позволите, скажу несколько слов про концепцию РУССКОГО ШРИФТА. Я по образованию инженер-электронщик, имею некоторый жизненный опыт и некоторые свои мысли по поводу развития РУССКОГО ПРОЕКТА АРДУИНО, с которыми хочу поделиться.
а как же российский флаг? а давайте еще гимн пропишем и что бы обязательно при включении прокручивался.. и всем вставать при прокрутке гимна...
да и обязательно нужно прописать портрет ВВП. на каждом экране по центру что бы был.
А может не стоит тролить?!
А может не стоит тролить?!
тролить? это вы про свои идеи? давайте прикинем...
с одной стороны, латиница и весь глобус разработчиков...
с вашей стороны, кирилица и 2 с половиной инвалида которым это нужно
нарисовать вы можете все что вам хочеться. вообще без ограничений..
Троль тем и отличается, что глобус. Если вам это не нужно - валите из темы в глобус разработчиков.
Троль тем и отличается, что глобус. Если вам это не нужно - валите из темы в глобус разработчиков.
халявщики отличаются тем что когда им дают маленький кусочек. то они в ответ приносят кучу разных требований и условий. которые нафиг никому не нужны!
да ладно, идея в общем-то здравая.
сильно сомневаюсь, что кто-то у нас пишет проекты "на весь глобус". и действительно, для ардуины вместо дублиующих шрифтов было бы гораздо удобнее добавить спец. символы.
кстати, интересно. только на мове hello world получается в рифму. украинский- красивый язык )
сильно сомневаюсь, что кто-то у нас пишет проекты "на весь глобус".
вы не поверите :) но таки да пишут. и их много у нас есть.
1) По моему мнению надо сделать революционное решение и перестать тащить за собой "БАБУШКИН САКВОЯЖ", который и выбросить жалко, и пользы от него с гулькин нос. Что я имею в виду? Предлагаю отказаться от полной поддержки кодировки ANSI в проекте РУССКОГО ARDUINO. ПОСЕМУ ПРЕДЛАГАЮ ПЕРЕПИСАТЬ ТАБЛИЦУ СИМВОЛОВ ПОД ПОТРЕБИТЕЛЬСКИЕ НУЖДЫ МАСТЕРОВ ПО ЭЛЕКТРОНИКИ И ВЫКИНУТЬ ИЗ ЭТОЙ ТАБЛИЦЫ ВСЕ ЗАГЛАВНЫЕ АНГЛИЙСКИЕ БУКВЫ, ЗАМЕНИВ ИХ НА ВОСТРЕБОВАННЫЕ СПЕЦИАЛИЗИРОВАННЫЕ СИМВОЛЫ ДЛЯ ИНДИКАЦИИ ДАТЧИКОВ И ИСПОЛНИТЕЛЬНЫХ УСТРОЙСТВ СТАНДАРТНЫМИ СРЕДСТВАМИ ШРИФТА. Предлагаю оставить только малые английские буквы исключительно только для совместимости и интернет шилдами.
Скажите, Вы, как инженер, пытались применять в своих проектах ну, скажем, резьюу диаметром 3.6 мм?
Существует такое понятик как стандарт и отход от него (в отсутствие совершенно исключительных причин, а личные амбиции к таковым не относятся) практически однозначно ведет в тупик.
Что касается отказа от латинницы, то, насколько мне известно, именно таковыми и были предыдущие проекты по русификации дисплеев: количество символов сохрянялось постоянным (как наследие ASCII) - 95 штук, но начертание латинницы заменялось на начертание кириллицы. В принципе, подход, имеющий право на существование, но весьма осложняющий процесс программирования, что, на мой взгляд, существенно противоречит идеям проекта Arduino.
Данный проект отличается именно тем, что:
- совмещает в единой таблице символя кириллицы и латинницы и не требует переключений таблиц знакогенератора при переходе на латинницу и обратно,
- позволяет видеть буквы на экране в их привычном виде при стандартной настройке IDE Arduino.
Кроме того, с какой целью вообще отказываться от каких-то символов? Было 95, я добавил 80 с чем-то, даже до адресации одним байтом еще порядка 80 свободных номеров.
И потом, лично мне как-то особенно не нужна кириллица. А вот латинницей я активно пользуюсь. Ну просто карты так легли, что взялся за этот проект, который мне по сути не особо нужен.
И еще: в среде одна кодировка кириллицы, а в консоли - другая. А латинница совпадает. Так что при отладке в консоли все равно альтернаоивы использованию латинницы нет.
Еще, кстати, на днях обнаружил, что Processing не поддерживает киоиллицу даже в IDE.
Так что причин для отказа от латинницы IMHO нет. Никаких.
Вам нужны батарейкак, термопара, оеле, музыканту наверняка понадобятся ноты, водителю - дорожные знаки и т.д.
Все это хорошо, но почему для вывода пиктограмм нужно использовать именно оператор print, когда есть гораздо более подходящий drawBitmap? Вы же не собираетесь использовать длинные строки из символов батареек и реле? (кстати, в отличие от музыканта)
А если Вы запускали демонстрационный пример, то видели, что drawBitmap можно при желании применять даже для создании анимации.
Вот такое мое предложение. Жду ваших коментариев.
Не согласен.
Идея разработки хорошая. Концепция состоит в объединении двух шрифтов в согласии для простоты реализации двуязычного вывода на экран. Замечательная идея, преклоняюсь!
Но. Эта идея дает только некоторые преимущества, хоть и существенные, но они направлены для возможности, как говорил глобус, реализации проектов как англоязычным потребителям, так и русскоязычным потребителям. То есть и нашим и вашим. В этом подходе есть преимущества и недостатки. Да, существенно упрощается буквенный обмен, но скорость разработок существенно не меняется, так как надо каждый раз рисовать необходимые картинки, без возможности их масштабирования. Если же заменить ненужные в принципе для разработчика заглавные английские буквы наиболее распространенными символами, то процесс разработки существенно ускоряется, так как никто уже не тратит время на придумывание и реализацию картинного творчества.
Кроме того я несколько раз подчеркивал, что это революционное решение и направлено оно именно для развития РУССКОГО АНДРУИНО. Развитие же предполагает простоту и скорость програмной реализации идеи и несовместим с ппотерей времени на рисование необходимых символов и расчета координат их расположения на экране. Только вчера потерял два часа на реализацию на экране вида с символьно-графическим изображением в том представлении, в котором задумал. И сделал вывод - это крайне неудобно.
Вместо того, чтобы просто и быстро реализовать програмный код, тратишь время на оформление вида экрана. Потому считаю, что моя идея имеет право на жизнь как существенно увеличивающая скорость разработок библиотека. Тем более, что я изначально ориентирован на русский рынок сбыта и обслуживание англоязычного населения мне как-то без потребности.
Посему предложение. Чтобы глобус не считал меня халявщиком, я прошу вашего разрешения, как автора, воспользоваться вашей идеей и кодом, чтобы реализовать русскую буквенно символьную библиотеку кода ардуино, раз вы сами не хотите эти заниматься. Если позволите, то я переделаю ваш код под реализацию своей идеи, а время покажет правильность, или ошибочность моих предположений. Кстати, русский буквенно-символьный код может иметь не одну универсальную библиотеку, а набор библиотек, собранный в одно целое в зависимости от потребности специализации. Как то для автоматики, бытовой, для музыкантов, для производства, для рыбаков, для глобуса :)
а что в ардуино русского ты предлагаешь? если убрать латинские символы и в вместо них добавить русские? но от этого русским он не станет)))
а если в проекте нет дисплея? ну не нужен он там. проект автоматически становится забугорным?
ну тогда давайте и команды переписывать, и функции, да все ядро на русском, компилятор запилим, а то все же на английском
а что в ардуино русского ты предлагаешь? если убрать латинские символы и в вместо них добавить русские? но от этого русским он не станет)))
а если в проекте нет дисплея? ну не нужен он там. проект автоматически становится забугорным?
ну тогда давайте и команды переписывать, и функции, да все ядро на русском, компилятор запилим, а то все же на английском
Жень, дык это, цифры то АРАБСКИЕ остануться... че делать то?
а что делать тем у кого другие дисплеи? другие контролеры? они будут не русскими? как им жить дальше то?
Блин как будто нам было мало одного Клапауций...
точно. и от цифр придется отказаться)))
точно. и от цифр придется отказаться)))
во блин. что бы там сразу совсем русская была ардуина
а микропроцесоры из бересты вырезать... хотя блин береза и в северной америке растет некисло... что же делать? из чего производить процесоры?
Процессоры из святых мощей не проблема. Спасибо за таблицу перекодировки в церковн-словянские, но остается вопрос отображения шеснадцетиричных. Местные попы не знают, кадилом угрожают. Как 0xff по православному выводить?
Не согласен.
Идея разработки хорошая. Концепция состоит в объединении двух шрифтов в согласии для простоты реализации двуязычного вывода на экран. Замечательная идея, преклоняюсь!
Нет. Концепция состоит в создании библиотеки, которая строится на двух с половиной принципах:
"1". Ограниченная поддержка используемой в Arduino IDE кодировки utf-8 достаточная для русско-/украино-/белорусско-говорящего пользователя объеме.
"2". Компактность, т.е. минимум места занисаемого в оперативной и постоянной памати.
"Половинка". Учитывая весьма скромный размер дисплея, возможность писать шрифтом удвоенного размера с использованием существующего знакогенератора (с целью "2").
Сомнительное преимущество. "Картинное творчество" - один из способов придания законченному изделию индивидуальности.
И потом, я решительно не вижу никаких доводов в пользу упразднения латинницы. Лично мне, например, латинница нужна. Гораздо больше, чем кириллица. Тем более, ВСЕХ проблем предложенная библиотека не решает, например, добиться, чтобы в коде и консоли кириллические тексты выглядели одинаково, все равно не получится. Повторяю, я занялся кириллизацией шрифта по стечению обстоятельств: ждал посылки из Китая с заказанным набором деталей. И за это время обнаружил, что приемлемого решения для кириллизации имеющегося у меня дисплея нет. Причем, написать ее не сложно, проблема в том, что тому, кто способен ее написать, она не нужна, а кто испытывает в ней насущную необходимость (новички), написать ее не способны.
Но в любом случае - идее искоренения латинницы - мое твердое НЕТ.
Кстати, по-русски пишется "Ардуино". Не нужно пытаться скмбинировать эхотаг с моим ником. Мой ник никакого отношения к эхотагу не имеет - я под ним регистрируюсь на всех форумах.
Посему предложение. Чтобы глобус не считал меня халявщиком, я прошу вашего разрешения, как автора, воспользоваться вашей идеей и кодом, чтобы реализовать русскую буквенно символьную библиотеку кода ардуино, раз вы сами не хотите эти заниматься. Если позволите, то я переделаю ваш код под реализацию своей идеи, а время покажет правильность, или ошибочность моих предположений. Кстати, русский буквенно-символьный код может иметь не одну универсальную библиотеку, а набор библиотек, собранный в одно целое в зависимости от потребности специализации. Как то для автоматики, бытовой, для музыкантов, для производства, для рыбаков, для глобуса :)
Ну, мне, собственно, глубоко фиолетово кто и кем Вас будет считать. Нов Ваших словах я усматриваю рациональное зерно, правда, способ его воплощения мне видится несколько иным.
Привязывать пиктограммы к символам - решение, имеющее целый ряд отрицательных свойств:
1. Новичку трудно разобраться во взаимоотношении категорий "символ", "ко символа", "число". Если на это еще навесить отношение между символами и пиктограммами, он совершенно запутается. Поэтому лучше пусть выбирает пиктограммы не по коду символа, а по номеру - ему это будет понятнее.
2. На знакоместо у меня отводится 6 пикселов по ширине. А ширина символа в знакогенераторе - 5 пикселов (для экономии): один вертикальный ряд пикселов всегда оставтся пустым и разделяет символы между собой. Для пиктограммы, думаю, это неудобно.
3. Опять же, символ имеет фиксированный размер 5х8, а для пиктограммы может понадобиться большее, например, 8х8, 12х8 или 24х16. Нет смысла ограничивать ее размер форматом символа.
Поэтому я предлагаю следующее решение.
Я усовершенствую drawBitmap, чтобы она могла работать не только с отдельными картинками, но и с целыми библиотеками картинок одинакового размера, будь то набор пиктограмм или несколько кадров анимации для одного (или нескольких) объектов.
Мы с Вами согласовываем формат библиотеки. И Вы занимаетесь уже только библиотеками пиктограмм.
Каждый делает свою работу и все довольны.
Вопрос резонный.
Но вспомните собственную дату регистрации на форуме и посмотрите на мою - это я еще зарегистрировался за несколько дней до покупки первого контроллера.
Так что я пока не представляю всего разнообразия моделей Ардуино (и родственных проектов) и особенностей их взаимодействия с периферией. Да и в ближайшее время не стремлюсь разобраться - мне бы с Uno освоиться... Знаю только, что особенности есть (если судить по коду просмотренных мною библиотек).
Аналогично с многообразием используемых а Ардуино-проектах дисплеев. Мне OLED понравился тем, что безусловно контрастный и жрет мало электричества. Разбираться с другими начну не раньше, чем они мне понадобятся (хотя пара формата 16х2 символов в запасе имеется).
Но если кому надо - готов оказать содействие.
Вопрос резонный.
это был риторический вопрос... боюсь что все многообразие дисплеев и контролеров. а так же вариантов их сборки. устанете перелопачивать. тем более за просто так ( тоесть даром). дело не благодарное и сильно безсмысленное.
Я же написал: "Разбираться с другими начну не раньше, чем они мне понадобятся".
Вот в этом как раз и проблема. Большинство ( ака товарищ просящий прибить латиницу), не впиливают что все библиотеки, шрифты и железо, сделаны для решения вопросов разработчика. И в большинстве случаев представляет из себя набор костыликов который хоть как то но работает и решает узко поставленую задачу.. И что никто не собираеться перерабатывать эту кучу костыликов что бы кому то там еще стало приятно... :)
Согласен.
Давайте подумаем как это сделать. Только вот с масшабированием и форматом 5х8, или 6х9 иконок я бы подумал. Хоть они и масипусинькие, но если испоьлзовать их как колонтиум с последующим увеличением в два раза, то будет стильно. И еще вопрос, можно увеличить шрифт в четыре раза? Этакий SyperBig? Это даст еще больший прирост творчества. :)
Вот в этом как раз и проблема. Большинство ( ака товарищ просящий прибить латиницу)
Тамбовский волк тебе товарищъ. Даже не сомневаюсь, что у тебя, деревня все работает через кол да бревно. Лично у меня все шепчет как швейцарские часики. Видно, что у тебя опыта маловато и способностей никаких для творчества, потому ты и отираешься на форумах для подбирания чужих идей и кодов.
Вот в этом как раз и проблема. Большинство ( ака товарищ просящий прибить латиницу)
Тамбовский волк тебе товарищъ. Даже не сомневаюсь, что у тебя, деревня все работает через кол да бревно. Лично у меня все шепчет как швейцарские часики. Видно, что у тебя опыта маловато и способностей никаких для творчества, потому ты и отираешься на форумах для подбирания чужих идей и кодов.
и что же вы не поделились с сообществом своим шепотом швейцарских часиков? Где оно? где ваши библиотеки разработаные с нуля?
Вот в этом как раз и проблема. Большинство ( ака товарищ просящий прибить латиницу)
Тамбовский волк тебе товарищъ. Даже не сомневаюсь, что у тебя, деревня все работает через кол да бревно. Лично у меня все шепчет как швейцарские часики. Видно, что у тебя опыта маловато и способностей никаких для творчества, потому ты и отираешься на форумах для подбирания чужих идей и кодов.
и что же вы не поделились с сообществом своим шепотом швейцарских часиков? Где оно? где ваши библиотеки разработаные с нуля?
Я же говорил. Пасется деревня на халяву. А сам то всех халявщиками обзывает, халявщик.
Сходите в наш деревенский проект и попробуйте найти в нем что нибудь с форума.
http://arduino.ru/forum/proekty/vklyuchatel-vyklyuchatel-s-mozgom-i-orga...
Согласен.
Давайте подумаем как это сделать. Только вот с масшабированием и форматом 5х8, или 6х9 иконок я бы подумал. Хоть они и масипусинькие, но если испоьлзовать их как колонтиум с последующим увеличением в два раза, то будет стильно. И еще вопрос, можно увеличить шрифт в четыре раза? Этакий SyperBig? Это даст еще больший прирост творчества. :)
Иконок 6х9 в данном проекте не будет никогда. Т.к. для этого необходим экранный буфер, что явно противоречит идее минимизации расхода оперативной памяти.
Поэтому все вертикальные размеры кратны 8.
Идея масштабировать иконки мне как-то не нравится. Смволов - около 170, используешь ты их или нет, они занимают чуть меньше Кбайта, а если использовать "родной" шрифт 12х16, это потянет килобайта на 3.5. А иконок в проекте от 0 до ... ну, максимум, десятка. Ну пойдет на все про все 1/4 Кбайта - зато края будут не зазубренные.
Шрифт в принципе можно увеличить и в 4 и в 8 раз. В первом случае будет 2 строки по 5 символов, во втором - 2 символа на весь экран. Оно кому-то надо?
В принципе, можно было бы написать универсальную процедуру, масштабирующую фонт в заданное количество раз, но... сейчас в библиотеке строка удвоенного шрифта выводится не посимвольно, а сначала вся верхняя половина строки, а потом - вся нижняя. Сделано это с точки зрения оптимизации по времени. Даже при работе I2C на частоте 400 КГц заполнение экрана при условии оптимального программирования занимает примерно 120 мс. Если допускать неоптимальность - время возрастает в 3-4 раза. Каждая из половин строки выводится своей процедурой. Если строка будет делиться по вертикали на 4 части, это усложнит логику работы, увеличит объем кода... да и степень угловатости шрифта превысит разумные пределы.
В общем, ничего бесплатного не бывает. Особенно в системах со столь ограниченным объемом памяти. Поэтому я думаю, что попытка "повысить универсальность", вероятнее всего, пойдет во вред.
Во всем необходимо соблюдать баланс. Правда, сам баланс может быть разным, особенно для двух разных классов проектов:
- проекты, в которых основная задача - что-то показать пользователю, а экран является центральным прибором,
- проекты, в которых основная роль выполняется моторами, приводами, датчиками, а экран играет роль лишь вспомогательного индикатора.
Так вот, моя библиотека сбалансирована именно для второго типа задач.
Здравствуйте! andriano. Собрал вашу библу, и попробывал в своем проекте. Пользорватся действительно удобнее но возникла сложность...
Суть в этом кусочке кода.
Не компилируется когда вывожу на дисплей потому как ругается на невозможность конвертации типов.
Хотя с библиотекой adafruit_gfx работает без проблем. Но в ней нет русского...
Так вот у меня вопрос, возможно ли добавить возможность работать к BYTE как со STRING?
Прошу сильно не пинать я новичек в этом деле...
как временный костыль:
Недавно получил SSD1306(OLED 128x64) - подключил, залил - работает.
Аналогично. Только либа OLED_I2C - чёто с чемто! отжирает 1к RAM под буфер, запрещает прерывания, и содержит кучу лишнего кода, например поддерживая програмный и аппаратный i2c в одной сборке.
Пришлось переписать, попутно разделив на два класса.
Один дает вывод текста без графики и буферов. Разные шрифты и масштабирование. По вертикали выравнивание текста постраничное.
Второй графика с использованием буфера только во время работы с канвой, при этом канва не весь экран, а заданый прямоугольник. Позиции прямоугольника по вертикали тоже привязаны к страничкам. В общем сделал учитывая аппаратные особенности. Ну и битмапы напрямую из PGM.
Ещё скролинг прилепить интересно.
а причем тут либа OLED_I2C? У andriano вроде либа зовется ASOLED.
см. вторую сылку стартоврго поста.
Кириллица на дисплее или что я делаю не так?
Честно говоря, мне самому кириллица как-то без особой надобности.
Но, почему-то, на форуме вокруг нее творятся страшные вещи.
Например, по ссылкам:
http://lesson.iarduino.ru/page/urok-8-russkiy-yazyk-na-oled-displee-128x64/
http://arduino-project.net/russkie-ukrainskie-shrifty-oled-i2c/
предлагают использовать ее следующим образом.
Допустим, все библиотеки, шрифты и т.п. скачаны и установлены, переходим к программированию.
Скажем, нужно вывести на экран фразу "Моя Arduino сгорела.". Оказывается, что просто так это сделать нельзя. Следует:
- установить русский фонт,
- вывести "Моя " с нужного места экрана,
- теперь переключить фонт на английский,
- посчитать, сколько символов занимает первая надпись,
- вывести строку с учетом указанного смещения,
- вывести строку "Arduino ",
- снова переключить фонт - обратно на русский,
- снова посчитать смещение,
- вывести "сгорела."
Мало того, при наборе строк "Моя " и "сгорела." нужно переключить клавиатуру в латинскую раскладку, но набирать, глядя на русские надписи на клавиатуре.
Что при этом будет на экране - сложно представить.
А чтобы потом самому не запутаться в коде, рекомендуется дублировать надписи в комментариях - теперь уже в нормальной кодировке.
То есть это должно выглядеть примерно так:
Я лично делаю так:
и получаю на экране:
При этом моя IDE, как и положено, работает в utf-8.
Что я делаю неправильно?
Все гараздо проще. Идем в настройки IDE arduino, меняем значение "preproc.substitute_unicode=false", сохраняем. Потом создаем файл фонт на 255 символов беря за основу таблицу windows cir. Пользуемся. Любят русские люди создавать себе проблеммы. А все гараздо проще. у меня так работает с библиотекой для tft от adafruit.
Все гараздо проще. Идем в настройки IDE arduino, меняем значение "preproc.substitute_unicode=false", сохраняем. Потом создаем файл фонт на 255 символов беря за основу таблицу windows cir. Пользуемся. Любят русские люди создавать себе проблеммы. А все гараздо проще. у меня так работает с библиотекой для tft от adafruit.
Похоже не все там так просто. И не от библиотеки зависит.
Вы имеете в виду файл ..\arduino-ххх\lib\preferences.txt и строки в нем должны выглядеть так
# auto-convert non-ascii chars to unicode escape sequences
preproc.substitute_unicode = false
Я и ранее пробовал так делать, и сейчас попробовал ещё раз. Не помогает.
Строка в скетче TestOLED выглядит
myOLED.drawString(1,1,"П",2);
в файле TestOLED.cpp после преобразования
myOLED.drawString(1,1,"\u041f",2);
Как видим опция не отключилась и символ конвертировался. IDE перезапускал конечно.
И на экране получаетсядва символа вида "Pf"
На какой версии у Вас работает? Я пробовал на версии 1.0.6.
Сам решил проблему так. Делаю файл, например resorce.inc, в него пишу в блокноте в кодировке Windows типа #define RUS_TEXT "краказябры! ". В скетче #include "resorce.inc" и может потребоватся путь указать. В нужном месте myOLED.drawString(5,7,RUS_TEXT,0); Все нормалек, до "resorce.inc" препроцессор не дотягивается.
Возможно вы вносите изменеия в файл preferences не выходя из IDE arduino. В таком случае изменения не сохраняются. Если у вас контролер tft из списка поддерживаемых библиотекой adafruit, скачайте у меня библиотеку и файл фонт http://178.130.34.198/adafruit
Все гараздо проще. Идем в настройки IDE arduino, меняем значение "preproc.substitute_unicode=false", сохраняем. Потом создаем файл фонт на 255 символов беря за основу таблицу windows cir. Пользуемся. Любят русские люди создавать себе проблеммы. А все гараздо проще. у меня так работает с библиотекой для tft от adafruit.
Да, скажу более: такой путь является более экономным по используемой памяти. Но мне кажется, это - не для новичка. Менять настройки IDE (причем не из самой IDE, а править конфигурационный файл), терять совместимость с уже имеющимися скетчами ... Ну а для "не новичка", сам вопрос необходимости кириллицы вызывает некоторый сомнения.
В общем, для меня вопрос стоял только так: "с неизменными настройками IDE".
Возможно вы вносите изменеия в файл preferences не выходя из IDE arduino. В таком случае изменения не сохраняются.
PS. Да, я тут пока отлаживал обмен по I2C между двумя Arduino, выяснил, что я все-таки реализовал не самый быстрый способ вывода на экран. Так что, когда дойдут руки, попытаюсь заметно ускорить вывод текста.
Все гараздо проще. Идем в настройки IDE arduino, меняем значение "preproc.substitute_unicode=false", сохраняем. Потом создаем файл фонт на 255 символов беря за основу таблицу windows cir. Пользуемся. Любят русские люди создавать себе проблеммы. А все гараздо проще. у меня так работает с библиотекой для tft от adafruit.
Да, скажу более: такой путь является более экономным по используемой памяти. Но мне кажется, это - не для новичка. Менять настройки IDE (причем не из самой IDE, а править конфигурационный файл), терять совместимость с уже имеющимися скетчами ... Ну а для "не новичка", сам вопрос необходимости кириллицы вызывает некоторый сомнения.
В общем, для меня вопрос стоял только так: "с неизменными настройками IDE".
Возможно вы вносите изменеия в файл preferences не выходя из IDE arduino. В таком случае изменения не сохраняются.
PS. Да, я тут пока отлаживал обмен по I2C между двумя Arduino, выяснил, что я все-таки реализовал не самый быстрый способ вывода на экран. Так что, когда дойдут руки, попытаюсь заметно ускорить вывод текста.
Менять настройки IDE можно и не выходя, а вот сохранять только выйдя из IDE. Предлогаемая настройка среды разработки подразумевает только допустимость использовать стандартный набор ACII кодировки, т.е. беззнаковое 255 символов таблица. На скетчи, их содержимое и компиляцию воздействия не производит.
PS. Кстати, "стандартный набор ACII кодировки" - это 128 символов (из которых 33 служебных), а не 255.
Посмотрти вот эту статью по руссификации
http://robocraft.ru/blog/892.html .
Посмотрти вот эту статью по руссификации
http://robocraft.ru/blog/892.html .
Ошибка: 404
К сожалению, такой страницы не существует. Вероятно, она была удалена с сервера, либо ее здесь никогда не было.
Вернуться назад, перейти на главную