Русификация дисплея SSD1306
В интернете полно инструкций по русификации данного дисплея. Фактически все рекомендации сводятся к замене в папке C:\Users\USER\Documents\Arduino\libraries\Adafruit_GFX_Library (у вас другой путь) файла glcdfont.c вот этим файлом, и далее использованием вот этой функции для конвертации UTF-8 в кодировку windows-1251:
String utf8rus(String source){
int i,k;
String target;
unsigned char n;
char m[2] = { '0', '\0' };
k = source.length(); i = 0;
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;
}
}
}
m[0] = n; target = target + String(m);
}
return target;
}
У меня увы, этот метод не сработал, как бы я не бился. И файл со скетчем переводил и в UTF-8 и в кодировку windows-1251 и чего только не делал. Ну не работает и всё тут. Потом на какое-то время заработало, потом опять перестало. Разобраться почему я так и не смог. В результате пошел другим путем — написал онлайн конвертор UTF-8 в восьмеричный формат кодировки windows-1251, после чего стало возможным вставлять в IDE код вида:
display.print("\307\300\317\323\321\312...");
Пусть не сильно читаемо в коде, но зато работает максимально стабильно. Конвертер ниже:
Кроме того, обнаружил еще одну не объяснимую ошибку при работе с данным дисплеем: если в программе интенсивно используется вывод в консоль при помощи Serial.println то на дисплее возникают артефакты в виде шума.


