Уважаемые, участники форума, опытные ардуинщики, нуждаюсь в вашей помощи. К ардуино Мега 2560 подключил tft lcd mega shield v2.2. а к нему дисплей TFT_320QDT_9341. Интерфейс 16 битный параллельный. Подскажите пожалуйста UTFT библиотеку для программирования этого сенсорного дисплея с выводом текста и кнопок на русском языке. Может есть какая-то библиотека, которой не важно, русский или Английский текст? Или шрифт какой-то?
шрифт не более чем битмапы букв, если люди выводят хинди с их восемью сотнями букв, то уж кириллицу с ее 15 уникальными буквами стыдно не осилить
Я очень рад, что вы освоили. Но к чему здесь это сообщение, мне не очень понятно
Если вам нужны готовые варианты, почему вы не пользуетесь поиском?
В гуле по теме “руссификация UTFT” десятки ссылок.
1NotApple6 позвольте порекомендовать вам создать тему в платном разделе, как раз скоро буду копаться, и вывод строки будет с веб сервера,(зациклено!) включая поддержку русских букв, по деньгам возьму всего 5к))) а вот бесплатный вариант https://robotclass.ru/tutorials/russkij-tekst-tft_espi/ (но могу ошибаться)
Странная сама форма вопроса: подскажите, как зовут Алексея Михайловича из 32 квартиры.
Если Вас интересует конкретная библиотека, то она может либо поддерживать кириллицу, либо не поддерживать. На МК с ограниченными ресурсами не принято играть в толерантность, поэтому, как правило, при необходимости поддерживается только ASCII, а именно, 95 печатных символа и 33 управляющих. Но существуют способы разной степени кривизны, позволяющие иметь на дисплее символы кириллицы.
Хотя, честно говоря, я сам приложил руку к русификации одного из дисплеев.
Пользуясь подобным подходом можно дополнить кириллицей и практически любую другую библиотеку.
andriano у меня кажется реальная проблема, не то что у него…
нет ли библиотек с вау эффектом))) возможно что бы буквы переливались радугой…
что то мне не нравится то что выводится сейчас… и максимум разноцветные буквы сделать можно, но шрифт какой то не такой… глаз колит…
Здесь есть два варианта:
- подобная “радуга” поддерживается аппаратно. Ну примерно так, как распространенный 1602 поддерживает скроллинг.
- “радуга” аппаратно не поддерживается.
С аппаратным все ясно: ежели такая возможность есть, то она есть у ограниченного множества дисплеев. Соответственно, такая библиотека должна уметь использовать эти аппаратные возможности, следовательно, не может быть универсальной.
С программным - он требует ресурса процессора, а также некоторого дополнительного ресурса, будь то контроллер DMA либо контроллер прерываний.
Не дело библиотекарей писать программы. Пусть лучше занимаются своим делом.
Все, гады, норовят иероглифами!
Прямоугольник с радужной заливкой осилите? А дальше остаётся только напечатать по нему нужный текст буквами с инверсией
Всё же больше Деванагари ![]()
кажется я просто ошибся в двух местах, и вот так работает
#include <TFT_eSPI.h>
#include <pgmspace.h>
// ==================== СИСТЕМНЫЙ ШРИФТ SystemRus5x7 ====================
const uint8_t SystemRus5x7Bitmaps[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00,// (space) 0x20
0x00, 0x00, 0x5F, 0x00, 0x00,// ! 0x21
0x00, 0x07, 0x00, 0x07, 0x00,// " 0x22
0x14, 0x7F, 0x14, 0x7F, 0x14,// # 0x23
0x24, 0x2A, 0x7F, 0x2A, 0x12,// $ 0x24
0x23, 0x13, 0x08, 0x64, 0x62,// % 0x25
0x36, 0x49, 0x55, 0x22, 0x50,// & 0x26
0x00, 0x05, 0x03, 0x00, 0x00,// ' 0x27
0x00, 0x1C, 0x22, 0x41, 0x00,// ( 0x28
0x00, 0x41, 0x22, 0x1C, 0x00,// ) 0x29
0x08, 0x2A, 0x1C, 0x2A, 0x08,// * 0x2A
0x08, 0x08, 0x3E, 0x08, 0x08,// + 0x2B
0x00, 0x50, 0x30, 0x00, 0x00,// , 0x2C
0x08, 0x08, 0x08, 0x08, 0x08,// - 0x2D
0x00, 0x60, 0x60, 0x00, 0x00,// . 0x2E
0x20, 0x10, 0x08, 0x04, 0x02,// / 0x2F
0x3E, 0x51, 0x49, 0x45, 0x3E,// 0 0x30
0x00, 0x42, 0x7F, 0x40, 0x00,// 1 0x31
0x42, 0x61, 0x51, 0x49, 0x46,// 2 0x32
0x21, 0x41, 0x45, 0x4B, 0x31,// 3 0x33
0x18, 0x14, 0x12, 0x7F, 0x10,// 4 0x34
0x27, 0x45, 0x45, 0x45, 0x39,// 5 0x35
0x3C, 0x4A, 0x49, 0x49, 0x30,// 6 0x36
0x01, 0x71, 0x09, 0x05, 0x03,// 7 0x37
0x36, 0x49, 0x49, 0x49, 0x36,// 8 0x38
0x06, 0x49, 0x49, 0x29, 0x1E,// 9 0x39
0x00, 0x36, 0x36, 0x00, 0x00,// : 0x3A
0x00, 0x56, 0x36, 0x00, 0x00,// ; 0x3B
0x00, 0x08, 0x14, 0x22, 0x41,// < 0x3C
0x14, 0x14, 0x14, 0x14, 0x14,// = 0x3D
0x41, 0x22, 0x14, 0x08, 0x00,// > 0x3E
0x02, 0x01, 0x51, 0x09, 0x06,// ? 0x3F
0x32, 0x49, 0x79, 0x41, 0x3E,// @ 0x40
0x7E, 0x11, 0x11, 0x11, 0x7E,// A 0x41
0x7F, 0x49, 0x49, 0x49, 0x36,// B 0x42
0x3E, 0x41, 0x41, 0x41, 0x22,// C 0x43
0x7F, 0x41, 0x41, 0x22, 0x1C,// D 0x44
0x7F, 0x49, 0x49, 0x49, 0x41,// E 0x45
0x7F, 0x09, 0x09, 0x01, 0x01,// F 0x46
0x3E, 0x41, 0x41, 0x51, 0x32,// G 0x47
0x7F, 0x08, 0x08, 0x08, 0x7F,// H 0x48
0x00, 0x41, 0x7F, 0x41, 0x00,// I 0x49
0x20, 0x40, 0x41, 0x3F, 0x01,// J 0x4A
0x7F, 0x08, 0x14, 0x22, 0x41,// K 0x4B
0x7F, 0x40, 0x40, 0x40, 0x40,// L 0x4C
0x7F, 0x02, 0x04, 0x02, 0x7F,// M 0x4D
0x7F, 0x04, 0x08, 0x10, 0x7F,// N 0x4E
0x3E, 0x41, 0x41, 0x41, 0x3E,// O 0x4F
0x7F, 0x09, 0x09, 0x09, 0x06,// P 0x50
0x3E, 0x41, 0x51, 0x21, 0x5E,// Q 0x51
0x7F, 0x09, 0x19, 0x29, 0x46,// R 0x52
0x46, 0x49, 0x49, 0x49, 0x31,// S 0x53
0x01, 0x01, 0x7F, 0x01, 0x01,// T 0x54
0x3F, 0x40, 0x40, 0x40, 0x3F,// U 0x55
0x1F, 0x20, 0x40, 0x20, 0x1F,// V 0x56
0x7F, 0x20, 0x18, 0x20, 0x7F,// W 0x57
0x63, 0x14, 0x08, 0x14, 0x63,// X 0x58
0x03, 0x04, 0x78, 0x04, 0x03,// Y 0x59
0x61, 0x51, 0x49, 0x45, 0x43,// Z 0x5A
0x00, 0x00, 0x7F, 0x41, 0x41,// [ 0x5B
0x02, 0x04, 0x08, 0x10, 0x20,// "\" 0x5C
0x41, 0x41, 0x7F, 0x00, 0x00,// ] 0x5D
0x04, 0x02, 0x01, 0x02, 0x04,// ^ 0x5E
0x40, 0x40, 0x40, 0x40, 0x40,// _ 0x5F
0x00, 0x01, 0x02, 0x04, 0x00,// ` 0x60
0x20, 0x54, 0x54, 0x54, 0x78,// a 0x61
0x7F, 0x48, 0x44, 0x44, 0x38,// b 0x62
0x38, 0x44, 0x44, 0x44, 0x20,// c 0x63
0x38, 0x44, 0x44, 0x48, 0x7F,// d 0x64
0x38, 0x54, 0x54, 0x54, 0x18,// e 0x65
0x08, 0x7E, 0x09, 0x01, 0x02,// f 0x66
0x08, 0x14, 0x54, 0x54, 0x3C,// g 0x67
0x7F, 0x08, 0x04, 0x04, 0x78,// h 0x68
0x00, 0x44, 0x7D, 0x40, 0x00,// i 0x69
0x20, 0x40, 0x44, 0x3D, 0x00,// j 0x6A
0x00, 0x7F, 0x10, 0x28, 0x44,// k 0x6B
0x00, 0x41, 0x7F, 0x40, 0x00,// l 0x6C
0x7C, 0x04, 0x18, 0x04, 0x78,// m 0x6D
0x7C, 0x08, 0x04, 0x04, 0x78,// n 0x6E
0x38, 0x44, 0x44, 0x44, 0x38,// o 0x6F
0x7C, 0x14, 0x14, 0x14, 0x08,// p 0x70
0x08, 0x14, 0x14, 0x18, 0x7C,// q 0x71
0x7C, 0x08, 0x04, 0x04, 0x08,// r 0x72
0x48, 0x54, 0x54, 0x54, 0x20,// s 0x73
0x04, 0x3F, 0x44, 0x40, 0x20,// t 0x74
0x3C, 0x40, 0x40, 0x20, 0x7C,// u 0x75
0x1C, 0x20, 0x40, 0x20, 0x1C,// v 0x76
0x3C, 0x40, 0x30, 0x40, 0x3C,// w 0x77
0x44, 0x28, 0x10, 0x28, 0x44,// x 0x78
0x0C, 0x50, 0x50, 0x50, 0x3C,// y 0x79
0x44, 0x64, 0x54, 0x4C, 0x44,// z 0x7A
0x00, 0x08, 0x36, 0x41, 0x00,// { 0x7B
0x00, 0x00, 0x7F, 0x00, 0x00,// | 0x7C
0x00, 0x41, 0x36, 0x08, 0x00,// } 0x7D
0x08, 0x08, 0x2A, 0x1C, 0x08,// -> 0x7E
0x08, 0x1C, 0x2A, 0x08, 0x08, // <- 0x7F
// Русские буквы (CP866 кодировка)
0x7C, 0x14, 0x14, 0x14, 0x08,// p 0x80
0x38, 0x44, 0x44, 0x44, 0x20,// c 0x81
0x04, 0x04, 0x7C, 0x04, 0x04,// т 0x82
0x0C, 0x50, 0x50, 0x50, 0x3C,// у 0x83
0x30, 0x48, 0xFC, 0x48, 0x30,// ф 0x84
0x44, 0x28, 0x10, 0x28, 0x44,// x 0x85
0x7C, 0x40, 0x40, 0x40, 0xFC,// ц 0x86
0x0C, 0x10, 0x10, 0x10, 0x7C,// ч 0x87
0x7C, 0x40, 0x7C, 0x40, 0x7C,// ш 0x88
0x7C, 0x40, 0x7C, 0x40, 0xFC,// щ 0x89
0x04, 0x7C, 0x50, 0x50, 0x20,// ъ 0x8A
0x7C, 0x50, 0x50, 0x20, 0x7C,// ы 0x8B
0x7C, 0x50, 0x50, 0x20, 0x00,// ь 0x8C
0x28, 0x44, 0x54, 0x54, 0x38,// э 0x8D
0x7C, 0x10, 0x38, 0x44, 0x38,// ю 0x8E
0x08, 0x54, 0x34, 0x14, 0x7C,// я 0x8F
// Заглавные русские буквы
0x7E, 0x11, 0x11, 0x11, 0x7E,// A 0x90
0x7F, 0x49, 0x49, 0x49, 0x33,// Б 0x91
0x7F, 0x49, 0x49, 0x49, 0x36,// В 0x92
0x7F, 0x01, 0x01, 0x01, 0x03,// Г 0x93
0xE0, 0x51, 0x4F, 0x41, 0xFF,// Д 0x94
0x7F, 0x49, 0x49, 0x49, 0x41,// E 0x95
0x77, 0x08, 0x7F, 0x08, 0x77,// Ж 0x96
0x41, 0x49, 0x49, 0x49, 0x36,// З 0x97
0x7F, 0x10, 0x08, 0x04, 0x7F,// И 0x98
0x7C, 0x21, 0x12, 0x09, 0x7C,// Й 0x99
0x7F, 0x08, 0x14, 0x22, 0x41,// K 0x9A
0x20, 0x41, 0x3F, 0x01, 0x7F,// Л 0x9B
0x7F, 0x02, 0x0C, 0x02, 0x7F,// M 0x9C
0x7F, 0x08, 0x08, 0x08, 0x7F,// H 0x9D
0x3E, 0x41, 0x41, 0x41, 0x3E,// O 0x9E
0x7F, 0x01, 0x01, 0x01, 0x7F,// П 0x9F
0x7F, 0x09, 0x09, 0x09, 0x06,// P 0xA0
0x3E, 0x41, 0x41, 0x41, 0x22,// C 0xA1
0x01, 0x01, 0x7F, 0x01, 0x01,// T 0xA2
0x47, 0x28, 0x10, 0x08, 0x07,// У 0xA3
0x1C, 0x22, 0x7F, 0x22, 0x1C,// Ф 0xA4
0x63, 0x14, 0x08, 0x14, 0x63,// X 0xA5
0x7F, 0x40, 0x40, 0x40, 0xFF,// Ц 0xA6
0x07, 0x08, 0x08, 0x08, 0x7F,// Ч 0xA7
0x7F, 0x40, 0x7F, 0x40, 0x7F,// Ш 0xA8
0x7F, 0x40, 0x7F, 0x40, 0xFF,// Щ 0xA9
0x01, 0x7F, 0x48, 0x48, 0x30,// Ъ 0xAA
0x7F, 0x48, 0x30, 0x00, 0x7F,// Ы 0xAB
0x00, 0x7F, 0x48, 0x48, 0x30,// Э 0xAC
0x22, 0x41, 0x49, 0x49, 0x3E,// Ь 0xAD
0x7F, 0x08, 0x3E, 0x41, 0x3E,// Ю 0xAE
0x46, 0x29, 0x19, 0x09, 0x7F,// Я 0xAF
// Строчные русские буквы
0x20, 0x54, 0x54, 0x54, 0x78,// a 0xB0
0x3C, 0x4A, 0x4A, 0x49, 0x31,// б 0xB1
0x7C, 0x54, 0x54, 0x28, 0x00,// в 0xB2
0x7C, 0x04, 0x04, 0x04, 0x0C,// г 0xB3
0xE0, 0x54, 0x4C, 0x44, 0xFC,// д 0xB4
0x38, 0x54, 0x54, 0x54, 0x18,// e 0xB5
0x6C, 0x10, 0x7C, 0x10, 0x6C,// ж 0xB6
0x44, 0x44, 0x54, 0x54, 0x28,// з 0xB7
0x7C, 0x20, 0x10, 0x08, 0x7C,// и 0xB8
0x7C, 0x41, 0x22, 0x11, 0x7C,// й 0xB9
0x7C, 0x10, 0x28, 0x44, 0x00,// к 0xBA
0x20, 0x44, 0x3C, 0x04, 0x7C,// л 0xBB
0x7C, 0x08, 0x10, 0x08, 0x7C,// м 0xBC
0x7C, 0x10, 0x10, 0x10, 0x7C,// н 0xBD
0x38, 0x44, 0x44, 0x44, 0x38,// o 0xBE
0x7C, 0x04, 0x04, 0x04, 0x7C, // п 0xBF
0x7F, 0x49, 0x49, 0x41, 0x63, // Ё 0xF0 - как E с двумя точками
0x38, 0x54, 0x54, 0x54, 0x48 // ё 0xF1 - как e с двумя точками
};
// Упрощенная структура для bitmap шрифта
typedef struct {
const uint8_t *bitmap; // Указатель на bitmap данные
uint16_t first; // Первый символ
uint16_t last; // Последний символ
uint8_t width; // Ширина символа
uint8_t height; // Высота символа
} RusFont;
// Создаем структуру шрифта
const RusFont SystemRus5x7Font = {
SystemRus5x7Bitmaps,
0x20, // first
0xF1, // last (расширен до F1)
5, // width
7 // height
};
// ==================== ОСНОВНОЙ КОД ====================
TFT_eSPI tft = TFT_eSPI();
// Функция для вывода символов русского шрифта
void drawRussianChar(int x, int y, uint8_t char_code, uint16_t color = TFT_WHITE) {
if (char_code < SystemRus5x7Font.first || char_code > SystemRus5x7Font.last) {
return; // Символ вне диапазона
}
uint16_t index = (char_code - SystemRus5x7Font.first) * SystemRus5x7Font.width;
for (uint8_t col = 0; col < SystemRus5x7Font.width; col++) {
uint8_t line = pgm_read_byte(&SystemRus5x7Font.bitmap[index + col]);
for (uint8_t row = 0; row < SystemRus5x7Font.height; row++) {
if (line & 0x01) { tft.drawPixel(x + col, y + row, color); }
line >>= 1; }
}
}
// Функция для вывода русской строки
void drawRussianText(int x, int y, const char* text, uint16_t color = TFT_WHITE) {
int cursor_x = x;
int cursor_y = y;
for (int i = 0; text[i] != '\0'; i++) {
if (text[i] == '\n') {
cursor_y += SystemRus5x7Font.height + 2;
cursor_x = x; continue; }
// Проверка на выход за границы экрана
if (cursor_x + SystemRus5x7Font.width > tft.width()) {
cursor_x = x;
cursor_y += SystemRus5x7Font.height + 2;
}
drawRussianChar(cursor_x, cursor_y, text[i], color);
cursor_x += SystemRus5x7Font.width + 1;
}
}
// Улучшенная конвертация UTF-8 → CP866
String utf8_to_cp866_simple(const String &utf8_str) {
String result = "";
int i = 0;
while (i < utf8_str.length()) {
byte c = utf8_str[i];
if (c == 0xD0 && i + 1 < utf8_str.length()) {
byte c2 = utf8_str[i + 1];
if (c2 >= 0x90 && c2 <= 0xBF) { // А-п
result += (char)(0x90 + (c2 - 0x90));
i++;
} else if (c2 == 0x81) { // Ё
result += (char)0xF0;
i++;
} else {
result += (char)c;
}
}
else if (c == 0xD1 && i + 1 < utf8_str.length()) {
byte c2 = utf8_str[i + 1];
if (c2 >= 0x80 && c2 <= 0x8F) { // р-я
result += (char)(0xA0 + (c2 - 0x80));
i++;
} else if (c2 == 0x91) { // ё
result += (char)0xF1;
i++;
} else { result += (char)c; }
} else { result += (char)c; }
i++;
} return result; }
void setup() {
Serial.begin(115200);
pinMode(TFT_BL, OUTPUT);
digitalWrite(TFT_BL, HIGH);
tft.init();
tft.setRotation(1);
tft.fillScreen(TFT_BLACK);
Serial.println("SystemRus5x7 font ready!");
}
void loop() {
// Тест всех русских букв
tft.fillScreen(TFT_BLACK);
// Заглавные буквы А-Я + Ё
String uppercase = utf8_to_cp866_simple("АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ");
drawRussianText(0, 10, uppercase.c_str(), TFT_GREEN);
// Строчные буквы а-я + ё
String lowercase = utf8_to_cp866_simple("абвгдеёжзийклмнопрстуфхцчшщъыьэюя");
drawRussianText(0, 30, lowercase.c_str(), TFT_YELLOW);
// Тест с Ё и ё отдельно
String test_yo = utf8_to_cp866_simple("Ёлка ёжик");
drawRussianText(10, 70, test_yo.c_str(), TFT_RED);
delay(3000);
// Мигающий текст
for (int i = 0; i < 5; i++) {
tft.fillScreen(TFT_BLACK);
String text1 = utf8_to_cp866_simple("РАБОТАЕТ ЁЁ!");
drawRussianText(20, 20, text1.c_str(), TFT_RED);
String text2 = utf8_to_cp866_simple("@!#$%^&*");
drawRussianText(30, 35, text2.c_str(), TFT_RED);
String text3 = utf8_to_cp866_simple("GSDAAGSwqerwer");
drawRussianText(40, 65, text3.c_str(), TFT_RED);
delay(500);
tft.fillScreen(TFT_BLACK);
delay(500);
}
delay(3000);
}
ну почти работает))) если кто может подскажите пж как вывести Ёё и почему вместо английских букв у меня выводит символы ?
А чем английские буквы отличаются от символов?
andriano вот такие ```
@!#$%^&*
я просто не учел размеры текста, и символы заехали на английские буквы, разница от букв немного есть)))
