Экран на контроллере RA8875 и чип шрифтов GT21L16T1W
- Войдите на сайт для отправки комментариев
Имеется TFT экран на базе контроллера RA8875, так же на борту установлен чип со шрифтами GT21L16T1W, После небольшей доработки стандартной библиотеки для этого экрана удалось инициализировать чип шрифтов и вывести текст с их использованием.
Но возникла проблемка.
Штатно за вывод текста отвечает вот этот код:
Основная часть где вводим текст
char string[ ] = "Hello 123456 Привет 123456"; tft.textWrite(string);
А это как обрабатывается команда textWrite в библиотеке
void Adafruit_RA8875::textWrite(const char* buffer, uint16_t len) { if (len == 0) len = strlen(buffer); writeCommand(RA8875_MRWC); for (uint16_t i=0;i<len;i++) {writeData(buffer[i]); #if defined(__AVR__) if (_textScale > 1) delay(1); #elif defined(__arm__) if (_textScale > 0) delay(1); #endif } }
Но возникает проблема, для правильной кодировки символов, с кодом каждого символа необходимо произвести дополнительные манипуляции, взято из даташита на GT21L16T1W.
BaseAdd=0x56BDE +425*34 if (FontCode>=0x0400) and (FontCode<=0x045F) then Address = (FontCode– 0x0400) * 34+BaseAdd Else if (FontCode>=0x0490) and (FontCode<=0x04a3) then Address = (FontCode– 0x0490+96) * 34+BaseAdd
(Код сравнения символов и назначения чуть длиннее, но суть та же, арифметические операции к коду символа)
Попробовал сделать вот так:
void Adafruit_RA8875::textWrite(const char* buffer, uint16_t len) { if (len == 0) len = strlen(buffer); writeCommand(RA8875_MRWC); for (uint16_t i=0;i<len;i++) {char temp = buffer[i]; if (temp >= 0x0400 && temp <= 0x045F) {temp = temp - 0x0400 * 34 + 0x5A450;} else if (temp >= 0x0490 && temp <= 0x04A3) {temp = temp - 0x0490 + 96 * 34 + 0x5A450;} writeData(temp); #if defined(__AVR__) if (_textScale > 1) delay(1); #elif defined(__arm__) if (_textScale > 0) delay(1); #endif } }
Но выдаёт ошибки:
assignment of read-only location '*(buffer + ((unsigned int)i))'
По переводу на русский означает, что переменная только для чтения, но я же произвожу операции с temp, а не buffer?!
И вторая ошибка
invalid conversion from 'const char*' to 'char'
Понимаю, что явно ошибки в преобразовании и сравнении, но т.к. опыта в написании мало, прошу помощи.
Когда найдёте ошибку, то в строках 7 и 8 добавьте скобки, потому что умножение, например, более приоритетная операция нежели сложение или вычитание.
Когда найдёте ошибку, то в строках 7 и 8 добавьте скобки, потому что умножение, например, более приоритетная операция нежели сложение или вычитание.
Спасибо, учту.