Цветной графический TFT-экран 480×320 - пример работы с сенсорным экраном

v7ilnytskyy
Offline
Зарегистрирован: 23.04.2020

есть такой дисплей

http://remoute.bozon.tk/www/ph2.jpg

3,5" цветной TFT-шилд для Arduino Mega 2560 с разрешением 480х320 пикселей, 262К цветов. Построен на контроллере ILI9486, поддерживает 16-битный интерфейс. Подходит библиотека UTFT. На плате дисплея имеется разъем подключения SD-Card для хранения данных. "Одевается" на контроллер без дополнительных переходников и шилдов.

Дисплей работает так же с Arduino DUE! Строка инициализации (myGLCD(CTE40,38,39,40,41) как и для Arduino Mega2560.

Для работы с этим дисплеем подходит библиотека для контроллера HX8357.

Характеристики:

  • Тип дисплея: 3.5" TFT LCD Модуль
  • Тип контроллера: ILI9486
  • Разрешение: RGB 480х320 пк
  • Подсветка: 6 ультра ярких белых светодиода
  • Интерфейс: параллельный 16-bit
  • Размеры: 89.9 x 54.25 мм

 

вывод на экран с помощью библиотеки UTFT работает нормально.

однако считывание координат точки касания с Touch Screen не происходит.

ни с помощью библиотеки URTouch.h, ни с помощью TouchScreen.h

 

в чем может быть проблема?

 

помогите пожалуйста наладить чтение с сенсорного экрана.

 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Почитайте про тачскрин, конкретно про резистивный. Почитайте вручную данные с аналоговых входов. Если все нормально - то проблема в библиотеке, иначе - неисправен тачскрин.

v7ilnytskyy
Offline
Зарегистрирован: 23.04.2020

я уже много всего перечитал и перепробовал перед тем как открывать тему здесь.

меня смущает то, что во многих прочитанных мною текстах упоминалось о том что при создании в программе объекта тачскрин обычно указываются 5 параметров два из которых должны быть аналоговыми пинами.

дисплей же этот садится на ардуино мега как бутерод и на ардуино мега все посадочные контакты помечены как цифровые. то получается что ни один аналоговый контакт для дисплея не используется?

и что - тач скрин на дисплее физически прсутствует но работать с ним нельзя потому как он не подключен к ардуино?

или скорее всего я чего-то не понимаю и в чем прошу помочь разобраться.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Вы плохо читали - аналоговые пины используются по двойному назначению - пока не читают данные от экрана, читают данные с тачскрина. Так что забейте пока на экран и займитесь тачскрином. Отдельно. Подайте напряжение по оси Х и прочитайте по оси Y. и наоборот.

b707
Offline
Зарегистрирован: 26.05.2017

да нет там аналогового тачскрина, судя по распиновке.  Там скорее всего предполагался контроллер тача на SPI типа XPT2046, судя по контакту F_CS. но я не уверен. что он там реально есть.

ТС. поищите библиотеку тача под XPT2046 и попробуйте, вдруг заработает

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

b707 пишет:

да нет там аналогового тачскрина, судя по распиновке.  Там скорее всего предполагался контроллер тача на SPI типа XPT2046, судя по контакту F_CS. но я не уверен. что он там реально есть.

ТС. поищите библиотеку тача под XPT2046 и попробуйте, вдруг заработает

А я так и не увидел картинку - чёт там блокирует. ТС - а нормально картинку вставить несложно?

b707
Offline
Зарегистрирован: 26.05.2017

v7ilnytskyy
Offline
Зарегистрирован: 23.04.2020

попробовал библиотеку XPT2046_Touchscreen.h

этим вот скетчем из примеров

#include <XPT2046_Touchscreen.h>
#include <SPI.h>

#define CS_PIN  8
// MOSI=11, MISO=12, SCK=13

//XPT2046_Touchscreen ts(CS_PIN);
#define TIRQ_PIN  2
//XPT2046_Touchscreen ts(CS_PIN);  // Param 2 - NULL - No interrupts
//XPT2046_Touchscreen ts(CS_PIN, 255);  // Param 2 - 255 - No interrupts
XPT2046_Touchscreen ts(CS_PIN, TIRQ_PIN);  // Param 2 - Touch IRQ Pin - interrupt enabled polling

void setup() {
  Serial.begin(57600);
  ts.begin();
  ts.setRotation(1);
  while (!Serial && (millis() <= 1000));
}

void loop() {
  if (ts.touched()) {
    TS_Point p = ts.getPoint();
    Serial.print("Pressure = ");
    Serial.print(p.z);
    Serial.print(", x = ");
    Serial.print(p.x);
    Serial.print(", y = ");
    Serial.print(p.y);
    delay(1000);
    Serial.println();
  }
}

экран дисплея не трогаю. в монитор порта бесконечно выводятся нулевые значения для X и Y.

когда трогаю экран - ничего не меняется. продолжается вывод нулевых значений.

 

b707
Offline
Зарегистрирован: 26.05.2017

сорри, но вы в этом коде вовсе ничего не понимаете, да?

вставьте код по правилам. а то я вам даже номера строк указать не могу

v7ilnytskyy
Offline
Зарегистрирован: 23.04.2020
#include <XPT2046_Touchscreen.h>
#include <SPI.h>

#define CS_PIN  8
// MOSI=11, MISO=12, SCK=13

//XPT2046_Touchscreen ts(CS_PIN);
#define TIRQ_PIN  2
//XPT2046_Touchscreen ts(CS_PIN);  // Param 2 - NULL - No interrupts
//XPT2046_Touchscreen ts(CS_PIN, 255);  // Param 2 - 255 - No interrupts
XPT2046_Touchscreen ts(CS_PIN, TIRQ_PIN);  // Param 2 - Touch IRQ Pin - interrupt enabled polling

void setup() {
  Serial.begin(57600);
  ts.begin();
  ts.setRotation(1);
  while (!Serial && (millis() <= 1000));
}

void loop() {
  if (ts.touched()) {
    TS_Point p = ts.getPoint();
    Serial.print("Pressure = ");
    Serial.print(p.z);
    Serial.print(", x = ");
    Serial.print(p.x);
    Serial.print(", y = ");
    Serial.print(p.y);
    delay(1000);
    Serial.println();
  }
}

 

b707
Offline
Зарегистрирован: 26.05.2017

- в строке 04 нужно указать номер пина, к которому подключена ножка дисплея с обозначением F_CS

- строчку 11 закомментируйте, а строчку 07 - наоборот, раскомментируйте

v7ilnytskyy
Offline
Зарегистрирован: 23.04.2020

у меня очень поверхностное понимание кода. общий смысл. в пинах и внутренней механике я совершенно не ориентируюсь. мне бы только координаты точки касания получить.

v7ilnytskyy
Offline
Зарегистрирован: 23.04.2020

ничего не изменилось. по прежнему все время выводятся нуди для x и y без каки-либо касаний и на касания никакой реакции.

измененный скетч

#include <XPT2046_Touchscreen.h>
#include <SPI.h>

#define CS_PIN  45
// MOSI=11, MISO=12, SCK=13

XPT2046_Touchscreen ts(CS_PIN);
#define TIRQ_PIN  2
//XPT2046_Touchscreen ts(CS_PIN);  // Param 2 - NULL - No interrupts
//XPT2046_Touchscreen ts(CS_PIN, 255);  // Param 2 - 255 - No interrupts
//XPT2046_Touchscreen ts(CS_PIN, TIRQ_PIN);  // Param 2 - Touch IRQ Pin - interrupt enabled polling

void setup() {
  Serial.begin(57600);
  ts.begin();
  ts.setRotation(1);
  while (!Serial && (millis() <= 1000));
}

void loop() {
  if (ts.touched()) {
    TS_Point p = ts.getPoint();
    Serial.print("Pressure = ");
    Serial.print(p.z);
    Serial.print(", x = ");
    Serial.print(p.x);
    Serial.print(", y = ");
    Serial.print(p.y);
    delay(1000);
    Serial.println();
  }
}

 

v7ilnytskyy
Offline
Зарегистрирован: 23.04.2020

может быть можно как-то настроить такой вариант

#include <UTFT.h> 
#include <URTouch.h>

UTFT    myGLCD(CTE40,38,39,40,41);
URTouch  myTouch( 6, 5, 4, 3, 2);

UTFT работает нормально на вывод

а URTouch как не живая буд-то ее и нет.

может для этой модели дисплея (CTE40) нужно указывать другие цифры при создании объекта myTouch ?

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

v7ilnytskyy пишет:

может быть можно как-то настроить такой вариант

Да нихера - Вы проверили срабатывание тачскрина? Нет? - Идите в шопу!

Библиотеки им надо - а ручками? Совсем не могём?

v7ilnytskyy
Offline
Зарегистрирован: 23.04.2020

мне много лет. я могу много такого что ты и представить себе не можешь.

сюда я пришел за помощью. не можешь или не хочешь помочь - твое дело.

хамить не нужно. не порть себе карму. помни о смерти.

 

nik182
Offline
Зарегистрирован: 04.05.2015

Если F_CS подключен к 45 то  должно быть SPI: 50 (MISO), 51 (MOSI), 52 (SCK) - это так? 

v7ilnytskyy
Offline
Зарегистрирован: 23.04.2020

MISO 50

MOSI 51

а на 52 написано CLK

SCK такого вообще нету

на 53 есть SD_CS

nik182
Offline
Зарегистрирован: 04.05.2015

Это клок, он по разному называться может . SD_CS это выбор флэш карты. Можно кстати проверить - воткнуть флэшку и пример чтения загрузить, если прочитается, то miso mosi сlk воткнуты правильно. Я б ещё для проверки miso mosi накрест воткнул. А вдруг заработает?  Плато то какая? Я про ноги Mega 2560 говорил а не платы дисплея. Картинку что куда подключили надо.

mixail844
Offline
Зарегистрирован: 30.04.2012

немогу я по картинке понять ,какая из ножек должна отвечать за вывод тача из шилда (F_CS ? почему F ?) ,да и U5 не распаена .

ТС. .можете сфоткать шилд с лицевой стороны ? может бы защитную пленку и тач панель путаете?

разве еще выпускают экранные модули с тачем и без подобающего контроллера? 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Б-ть, у меня два таких экранчика, НЕТУ там тача, НЕТУ!!!

SD есть, а тача - НЕТУ. 

v7ilnytskyy
Offline
Зарегистрирован: 23.04.2020

такому решительному высказыванию трудно не поверить.

я вам всем очень благодарен за прояснение картины.

жду новый дисплей.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Тач есть у красненьких, 320х240 которые. Там точно есть

nik182
Offline
Зарегистрирован: 04.05.2015

Во во. Специально залез в ящик и посмотрел на микросхемы - XPT2046 распаяна и надпись на ней видно. Тач есть - красненькая.