Как русифицировать дисплей ардуино

Обновлено: 30.06.2024

В качестве примера подключим дисплей к управляющей плате Arduino Uno.

Подключение к Arduino

Вывод Обозначение Пин Arduino Uno
1 GND GND
2 VCC 5V
3 VO GND
4 RS 11
5 R/W GND
6 E 12
7 DB0
8 DB1
9 DB2
10 DB3
11 DB4 5
12 DB5 4
13 DB6 3
14 DB7 2
15 VCC 5V
16 GND GND

Для упрощения работы с LCD-дисплеем используйте встроенную библиотеку Liquid Crystal. В ней вы найдёте примеры кода с подробными комментариями.

Вывод текста

Для вывода первой программы приветствия, воспользуйтесь кодом вроде этого:

Кириллица

Существует два способа вывода кириллицы на текстовые дисплеи:

Рассмотрим оба способа более подробно.

Таблица знакогенератора

Дисплейный модуль хранит в памяти две страницы знакогенератора, которые состоят из различных символов и букв.

Для вывода символа на дисплей необходимо передать его номер в шестнадцатеричной системе из таблицы знакогенератора.

Вы можете смешивать в одной строке обычные символы и явные коды как угодно. Единственный нюанс в том, что после того, как компилятор в строке видит последовательность \x , он считывает за ним все символы, которые могут являться разрядами шестнадцатеричной системы даже если их больше двух. Из-за этого нельзя использовать символы из диапазона 0-9 и A-F следом за двузначным кодом символа, иначе на дисплее отобразится неправильная информация. Чтобы обойти этот момент, можно использовать тот факт, что две записанные рядом строки склеиваются.

Сравните две строки кода для вывода надписи «Яeee»:

Переключение страниц знакогенератора

Дисплейный модуль хранит в памяти две страницы знакогенератора. По умолчанию установлена нулевая страница. Для переключения между страницами используйте методы:

Дисплей не может одновременно отображать символы разных страниц.

Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.

Полную таблицу символов с кодами можно найти в документации к экрану.

Использование библиотеки LiquidCrystalRus

Совсем не обязательно мучатся со знакогенератором, чтобы вывести русский символ. Для решения проблемы скачайте и установите библиотеку LiquidCrystalRus.

Это копия оригинальной библиотеки LiquidCrystal с добавлением русского языка. Добавленный в библиотеку код трансформирует русские символы UTF8 в правильные коды для текстового экрана.

В качестве примера выведем фразу «Привет от Амперки» на дисплей.

Примеры работы для Espruino

В качестве примера подключим дисплей к управляющей плате Iskra JS.

Подключение к Iskra JS

Вывод Обозначение Пин Iskra JS
1 GND GND
2 VCC 5V
3 VO GND
4 RS P11
5 R/W GND
6 E P12
7 DB0
8 DB1
9 DB2
10 DB3
11 DB4 P5
12 DB5 P4
13 DB6 P3
14 DB7 P2
15 VCC 5V
16 GND GND

Для работы с LCD-дисплеем из среды Espruino существует библиотека HD44780.

Вывод текста

Для вывода программы приветствия, воспользуйтесь скриптом:

Кирилица

Вывод кирилицы на дисплей с помощью платформы Iskra JS доступен через встроенную в дисплей таблицу знакогенератора.

Таблица знакогенератора

Дисплейный модуль хранит в памяти две страницы знакогенератора, которые состоят из различных символов и букв.

Для вывода символа на дисплей необходимо передать его номер в шестнадцатеричной системе из таблицы знакогенератора.

Вы можете смешивать в одной строке обычные символы и явные коды как угодно. Единственный нюанс в том, что после того, как компилятор в строке видит последовательность \x , он считывает за ним все символы, которые могут являться разрядами шестнадцатеричной системы даже если их больше двух. Из-за этого нельзя использовать символы из диапазона 0–9 и A–F следом за двузначным кодом символа, иначе на дисплее отобразится неправильная информация. Чтобы обойти этот момент, можно использовать тот факт, что две строки записанные рядом склеиваются.

Сравните две строки кода для вывода надписи «Яeee»:

Переключение страниц знакогенератора

Дисплейный модуль хранит в памяти две страницы знакогенератора. По умолчанию установлена нулевая страница. Для переключения между страницами используйте методы:

Дисплей не может одновременно отображать символы разных страниц.

Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.

Полную таблицу символов с кодами можно найти в документации к экрану.

Комнатный термометр

Дисплей удобен для отображения показаний модулей и сенсоров. Сделаем задатки «Умного Дома», а именно «комнатный термометр».

Вы могли наблюдать, что в предыдущих уроках №7 и №8 уже использовался Русский шрифт. В этом уроке мы разберём некоторые проблемные моменты с которыми можно столкнуться при выводе Русских букв на OLED дисплей.

Нам понадобится:

Для реализации проекта нам необходимо установить библиотеки:

    (текстовая) - для вывода текста и цифр на OLED дисплеи.
  • Дополнительно можно установить библиотеку iarduino_OLED (графическая), но в данном уроке она использоваться не будет.
    Графическая библиотека поддерживает все функции текстовой и имеет дополнительные функции для работы с изображениями и графикой, но при этом она занимает больше памяти, как оперативной, так и памяти программ.

О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki - Установка библиотек в Arduino IDE.

Схема подключения:

Вывод Назначение OLED дисплей Arduino UNO
SCL Линия тактирования шины I2C SCL A5
SDA Линия данных шины I2C SDA A4
Vcc Питание (3,3 или 5 В) Vcc 5V
GND Общий GND GND

Подключение OLED дисплея к Arduino UNO по шине I2C

Код программы:

Алгоритм работы программы:

В коде setup() происходит инициализация дисплея (подготовка дисплея к работе) и подключение шрифта «SmallFontRus» (в библиотеке имеется несколько предустановленных шрифтов, которые подключаются перед использованием). Со списком шрифтов и описанием всех функций библиотек iarduino_OLED и iarduino_OLED_txt, можно ознакомиться в разделе Wiki - OLED экран 128×64 / 0,96” .

Код loop() разбит на 4 части. Каждая часть начинается с очистки экрана функцией clrScr(), после чего следуют несколько функций print() для вывода текста или чисел на экран дисплея. Все части выполняются друг за другом с 3 секундной задержкой выполняемой функциями delay().

В результате на дисплее поочерёдно будут появляться: большие буквы (включая Русские), маленькие буквы (включая Русские) , символы и цифры .

Проблемы при выводе Русских букв:

Кодировка:

Первая и основная проблема это кодировка в которой скетч передаётся компилятору. Разные версии Arduino IDE хранят скетч в различных кодировках. Даже последняя версия Arduino IDE 1.8.5 (на момент написания данного урока) для ОС Windows, передаёт компилятору скетч в кодировке UTF-8 (если скетч был сохранён в файл *.ino) или в кодировке Windows-1251 (если скетч не был сохранён). Но ни скетч, ни библиотеки используемые в нём, не знают в какой кодировке они будут переданы компилятору. Вот и получается что один и тот же скетч, оперируя Русскими буквами, может работать по разному.

Что такое кодировка?
Компьютер, как и контроллер (в т.ч. Arduino) хранит, получает и передаёт данные в виде 1 и 0. Из набора 1 и 0 можно точно составить числа, но нельзя однозначно составить буквы. Кодировка это представление букв числами (по их порядковому номеру), которыми уже может оперировать компьютер или контроллер. Например, «А» - 1, «Б» - 2, «В» - 3 и т.д., тогда слово «ПРИВЕТ» можно передать, принять или сохранить, как набор чисел: 17,18,10,3,6,20. Так как буквы можно располагать по разному (сначала символы или числа, или буквы другого языка и т.д.), то и порядковые номера (числа) у букв будут разные, вот и получилось, что придумано множество кодировок. Исторически сложилось что Латинские буквы имеют одинаковые порядковые номера в большинстве кодировок: «A». «Z» = 65. 90, «a». «z» = 97. 122, а Кириллические буквы не только имеют различные номера, но могут быть разбросаны, или вообще отсутствуют в кодировках.

В библиотеках iarduino_OLED и iarduino_OLED_txt, мы предусмотрели функцию setCoding (), которая может принимать в качестве единственного аргумента, одно из значений: TXT_UTF8, TXT_CP866, TXT_WIN1251, определяющее текущую кодировку скетча. Эта функция закомментирована в 3 строке кода setup программы данного урока. Если Русский текст на дисплее отображается некорректно, то раскомментируйте строку с функцией setCoding и замените параметр TXT_UTF8, на TXT_CP866 или TXT_WIN1251. В большинстве случаев это решит проблему кодировок.

Если функция setCoding () Вам не помогла, тогда вызовите функцию setCoding () с параметром false, а Русские буквы указывайте их кодом, как это показано в следующем разделе данного урока: «Недостаточно памяти ». При желании укажите в комментариях к уроку свою версию ОС, версию Arduino IDE и какую кодировку использует Ваша Arduino IDE (если Вы не знаете какую кодировку использует Arduino IDE, то напишите какие символы отображаются на дисплее вместо строчных и прописных Русских букв). Мы постараемся добавить Вашу кодировку в библиотеки.

Недостаточно оперативной памяти:

Вторая, но не менее важная проблема заключается в том, что строки занимают много оперативной памяти. Каждая буква строки занимает минимум 1 байт. Особенно актуальна эта проблема при создании различных пунктов меню.

Наиболее эффективным решением данной проблемы является хранение строк не в области оперативной памяти, а в области памяти программ, так как объем памяти программ гораздо больше. Для этого указывайте строки в качестве аргумента функции F(). Строки указанные таким образом будут храниться в области памяти программ:

Недостаточно оперативной памяти или памяти программ:

Если Вы работаете со строками на Русском языке в Arduino IDE, которая хранит скетч в кодировке UTF-8. Вы уже храните строки в области памяти программ (или оставили строки в области оперативной памяти). Вы все равно можете освободить до половины памяти занимаемой строками!

Дело в том, что в кодировке UTF-8 каждая Русская буква занимает целых 2 байта. Если указывать Русские символы кодом в той кодировке, где они занимают 1 байт, можно освободить половину памяти занимаемой строками, вне зависимости от того, в каком типе памяти они хранятся.

Символы в шрифтах для библиотек iarduino_OLED и iarduino_OLED_txt располагаются в соответствии с кодировкой CP866, значит хранить и выводить Ваши строки на экран дисплея можно в этой кодировке:

Как указывать символ или букву по его коду в строках скетчей?
Для начала нужно узнать коды всех символов той кодировки, в которой Вы желаете их указывать, таблицы символов различных кодировок можно найти в интернете. Для кодировки CP866, Русские символы имеют следующие коды:

А 128
\200
И 136
\210
Р 144
\220
Ш 152
\230
а 160
\240
и 168
\250
р 224
\340
ш 232
\350
Ё 240
\360
Б 129
\201
Й 137
\211
С 145
\221
Щ 153
\231
б 161
\241
й 169
\251
с 225
\341
щ 233
\351
ё 241
\361
В 130
\202
К 138
\212
Т 146
\222
Ъ 154
\232
в 162
\242
к 170
\252
т 226
\342
ъ 234
\352

242
\362
Г 131
\203
Л 139
\213
У 147
\223
Ы 155
\233
г 163
\243
л 171
\253
у 227
\343
ы 235
\353

243
\363
Д 132
\204
П 140
\214
Ф 148
\224
Ь 156
\234
д 164
\244
м 172
\254
ф 228
\344
ь 236
\354

244
\364
Е 133
\205
Н 141
\215
Х 149
\225
Э 157
\235
е 165
\245
н 173
\255
х 229
\345
э 237
\355

245
\365
Ж 134
\206
О 142
\216
Ц 150
\226
Ю 158
\236
ж 166
\246
о 174
\256
ц 230
\346
ю 238
\356

246
\366
З 135
\207
П 143
\217
Ч 151
\227
Я 159
\237
з 167
\247
п 175
\257
ч 231
\347
я 239
\357

247
\367

Но если Вы желаете научиться быстро переводить числа между системами счисления 2, 4, 8, 10, 16, без калькулятора, то посмотрите Урок 32 - перевод чисел между системами счисления .

Русификация библиотеки Adafruit-GFX и вывод русских букв на дисплей в кодировке UTF-8 из Arduino IDE

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Русификация библиотеки Adafruit-GFX и вывод русских букв на дисплей в кодировке UTF-8 из Arduino IDE

При этом русские буквы вводятся стандартным способом через русскую клавиатуру и отображаются в Arduino IDE как русские символы.

Функция utf8rus() получает исходную строку, символы с кодами 0x00-0xBF пропускает без изменения в выходную строку, а в оставшихся кодах отбирает русские буквы и перекодирует их.

Применять ее можно внутри команд печати строк:
display.println(utf8rus("Тест"));

Саму функцию можно добавить в скетч, либо в виде отдельного файла положить в каталог скетча (как и сделано в примере).

В архиве utf8rus.zip прилагаются:
- файл glcdfont.c с русскими буквами для замены в Adafruit-GFX;
- пример OledRusTest для демонстрации русских (и других) символов и работы функции utf8rus();
- пример OledSymbolTest для демонстрации использования динамических символов.
Обращаю внимание в примерах на то, что мой дисплей подключается через SPI.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

В примере OledRusTest первые два экрана отображают все символы, которые заложены в glcdfont.c
На первом экране стандартная ASCII-кодировка. Не отображаются символы 0x0A (воспринимается как перевод строки) и 0x0D (игнорируется), поэтому вместо них выводятся пробелы.


На втором экране русские буквы, другие символы из кодировки Windows-1251 и дополнительные символы для дисплея.
Так как в glcdfont.c нашлись свободные места, добавил туда цифры для указания степени числа и некоторые символы для динамических эффектов.


Третий и четвертый экраны отображаются с использованием utf8rus()



  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

При выборе динамических символов для примера OledSymbolTest руководствовался картинкой экрана MP3-плеера.


Получилось 7 динамических объектов и несколько статичных картинок.


Разумеется, все символы можно нарисовать на дисплее графическим путем, но буквенные символы должны занимать меньше памяти в контроллере.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Ещё в примере для библиотеки Adafruit-SSD1306 заменил звезду на снежинку:

Падающие снежинки выглядят намного лучше, чем падающие звезды.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Gippopotam аватар


  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

А можно как то переделать шрифт для библиотек Adafruit_ST7735 и Adafruit-GFX. Хотелось писать на русском в проекте. Дисплей 1.8 TFT. Подключение к Nano Pro Mini по SPI.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

А можно как то переделать шрифт для библиотек Adafruit_ST7735 и Adafruit-GFX. Хотелось писать на русском в проекте. Дисплей 1.8 TFT. Подключение к Nano Pro Mini по SPI.

Библиотека Adafruit_ST7735 для вывода шрифта использует библиотеку Adafruit-GFX , а в ней для вывода русских букв нужно заменить файл glcdfont.c, который (с примерами) прилагается выше.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Пробовал, но как только в программе вводишь русские символы, на экране они занимают 2 знакоместа или 2 байта, не знаю как правильно объяснить.

Во второй строчке экрана, набраны буквы "АБВГД". Вот что он отображает, перед каждой буквой какой то значок. Букву "А" перерисовал в редакторе, отображается правильно. Остальные не трогал.


  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Для того, чтобы русские буквы нормально выводились, нужно использовать функцию utf8rus(). Она есть в архиве и в примере показано как она работает.

Судя по фотографии, файл glcdfont.c не заменён, то есть русских букв в Adafruit-GFX нет.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Я вставлял ваш файл glcdfont.c, но вот воспользоваться функцией utf8rus() не получается, при компиляции скетча выдается ошибка на эту строчку. Возможно я что то не так делаю.

tft.println( utf8rus( "АБВГД")); пытался вот так ее использовать

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Я вставлял ваш файл glcdfont.c, но вот воспользоваться функцией utf8rus() не получается, при компиляции скетча выдается ошибка на эту строчку. Возможно я что то не так делаю.

Какую ошибку выдаёт компилятор?

Если на отсутствие функции, то скорее всего функция не добавлена к скетчу. Как добавить функцию описано в первом посте данной темы.

Саму функцию можно добавить в скетч, либо в виде отдельного файла положить в каталог скетча (как и сделано в примере).

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

preproc.substitute_unicode=false в преференсах IDE, добавить win1251 шрифты в glcdfont.c и везде по русски, проверял на 5110 экране.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Ну что ж. Спасибо, разобрался через несколько часов проб и ошибок. Все получилось, только пришлось немного переписать код. Отличия минимальны, поменял пару адресов:

Ну и соответственно сделал ее библиотекой. Русифицированный файл glcdfont.c оставил от arduinec

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Ну что ж. Спасибо, разобрался через несколько часов проб и ошибок. Все получилось, только пришлось немного переписать код. Отличия минимальны, поменял пару адресов:

Ну и соответственно сделал ее библиотекой. Русифицированный файл glcdfont.c оставил от arduinec

Отличия, вероятнее всего, связаны с тем, что в старой библиотеке Adafruit-GFX в шрифте файла glcdfont.c было 255 символов - отсутствовал символ B0 (=176). В новой же библиотеке и моём файле glcdfont.c там 256 символов.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Arduinec, я вот только так и не понял, куда в знакогенераторе спряталась маленькая "я". Получилось как в том анекдоте: "Ты суслика видишь. ")))

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Небольшие изменения для новой версии библиотеки Adafruit-GFX

Для того, чтобы в новой библиотеке символ 0xB0 (=176) отображался (в кодировке Windows-1251 ему соответствует символ градуса) нужно в начале скетча (после инициализации дисплея) применить функцию cp437() с аргументом true:
display.cp437(true);

Функция utf8rus() для перекодирования русского шрифта остаётся без изменения.
Применять функцию можно внутри команд печати строк:
display.println(utf8rus("Тест"));

Инструкция по русификации Adafruit-GFX остаётся прежней:
- скачиваем архив utf8rus2.zip по приведённой ниже ссылке;
- заменяем файл glcdfont.c в Adafruit-GFX;
- функцию utf8rus() добавляем в скетч, или в виде отдельного файла utf8rus.ino копируем в каталог скетча (как и сделано в примере);
- смотрим примеры OledRusTest и OledSymbolTest (фотографии к ним остались прежними).

P.S. Для старой версии библиотеки Adafruit-GFX нормально работает вариант из первого поста данной темы.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Arduinec, я вот только так и не понял, куда в знакогенераторе спряталась маленькая "я". Получилось как в том анекдоте: "Ты суслика видишь. ")))

Надеюсь вышеприведенные изменения решат все проблемы с отображением русских букв и других символов.

Маленькая "я" в кодировке Windows-1251 (и у меня в файле) имеет код 0xFF (=255).

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

А у меня та же проблема на таком же 1.8 дисплее маленькая "з" нету

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Вернее не нету, а вместо нее маленькая "х"

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

А у меня та же проблема на таком же 1.8 дисплее маленькая "з" нету
Вернее не нету, а вместо нее маленькая "х"

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Сделал все кроме

display.cp437(true);

выдавала ошибку изменил tft.cp437(true);

начали крокозяблы вместо слов писать, потом убрал эту строку и о чудо маленькая з появилась сама по себе о_О ниче не понятно) мож я сам в начале протупил

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Ну что ж. Спасибо, разобрался через несколько часов проб и ошибок. Все получилось, только пришлось немного переписать код. Отличия минимальны, поменял пару адресов:

Ну и соответственно сделал ее библиотекой. Русифицированный файл glcdfont.c оставил от arduinec

Спасибо без Вас пришлось бы писать латиницей.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Спасибо за ваши труды.

Ваша последняя модификация utf8rus2 работает, но с символом " °" - "B0" у меня есть проблема.

Если его скопировать из Word, то на экране от всегда отображается как "В °".

как единственный символ " °" получилось вставить как "/xB0".

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Ваша последняя модификация utf8rus2 работает, но с символом " °" - "B0" у меня есть проблема.

Если его скопировать из Word, то на экране от всегда отображается как "В °".

как единственный символ " °" получилось вставить как "/xB0".

В Word этот символ возможно имеет другой код (не проверял).

В Си для нестандартных символов можно использовать комбинацию "\xNN", где NN - шестнадцатиричный код символа. При этом их можно комбинировать с обычными символами.

Например: 19 градусов Цельсия = "19\xB0C".

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

arduinec, хочу поблагодарить за тему, все получилось с дисплеем 2.2 дюйма на LI9341, и даже символ градуса )) со второй попытки, да )

но, если можно, объясните на пальцах, или отправьте что почитать, о том как вы создавали русские символы, и дополнительные тоже, как помещали и вместо чего в файл glcdfont.c

необходимы свои спец символы

я понимаю, что нужно, грубо, символ зарисовать на поле определенного размера попиксельно, потом высчитать строки и поместить в файл, верно? но как это делать не представляю, сам не программист, увлекся контроллерами недавно

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

но, если можно, объясните на пальцах, или отправьте что почитать, о том как вы создавали русские символы, и дополнительные тоже, как помещали и вместо чего в файл glcdfont.c

необходимы свои спец символы

Прошу прощения за задержку с ответом (проходил обследование в больнице).

Есть какие-то программы, которые позволяют шрифты рисовать. Мне было проще написать программку на Си, которая позволила изменить шрифты.

Ниже скетч, который преобразует коды символа Й в визуальный формат и обратно:

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Для изменения шрифтов я использовал программу FontEditor. С ее помощью открываешь файл glcdfont.c и можно его подредактировать

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

спасибо за ответ, по скетчу понятно, только не понятно куда именно в файл glcdfont.c полученый кусок в хексе поместить, подозреваю, что можно просто бегло просмотрев найти именно свой символ и его заменить ))

но в проекте решил не заморачиваться с этим, просто научился выводить рисунок на дисплей, создавать символ какого либо процесса и на нужное место помещать, так наверное будет даже лучше.


но все равно спасибо, возможно и передумаю и вернусь обратно к символам в самом фонте..

и еще, выздоравливайте )

Skayl ,я не смог найти редактор о котором вы говорили )

и еще по картинке можно догадаться что я тут пытаюсь построить ))

очередной огород на кухню ))

первый вариант честно отработал пол года, использовал ардуино уно и дисплей на примере которого в этой теме показана руссификация библиотеки. теперь хотелось бы добавить немного информативности, русский язык, изменить немного досветку (увеличить количество света), сам полив..

в общем пока бодаюсь с новым оборудованием, сейчас уперся в картридер sd карты, который на платке дисплея бонусом, не получается запустить пока, пытаюсь разобраться с интерфейсом SPI

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

извиняюсь за кривую фотку, на форуме только зарегистрировался

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

только не понятно куда именно в файл glcdfont.c полученый кусок в хексе поместить, подозреваю, что можно просто бегло просмотрев найти именно свой символ и его заменить

Для примера используем ту же букву Й:

В кодировке Windows-1251 код символа Й = 0xC9, в десятичной системе = 201. В файле glcdfont.c (из архива utf8rus2.zip) массив символов начинается со строки 16. Сложив 16 и 201 получаем, что символ Й находится в строке 217.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

.. Сложив 16 и 201 получаем, что символ Й находится в строке 217.

вот теперь понял )

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Был бы премного благодарен за FontEditor. перекачал сотню, ни у одного нет импорта или они на столько крутячие, что разбираться в них не стоит вовсем

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

но в проекте решил не заморачиваться с этим, просто научился выводить рисунок на дисплей, создавать символ какого либо процесса и на нужное место помещать, так наверное будет даже лучше.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

затем копируем в массив, прописываем свое имя, а потом и выводим на экран, не забывая указывать реальный размер картинки.

вот скетч для примера

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Спасибо большое! Так и буду делать. И символы все на месте и картинки вроде быстро рисует.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

У меня почти тоже самое, только не SPI как я понял. У меня там есть слот, так же можно читать и т.д. Но мне грубо говоря в проект добавить 6 картинок 32*32 максимум и все.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Таким образом можно создать любой набор картинок с буквами и символами и выводить их в нужном порядке в любое место дисплея.

)) ну перебор конечно, а вот типа иконок парочку можно, мне кажется.

кстати я с этим слотом для SD карты помучался немного (скорее просто отсутствие опыта) но таки запустил. Думаю использовать его для хранения данных с датчиков, допустим массив кольцевой в месяц, и построение графиков, с возможностью прокрутки вправо влево.

Еще раз спасибо за руссификацию библиотеки, и за пояснения по замене символов, какие то спецсимволы таки буду использовать, ибо так намного удобнее.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

В последнее время на форуме было несколько крупных публикаций по поводу экономного расходования оперативной памяти. Класс String был забракован из-за излишнего потребления ресурсов. Более экономным для работы со строками является использование массивов char. Настала пора модифицировать функцию для перекодирования русского шрифта utf8rus().

Для сохранения перекодированной строки требуется массив char. Чтобы его не определять при каждом вызове функции, создадим его один раз в глобальных переменных. Длину массива определим исходя из максимального размера строки, выводимой на дисплей.
В исходном варианте дисплей имеет ширину 128 пикселей. Ширина каждой буквы составляет 5 пикселей плюс интервал между буквами (6-й пиксель). В итоге, поделив 128 на 6, получаем, что максимальная длина выводимой строки составляет 21 символ плюс ещё один знак для нулевого символа конца строки.
Надо сказать, что библиотеки Adafruit позволяют разбивать длинные строки на несколько строк дисплея, но на маленьких экранчиках это редко нужно, поэтому данный вариант не рассматривается.

Чтобы не выскочить за пределы массива в функцию utf8rus() теперь встроена проверка на превышение максимального размера строки (более длинная строка просто отсекается).

Как и обещал в предыдущем уроке ДисплейSSD1306 подключаем к Arduino. Выводим текст,рисуем фигуры. расскажу, как вывести текст на русском языке на 0,96-дюймовый SSD1306 OLED-дисплей в среде Arduino IDE.

 вывести текст на русском языке на 0,96-дюймовый SSD1306 OLED-дисплей в среде Arduino IDE

С учетом того, что я уже показывал, как работать с дисплеем, вам нужно сделать следующее, чтобы русифицировать дисплей :

1. Установить библиотеки Adafruit : библиотеку Adafruit_SSD1306 и библиотеку Adafruit_GFX . Как их установить, я рассматривал в предыдущем уроке.

3. В скетч нужно добавить функцию перекодировки русских букв из UTF-8 в Win-1251 . Добавить функцию можно в самом низу кода.

4. Добавить в блок void setup() <> следующую строчку кода.

5. При выводе русского текста использовать функцию utf8rus().

За основу возьмите скетч из урока 15. вывод “Hello, world!” на OLED-дисплей .

И сделайте все по инструкции выше . Замените строчку

В итоге. у вас должен получится код:

Вы уже умеете работать с выводом теста на дисплей

Вы уже умеете работать с выводом теста на дисплей , поэтому сможете отформатировать его: изменить размер текста и расположить по центру дисплея , чтобы получилось вот так.

изменить размер текста и расположить по центру дисплея

Скетч данного примера будет вот таким.

Ниже скетч вывода русского алфавита и вывода некоторых спец символов на 0,96-дюймовый SSD1306 OLED-дисплем в среде Arduino IDE :

вывода русского алфавита и вывода некоторых спец символов на 0,96-дюймовый SSD1306 OLED-дисплем в среде Arduino IDE

И напоследок, вот такой пример вывода спец символов букв и цифр , найден на просторах интернета.

 вывода русского алфавита работает не только с SSD1306, но и с дисплеем Nokia 5110 (PCD8544), и с дисплеем 2.8" TFT Touch Shield 320x240

 вывода русского алфавита работает не только с SSD1306, но и с дисплеем Nokia 5110 (PCD8544), и с дисплеем 2.8" TFT Touch Shield 320x240

Данный метод вывода русского алфавита работает не только с SSD1306, но и с дисплеем Nokia 5110 (PCD8544), и с дисплеем 2.8" TFT Touch Shield 320x240.

На этом возможности дисплея не заканчиваются, одна из них - выводить растровые изображения, но об этом как-нибудь в другой раз.

Читайте также: