Хех, странная проблемка. Имею TFT 7 дюймов, CTE shield и Arduino Due. Картинки показывает, всё зашибись. Настала пора поработать с тачем. Вот такой простенький скетч: Код (C++): #include <UTFT.h> #include <URTouch.h> extern uint8_t BigFont[]; UTFT myGLCD(CTE70,25,26,27,28); URTouch myTouch( 6, 5, 4, 3, 2); void setup() { myGLCD.InitLCD(LANDSCAPE); myGLCD.clrScr(); myGLCD.setFont(BigFont); myTouch.InitTouch(LANDSCAPE); myTouch.setPrecision(PREC_MEDIUM); myGLCD.fillScr(0, 0, 0); myGLCD.print("Wait for touch...",0,10); } void loop() { if(myTouch.dataAvailable()) { myTouch.read(); Debug(myTouch.getX(), myTouch.getY()); } } void Debug(int X, int Y) { char output[] = "X:xxx | Y:xxx"; myGLCD.setBackColor(0, 0, 0);//background of text is black myGLCD.setColor(255, 255, 255); // test color is white sprintf(output, "X:%03d | Y:%03d", X, Y); myGLCD.print(output, 50, 100); } Компилируется, загружается, и вот тут начинается самое интересное: если выткнуть питание и воткнуть снова, потом коснуться экрана - то на дисплее появляются значения координат, причём они ВСЕГДА равны -1. Потом, сколько не тыкай на экран - ни-че-го. Если опять передёрнуть питание - процесс повторяется сначала. Питал и от БП, и от USB, и от обоих сосков сразу - без изменений. В выхлопную трубу - тоже дул. Платы просмотрел, коротышей не нашёл. Скетч калибровки экрана из примеров к URTouch работает ровно так же - после пересброса питания отрабатывает одно касание - и на глушняк. Шо это за хрень и как с этим бороться - может, кто сталкивался и подскажет хотя бы направление? З.Ы. Экран такой: https://ru.aliexpress.com/item/7-7-...32665916475.html?spm=2114.13010708.0.0.MRTIAG Шилд такой: https://ru.aliexpress.com/item/TFT-...32658272354.html?spm=2114.13010708.0.0.MRTIAG Дунька такая: https://ru.aliexpress.com/wholesale...ative_id=SB_20171021070357&isViewCP=y&catId=0
Короче, кому интересно: Код (C++): URTouch myTouch( 6, 5, 32, 3, 2); Вот так тач начал отзываться, всё работает. Теперь осталось разобраться с поддержкой кириллицы в шрифтах.
И с кириллицей разобрался: взял отсюда основу: https://github.com/twsdwf/UTFT-rus, понял, что под Due не работает, как надо, полез в кишки, заменил Код (C++): ch = pgm_read_byte(utf8_rus_charmap + ch); на Код (C++): ch = utf8_rus_charmap[ch]; И у мну теперь есть два русских шрифта, сделанных хорошим человеком. А всё дело в том, что pgm_read_byte под Due определён по-другому, обратил внимание на warning при компиляции. Было - так: Код (C++): #define pgm_read_byte(addr) (*(const unsigned char *)(addr)) А стало- так: Код (C++): #define pgm_read_byte(data) *data Чуете, да, в чём дело? Говорили же - СКОБОЧКИ В МАКРОСАХ надо, обязательно! Если бы было вот так: Код (C++): #define pgm_read_byte(data) *(data) было бы всё норм. Вот такие пироги, короче
Русский работает норм, за исключением библиотеки UTFT_Buttons, т.к. она не знает, что можно выводить и русские символы из UTF8. Надо будет - перепилю библиотеку, пока - такой надобности не обнаружил, но всё возможно. Вот как выглядит сейчас: Короче, пока Добби доволен
С русским текстом на кнопках - всё теперь норм, пришлось делать копию библиотеки UTFT_Buttons, написать свой класс-посредник, короче, всё теперь работает: В аттаче к сообщению - тестовый скетч, практически пример из поставки UTFT: там видно, как юзать русские шрифты (файл шрифтов приложен) с библиотекой UTFT. Библиотеку UTFT_Buttons устанавливать необязательно - смотрите пример, как в скетче идёт работа с кнопками. Надеюсь, кому-нибудь будет полезно: работа, как видите, коллективная (я тоже чуть-чуть приложил свою руку), поэтому не поделиться - просто не могу, не имею морального права