Для русификации библиотеки Adafruit-GFX требуется:
- скачать любой из приведённых ниже архивов;
- заменить файл glcdfont.c в Adafruit-GFX;
- добавить функцию utf8rus() в скетч;
- вставить в начале скетча команду: display.cp437(true);
Применять функцию utf8rus() можно внутри команд печати строк: display.println(utf8rus("Тест"));
В архивах примеры и библиотеки, различающиеся по виду дисплея:
Более подробная информация в предыдущих постах.
Например:
В посте 27 демонстрируется скетч, с помощью которого можно редактировать шрифты (в том числе и в glcdfont.c).
В посте 40 приводится вариант utf8rus() с экономным использованием оперативной памяти.
В посте 46 показан 2.8" TFT Touch Shield для Uno и Mega, и прилагается полный набор библиотек и примеров для него.
В посте 80 описаны изменения в шрифте для проекта Transistor Tester (http://arduino.ru/forum/proekty/transistor-tester-arduino).
по горизонтали нет осттупов, будто текст в полосках как тут
В библиотекеAdafruit_SSD1306.h дисплей подключен как 128x64 или 128x32?
по умолчанию 32 было раскомменитровал на 64 все норм
#define SSD1306_I2C_ADDRESS 0x3C // 011110+SA0+RW - 0x3C or 0x3D
// Address for 128x32 is 0x3C
// Address for 128x64 is 0x3D (default) or 0x3C (if SA0 is grounded)
/*=========================================================================
SSD1306 Displays
-----------------------------------------------------------------------
The driver is used in multiple displays (128x64, 128x32, etc.).
Select the appropriate display below to create an appropriately
sized framebuffer, etc.
SSD1306_128_64 128x64 pixel display
SSD1306_128_32 128x32 pixel display
SSD1306_96_16
-----------------------------------------------------------------------*/
#define SSD1306_128_64 -------------------------------------- тут
// #define SSD1306_128_32
// #define SSD1306_96_16
можно ли как то перековырять библиотеку по сути из функционала нужны русские буквы да отрисовка батареи, по сути оптимизировать бы чтобы хоть как то уменьшить поедание ОЗУ
В моем проекте используется экран SH1106 1,3" и ESP8266, версия Arduino IDE 1.8.1. Библиотека для экрана взята отсюда https://github.com/rene-mt/esp8266-oled-sh1106. Шрифты в данной библиотеке хранятся в файле SH1106Fonts.h. Добавил русские символы в шрифт, они также как и в библиотеке Adafruit GFX идут с кода 192 (0xC0) по 255 (0xFF). Использовал функцию из первого поста. Иногда выводит один русский символ из набора, а чаще всего ничего не выводит. С английскими буквами работает отлично. Похоже, что где-то Arduino IDE неверно выдает кодировку. Если в код вставить напрямую символы, которые в шрифте имеют русские буквы, то на экран все выводится. Ниже покажу код, что имею ввиду. (лишнее убрал, чтоб не мешалось)
#include "SH1106.h"
#include "SH1106Ui.h"
bool drawFrame1(SH1106 *display, SH1106UiState* state, int x, int y) {
display->setTextAlignment(TEXT_ALIGN_CENTER);
display->setFont(ArialMT_Plain_10);
display->drawString(64 + x, 0 + y, "АБВГабвг"); //ничего не выводит, это понятно
display->drawString(64 + x, 10 + y, "ÀÁÂÃàáâã"); //выводит русские АБВГабвг, символы вставил из блокнота
display->drawString(64 + x, 20 + y, (utf8rus("TESTtest"))); //выводит, то есть функция с английскими буквами работает
display->drawString(64 + x, 30 + y, (utf8rus("АБВГабвг"))); //выводит букву Г, то есть функция как то сработало, но если указать только букву Г, то пусто
В моем проекте используется экран SH1106 1,3" и ESP8266, версия Arduino IDE 1.8.1. Библиотека для экрана взята отсюда https://github.com/rene-mt/esp8266-oled-sh1106. Шрифты в данной библиотеке хранятся в файле SH1106Fonts.h. Добавил русские символы в шрифт, они также как и в библиотеке Adafruit GFX идут с кода 192 (0xC0) по 255 (0xFF). Использовал функцию из первого поста. Иногда выводит один русский символ из набора, а чаще всего ничего не выводит. С английскими буквами работает отлично. Похоже, что где-то Arduino IDE неверно выдает кодировку. Если в код вставить напрямую символы, которые в шрифте имеют русские буквы, то на экран все выводится.
В данной теме описано как русифицировать библиотеку Adafruit-GFX. Русифицировать все остальные имеющиеся в Интернете библиотеки мне лень.
Тут по сути разницы нет какая библиотека. Используя функцию Utf8rus мы передаем на дисплей адреса символов в кодировке Win1251 из Ide с кодировкой UTF8. Или я что-то не догоняю?
UTF8 "АБВГабвг"; //Коды 410, 411, 412, 413, 430, 431, 432, 433
||||||||
Win1251 "ÀÁÂÃàáâã"; //Коды C0, C1, C2, C3, E0, E1, E2, E3
Тут по сути разницы нет какая библиотека. Используя функцию Utf8rus мы передаем на дисплей адреса символов в кодировке Win1251 из Ide с кодировкой UTF8
Функция utf8rus() только перекодирует, а на дисплей передаёт библиотека, и от того как она это делает и зависит отображение символов.
Имею дисплей на ILI9225. согласно рекомендациям расширил стандарный шрифт библиотеки дисплея Terminal11x16 символами с кириллицей согласно кодировке UTF-8. Шрифты генерил в GLCD Font creator:
Добрый день! Русифицировал, как указано на сайте. OLED 0.91 выводит все русские буквы со сдвигом на одну букву - вместо А - выводит Б, ..., вместо Ю - выводит Я. Где поправить?
Добрый день! Русифицировал, как указано на сайте. OLED 0.91 выводит все русские буквы со сдвигом на одну букву - вместо А - выводит Б, ..., вместо Ю - выводит Я. Где поправить?
Добрый день! Русифицировал, как указано на сайте. OLED 0.91 выводит все русские буквы со сдвигом на одну букву - вместо А - выводит Б, ..., вместо Ю - выводит Я. Где поправить?
Доброго времени суток. Столкнулся с таким вопросом хотел бы вывести символ из примера, на фото третий снизу (символ динамика) но неразобрался как, находится в void TEST_display_1, может кто подскажит как это сделать?
Доброго времени суток. Столкнулся с таким вопросом хотел бы вывести символ из примера, на фото третий снизу (символ динамика) но неразобрался как, находится в void TEST_display_1, может кто подскажит как это сделать?
Не надо в строке 83 между \ и x83 пробел ставить, правильно так: "\x83".
использую TFT 1.8 SPI и Arduino NANO, все отлично заработало и текст руский и отображение всей остальной "мешуры", читая форум, так и не нашел подобного вопроса:
Со статическим отображением текста и цифр - все отлично.
пытаюсь отобразить значение с аналогового входа и получается, не то, что ожидаю. если отображать значение с fillScreen в lopp, экран мерцает и выводит "морось" какую то, если без fillScreen, то экран заполняется белми пикселями, понял что нужно обновление экрана для вывода динамического текста, не могу понять как.
мне кажется, это уже должно быть решено на уровне самой библиотеки, не может же быт, что только мне нужно выводит динамический текст!), за идею спасибо, если не решу прямым путем, буду делать так...
рисуйте черный прямоугольник прежде чем выводить новое значение
Интересно, откуда происходит этот вредный совет?
Дело в том, что для 1-битного цвета рисование "с непрозрачным фоном" в несколько раз быстрее, чем с прозрачным. Для 16-битного звета чуть сложнее: рисование символа в потоковом режиме требует передачи двух байтов, а в индивидуальном, в зависимости от контроллера - 14 или 16 байтов. Т.е. при коэффициенте заполнения более 12-14% (а у большинства фонтов это так) быстрее рисовать символ с непрозрачным фоном. Если мы еще дополнительно рисуем черный прямоугольник, то затраты времени на такое рисование будет в 2-6 раз выше, чем рисование символа с непрозрачным фоном.
Вот и интересно, откуда растут ноги у таких рекомендаций, которые в разы замедляют работу программы?
Если речь идёт об "затирании" лишнего (12 поверх 1234), то без квадратиков никуда.
В конечном итоге - да. Только снаружи это выглядит как вывод пробела, а не рисование прямоугольника. И правильный - именно первый вариант, который гарантирует от двукратного повторения одной и той же операции.
Цитата:
Если же символ выводится печатая только сам символ (прозрачный), то не залезть в библиотеку не получится.
И скорей всего это будет файл Adafruit_ST7735.cpp
Искомая функция, вероятно, называется "drawChar".
Скорей всего там закоментирован вывот заднего фона. Это вывод пикселя цвета фона.
Лично я для вывода на экран пользуюсь исключительно собственными библиотеками, поэтому насчет других ничего сказать не могу.
Если речь о том, что приведено в сообщении №392, то функция явно написана очень неоптимально. Притом так, что править даже нет смысла - нужно переписывать заново.
И по поводу "закомментировать", с приведенным вариантом это, конечно, сделать можно, но не нужно.
Если речь идёт об "затирании" лишнего (12 поверх 1234), то без квадратиков никуда.
В конечном итоге - да. Только снаружи это выглядит как вывод пробела, а не рисование прямоугольника. И правильный - именно первый вариант, который гарантирует от двукратного повторения одной и той же операции.
для библиотеки Adafruit-GFX-Library при использовании внешних шрифтов нельзя задать фон шрифта, согласно официальной документации в которой написано как использовать шрифты написано, что для стирания старого шрифта надо использовать функции getTextBounds () и fillRect (), вернее для стирания использовать fillRect ()
в прочем можно разными способами затирать шрифт, например печатая такой же шрифт только цветом фона
При 300 светодиодах для 100-байтовой строки и в оперативной памяти места хватит. Но если строк много и/или хочется сэкономить оперативную память, а строки в PROGMEM обычно не меняются, то можно в PROGMEM сохранять строки сразу с HEX-символами русских букв. Выводится такие строки могут стандартным образом без перекодирования.
Ниже приводится скетч с функцией utf8rus2hex(), которая перекодирует русские буквы из UTF-8 в кодировку Windows-1251 и преобразует их в строчные HEX-символы (английские символы при этом не меняются):
void setup()
{
Serial.begin(9600);
utf8rus2hex("Test");
utf8rus2hex("Тест");
utf8rus2hex("Test Тест");
}
void loop() {}
/* Recode russian fonts from UTF-8 to Windows-1251
and convert in HEX-format */
void utf8rus2hex(char *source)
{
int i,k;
unsigned char n;
k = strlen(source); i = 0;
Serial.print("\"");
while (i < k) {
n = source[i]; i++;
if (n >= 0xC0) {
switch (n) {
case 0xD0: {
n = source[i]; i++;
if (n == 0x81) { n = 0xA8; break; }
if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
break;
}
case 0xD1: {
n = source[i]; i++;
if (n == 0x91) { n = 0xB8; break; }
if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
break;
}
}
}
if ((n >= 0x20) && (n <= 0x7F)) Serial.write(n);
else {
Serial.print("\\x");
if(n < 0x10) Serial.print("0");
Serial.print(n, HEX);
}
}
Serial.println("\"");
}
Результат:
"Test"
"\xD2\xE5\xF1\xF2"
"Test \xD2\xE5\xF1\xF2"
Остаётся только оформить строку (например последнюю) в нужном виде: const unsigned char stroka[] PROGMEM = "Test \xD2\xE5\xF1\xF2";
Также в эту строку можно добавить и другие HEX-символы, содержащиеся в шрифте - пример можно посмотреть в посте #379.
Краткие итоги предыдущих 350 постов
Для русификации библиотеки Adafruit-GFX требуется:
- скачать любой из приведённых ниже архивов;
- заменить файл glcdfont.c в Adafruit-GFX;
- добавить функцию utf8rus() в скетч;
- вставить в начале скетча команду: display.cp437(true);
Применять функцию utf8rus() можно внутри команд печати строк:
display.println(utf8rus("Тест"));
В архивах примеры и библиотеки, различающиеся по виду дисплея:
0.96" OLED 128x64
https://yadi.sk/d/dd7ULuRftVcRV
2.8" TFT Touch Shield 320x240
https://yadi.sk/d/FgUr5NPztVcRd
Nokia 5110 84x48
https://yadi.sk/d/juZ_mZbfsTpez
Более подробная информация в предыдущих постах.
Например:
В посте 27 демонстрируется скетч, с помощью которого можно редактировать шрифты (в том числе и в glcdfont.c).
В посте 40 приводится вариант utf8rus() с экономным использованием оперативной памяти.
В посте 46 показан 2.8" TFT Touch Shield для Uno и Mega, и прилагается полный набор библиотек и примеров для него.
В посте 80 описаны изменения в шрифте для проекта Transistor Tester (http://arduino.ru/forum/proekty/transistor-tester-arduino).
так вот, с другими библиотеками все норм, вот прмиер
OLED_I2C
iarduino_OLED.h
по горизонтали нет осттупов, будто текст в полосках как тут
Это зависит от фонта. Поменяйте фонт или вставьте отступы сами, проблем-то
по горизонтали нет осттупов, будто текст в полосках как тут
В библиотеке Adafruit_SSD1306.h дисплей подключен как 128x64 или 128x32?
по горизонтали нет осттупов, будто текст в полосках как тут
В библиотеке Adafruit_SSD1306.h дисплей подключен как 128x64 или 128x32?
по умолчанию 32 было раскомменитровал на 64 все норм
В библиотеке Adafruit_SSD1306.h дисплей подключен как 128x64 или 128x32?
по умолчанию 32 было раскомменитровал на 64 все норм
Ну вот ларчик просто открывался, нужно было только задать правильный вопрос:
http://arduino.ru/forum/otvlechennye-temy/robert-shekli-vernyi-vopros
В библиотеке Adafruit_SSD1306.h дисплей подключен как 128x64 или 128x32?
по умолчанию 32 было раскомменитровал на 64 все норм
Ну вот ларчик просто открывался, нужно было только задать правильный вопрос:
http://arduino.ru/forum/otvlechennye-temy/robert-shekli-vernyi-vopros
можно ли как то перековырять библиотеку по сути из функционала нужны русские буквы да отрисовка батареи, по сути оптимизировать бы чтобы хоть как то уменьшить поедание ОЗУ
Озу жрет не либа, а шрифт и цвет, их можно уменьшить, как? Читайте чуть выше.
шрифт убирал и в других библиотеках, на размер озу не влияло, как было так и оставалось, по поводу цвета пока не знаю, озу жрет скорее буфер
озу жрет скорее буфер
В библиотеке Adafruit_SSD1306 оперативная память расходуется на буфер. На форуме есть библиотека для OLED-дисплея без буфера.
В моем проекте используется экран SH1106 1,3" и ESP8266, версия Arduino IDE 1.8.1. Библиотека для экрана взята отсюда https://github.com/rene-mt/esp8266-oled-sh1106. Шрифты в данной библиотеке хранятся в файле SH1106Fonts.h. Добавил русские символы в шрифт, они также как и в библиотеке Adafruit GFX идут с кода 192 (0xC0) по 255 (0xFF). Использовал функцию из первого поста. Иногда выводит один русский символ из набора, а чаще всего ничего не выводит. С английскими буквами работает отлично. Похоже, что где-то Arduino IDE неверно выдает кодировку. Если в код вставить напрямую символы, которые в шрифте имеют русские буквы, то на экран все выводится. Ниже покажу код, что имею ввиду. (лишнее убрал, чтоб не мешалось)
В моем проекте используется экран SH1106 1,3" и ESP8266, версия Arduino IDE 1.8.1. Библиотека для экрана взята отсюда https://github.com/rene-mt/esp8266-oled-sh1106. Шрифты в данной библиотеке хранятся в файле SH1106Fonts.h. Добавил русские символы в шрифт, они также как и в библиотеке Adafruit GFX идут с кода 192 (0xC0) по 255 (0xFF). Использовал функцию из первого поста. Иногда выводит один русский символ из набора, а чаще всего ничего не выводит. С английскими буквами работает отлично. Похоже, что где-то Arduino IDE неверно выдает кодировку. Если в код вставить напрямую символы, которые в шрифте имеют русские буквы, то на экран все выводится.
В данной теме описано как русифицировать библиотеку Adafruit-GFX. Русифицировать все остальные имеющиеся в Интернете библиотеки мне лень.
P.S. Минутный поиск в Интернете (ну почему новички не умеют искать?) привёл к библиотеке, работающей с Adafruit-GFX: https://github.com/wonho-maker/Adafruit_SH1106
Тут по сути разницы нет какая библиотека. Используя функцию Utf8rus мы передаем на дисплей адреса символов в кодировке Win1251 из Ide с кодировкой UTF8
Функция utf8rus() только перекодирует, а на дисплей передаёт библиотека, и от того как она это делает и зависит отображение символов.
И так мне не очень хотелось через процедуру отдельную конвертировать UTF адаптировал Adafruit:
Файл: Adafruit_CFX.cpp
Файл: Adafruit_CFX.h
Ну и естественно шрифт использовать тот который представлен в данной теме.
Коллеги, здравствуйте.
Есть проблема:
Имею дисплей на ILI9225. согласно рекомендациям расширил стандарный шрифт библиотеки дисплея Terminal11x16 символами с кириллицей согласно кодировке UTF-8. Шрифты генерил в GLCD Font creator:
При выводе на дисплей к русским буквам добавляется спереди какой-то символ, к примеру строка "АБВГДЕабвгде" отображается так:
В чем может быть проблема?
Уже вроде всё обсудили. Смотри ранние посты.
Проблема в кодировке, если точнее то как раз в кирилице.
Для её кодировки необходимо не 1, а 2 байта на символ. Вот первый и выводится.
Его нужно отсечь. Это воплотили, как минимум двумя способами.
Первый описал я, вмешавшись в функцию вывода символа, за что получил осуждение, но это уже не мои проблемы.
Второй способ расписан в посте №322
Русифицировал библиотеку, как указано на сайте.
Попытался вывести строчку в протеусе.
В Протеусе выводит загогулины вместо русских букв. Нокиа5110, протеус 8.6.
Скетч:
При выводе на дисплей к русским буквам добавляется спереди какой-то символ
В чем может быть проблема?
В невнимательном прочтении нулевого поста данной темы.
В Протеусе выводит загогулины вместо русских букв. Нокиа5110, протеус 8.6.
Протеус у меня не установлен, а на дисплее всё работает.
Да, действительно. сразу не въехал. Внедрил функцию utft8rus (без переброса кодов символов, т.к. у меня буквы в нужном порядке) и все заработало.
Нечеловеческое спасибо автору!
Да, действительно. сразу не въехал. Внедрил функцию utft8rus (без переброса кодов символов, т.к. у меня буквы в нужном порядке) и все заработало.
Нечеловеческое спасибо автору!
Добрый день! Русифицировал, как указано на сайте. OLED 0.91 выводит все русские буквы со сдвигом на одну букву - вместо А - выводит Б, ..., вместо Ю - выводит Я. Где поправить?
Добрый день! Русифицировал, как указано на сайте. OLED 0.91 выводит все русские буквы со сдвигом на одну букву - вместо А - выводит Б, ..., вместо Ю - выводит Я. Где поправить?
Добрый день! Русифицировал, как указано на сайте. OLED 0.91 выводит все русские буквы со сдвигом на одну букву - вместо А - выводит Б, ..., вместо Ю - выводит Я. Где поправить?
Скорее всего решение данной проблемы описано в посте #15 (http://arduino.ru/forum/programmirovanie/rusifikatsiya-biblioteki-adafru...).
Поменял две строчки кода в utf8rus и все заработало, как надо.
if (n >= 0x90 && n <= 0xBF) n = n-1 + 0x30;
if (n >= 0x80 && n <= 0x8F) n = n-1 + 0x70;
Поменял две строчки кода в utf8rus
А display.cp437(true); до этого не решил проблему?
Поменял две строчки кода в utf8rus
А display.cp437(true); до этого не решил проблему?
Спасибо за подсказку. Не знал, что означает этот оператор. Попробую, отпишусь.
Доброго времени суток. Столкнулся с таким вопросом хотел бы вывести символ из примера, на фото третий снизу (символ динамика) но неразобрался как, находится в void TEST_display_1, может кто подскажит как это сделать?
Извеняюсь что не в сполере незнаю как скрыть под сполер
Доброго времени суток. Столкнулся с таким вопросом хотел бы вывести символ из примера, на фото третий снизу (символ динамика) но неразобрался как, находится в void TEST_display_1, может кто подскажит как это сделать?
Не надо в строке 83 между \ и x83 пробел ставить, правильно так: "\x83".
Скетч OledSymbolTest.ino с выводом символов:
Извеняюсь что не в сполере незнаю как скрыть под сполер
При вставке кода на вкладке "Дополнительно" нужно поставить галочку там где "Свернуть" написано.
Здравствуйте.
использую TFT 1.8 SPI и Arduino NANO, все отлично заработало и текст руский и отображение всей остальной "мешуры", читая форум, так и не нашел подобного вопроса:
Со статическим отображением текста и цифр - все отлично.
пытаюсь отобразить значение с аналогового входа и получается, не то, что ожидаю. если отображать значение с fillScreen в lopp, экран мерцает и выводит "морось" какую то, если без fillScreen, то экран заполняется белми пикселями, понял что нужно обновление экрана для вывода динамического текста, не могу понять как.
что не так делаю?
1. В нормальной библиотеке дисплея должен быть режим вывода "с непрозрачным фоном", чтобы затирать то, что было нарисовано ранее.
2. Перерисовывать что-то имеет смысл только в том случае, если что-то поменялось. Писать "12345" поверх "12345" ведет лишь к сильному мерцанию.
1.эту функцию нужнго искать в бибиотеке Adafruit_ST7735.h?
2.до такого, надеюсь не дойдет))
рисуйте черный прямоугольник прежде чем выводить новое значение, а новое значение выводите только если оно не равно предыдущему.
мне кажется, это уже должно быть решено на уровне самой библиотеки, не может же быт, что только мне нужно выводит динамический текст!), за идею спасибо, если не решу прямым путем, буду делать так...
может кто то уже выводилдинамический текст/число, может пример показать?
рисуйте черный прямоугольник прежде чем выводить новое значение
Дело в том, что для 1-битного цвета рисование "с непрозрачным фоном" в несколько раз быстрее, чем с прозрачным. Для 16-битного звета чуть сложнее: рисование символа в потоковом режиме требует передачи двух байтов, а в индивидуальном, в зависимости от контроллера - 14 или 16 байтов. Т.е. при коэффициенте заполнения более 12-14% (а у большинства фонтов это так) быстрее рисовать символ с непрозрачным фоном. Если мы еще дополнительно рисуем черный прямоугольник, то затраты времени на такое рисование будет в 2-6 раз выше, чем рисование символа с непрозрачным фоном.
Вот и интересно, откуда растут ноги у таких рекомендаций, которые в разы замедляют работу программы?
Частитчно проблема решилась, добавлением в setTextColor цвета заднего фона, но текст пока отображается неадекватно
перевел char в String - появились адекватные значения от аналогового входа.
Осталось решить один нюанс - при переходе из 1023 в 0, крайние 3 цифры остаются на месте, получается - 0023, их надо затереть
Если речь идёт об "затирании" лишнего (12 поверх 1234), то без квадратиков никуда.
Если же символ выводится печатая только сам символ (прозрачный), то не залезть в библиотеку не получится.
И скорей всего это будет файл Adafruit_ST7735.cpp
Искомая функция, вероятно, называется "drawChar".
Скорей всего там закоментирован вывот заднего фона. Это вывод пикселя цвета фона.
У вас вопросы не относящиеся к этой ветке.
У вас вопросы не относящиеся к этой ветке.
вот тут извиняюсь!
рисуйте черный прямоугольник прежде чем выводить новое значение
Вот и интересно, откуда растут ноги у таких рекомендаций, которые в разы замедляют работу программы?
Это кусок кода Adafruit_GFX.cpp
Скажите пожалуйста, что делают строки, содержащие writeFillRect ???
Если размер шрифта "1" (не увеличиваем) выводится, как фон или символ, пиксел.
Если размер шрифта больше одного, выводится квадрат размером как размер шрифта (2, 3, 4 ...)
это относится только к базовому шрифту, у пользовательских шрифтов нет фона
Если речь идёт об "затирании" лишнего (12 поверх 1234), то без квадратиков никуда.
Если же символ выводится печатая только сам символ (прозрачный), то не залезть в библиотеку не получится.
И скорей всего это будет файл Adafruit_ST7735.cpp
Искомая функция, вероятно, называется "drawChar".
Скорей всего там закоментирован вывот заднего фона. Это вывод пикселя цвета фона.
Если речь о том, что приведено в сообщении №392, то функция явно написана очень неоптимально. Притом так, что править даже нет смысла - нужно переписывать заново.
И по поводу "закомментировать", с приведенным вариантом это, конечно, сделать можно, но не нужно.
Если речь идёт об "затирании" лишнего (12 поверх 1234), то без квадратиков никуда.
для библиотеки Adafruit-GFX-Library при использовании внешних шрифтов нельзя задать фон шрифта, согласно официальной документации в которой написано как использовать шрифты написано, что для стирания старого шрифта надо использовать функции getTextBounds () и fillRect (), вернее для стирания использовать fillRect ()
в прочем можно разными способами затирать шрифт, например печатая такой же шрифт только цветом фона
в итоге воспользовался функцией fillRect (), не совсем то что хотел, хотя странно, что Adafruit не сдела функции типа printNumI() как для OLED дисплея
Добрый день! Хотел бы высказать свое огромное спасибо arduinec русский шрифт работает на ура с лентой WS2812b.
Собственно вопрос как использовать utf8rus с PROGMEM?
Код прилагаю конкретно интерисует для бегущей строки.
Спасибо за любые подсказки и помощь)
При 300 светодиодах для 100-байтовой строки и в оперативной памяти места хватит. Но если строк много и/или хочется сэкономить оперативную память, а строки в PROGMEM обычно не меняются, то можно в PROGMEM сохранять строки сразу с HEX-символами русских букв. Выводится такие строки могут стандартным образом без перекодирования.
Ниже приводится скетч с функцией utf8rus2hex(), которая перекодирует русские буквы из UTF-8 в кодировку Windows-1251 и преобразует их в строчные HEX-символы (английские символы при этом не меняются):
Остаётся только оформить строку (например последнюю) в нужном виде:
const unsigned char stroka[] PROGMEM = "Test \xD2\xE5\xF1\xF2";
Также в эту строку можно добавить и другие HEX-символы, содержащиеся в шрифте - пример можно посмотреть в посте #379.
Примеры моих бегущих строк (480 светодиодов, текстовая строка хранится в обычной оперативной памяти):
https://yadi.sk/i/KjPlzioNjskYL
https://yadi.sk/i/RzuRDpZkkK32s