Buenas, me presento antes de nada, Me llamo Mario y estoy haciendo un controlador para mi acuario con arduino Mega 2560, ya tengo controlada la parte del dimeo de leds, las sondas de temperatura y los reles que controlaran los calentadores y otros artilugios.
Mi problema es que he decidido usar una pantalla TFT tactil para controlar todos los parametros y no consigo que funcione, he probado infinidad de librerias
(UTFT, adafruit, ILIdue_buttons_master, etc...) y nada de nada.
El controlador que usa dicha pantalla es el ILI9341 el modelo de la pantalla es TFT_320QVT_9341, he buscado y rebuscado soluciones por internet pero con ninguna he conseguido que mi pantalla funcione, solo se queda en blanco.
Junto con la pantalla uso un shield, es un clon del de elecfreaks TFT lCD mega shield v2.2.
no se que hacer, creo que la pantalla quedara como pisapapeles.
os adjunto un par de fotos para que veais la pantalla y el shield.
Si alguien me puede ayudar se lo agradeceria.
Un saludo.
Dale una mirada a este post: New library for Mega and low cost HX8357B/C and ILI9481 480 x 320 displays - Displays - Arduino Forum.
Hay un fabricante de TFT´s que ofrece una versión similar a tu pantalla ILI9341 3.2", alli debe haber información respecto como controlarla con arduino.
Gracias, muchísimas gracias, llevo mas de diez días intentándolo y nada de nada, ha sido usar las librerías que me has facilitado y la pantalla como loca a escribir graficos, voy a probar la función táctil a ver si funciona.
Por supuesto ya te he dado mi karma, me has salvado la vida y ahora puedo continuar con el proyecto para mi acuario.
Abusando un poco, no sabrás de alguna librería para la función táctil?, lo intentare con la Utouch, que descargue de Henning Karlsen, si no voy a buscar otras, pero no se si moriré en el intento, si conoces alguna que me pueda servir te lo agradecería.
Un saludo.
Que bien que ha dado señales de vida.
Vayamos con calma. En la foto que has subido, veo que el TFT tiene los pines
T_IRQ, T_DO, T_DIN, T_CS Y T_CLK
Esto confirma que tiene el chip XPT2046 para controlar la pantalla táctil. En el backplate del TFT, el chip está marcado como I2. Te aseguro que con la librería Utouch podrás usar la pantalla táctil.
El shield que estás usando me parece que usa los pines digitales
6,5,4,3,2
Debes cargar el ejemplo UTouch_Calibration, no te asustes si no funciona a la primera, el shield que tienes a veces falla y no deja que la salida táctil funcione como debe. Tienes que desconectar el TFT del shield y a su vez debes desconectar el shield de tu arduino. Solo así podrás conseguir que cargue bien el procedimiento de calibración, repite varias veces el proceso de armado.
Es una falla recurrente y no sé como se puede solucionar, quizás con una versión 3.0 del shield, pero no creo que la saquen.
Una vez que consigas la tripleta de calibración, debes copiar el resultado del TFT, (mediante un editor de texto) al final del archivo UTouchCD.h, que está dentro de la carpeta de la librería Utouch.
PD: acá hay una discusión en la que refieren la pantalla que tienes, no está demás que le des una mirada
Perfecto, seguimos avanzando, el panel táctil ya se hace notar, aunque he encontrado otra dificultad y no puedo calibrarlo, el texto de pantalla esta invertido, con la librería que tu me has recomendado va perfecto, tanto imágenes como texto, pero al usar utft todo sale invertido, la función táctil parece que si va bien.
te voy a pasar las dos librería, la que funciona bien y la utft que invierte el texto, a ver si me puedes aconsejar algo.
Muchísimas gracias de nuevo.
TFT_HX8357.cpp (73.5 KB)
TFT_HX8357.h (10.8 KB)
UTFT.h (9.39 KB)
UTFT.cpp (27.5 KB)
He continuado probando cosillas, he conseguido configurar la pantalla para que no se vea invertida, en el código he usado el driver ILI9327 y ya se ve bien, aunque no consigo verla al completo, por arriba, abajo y a la derecha perfecto, pero a la izquierda me falta un trozo de pantalla que no consigo ver, he conseguido calibrar la parte táctil, pero como en las cruces de la izquierda no puedo pulsar justo en el centro, al quedar fuera de la pantalla, pues la función táctil va muy bien en la parte de la derecha, pero a medida que me acerco a la izquierda pierde fiabilidad, produciéndose un descuadre importante.
No se si en la librería o el código puedo definir el tamaño de la pantalla para que pueda ver todos los textos al completo.
adjunto una foto, para que se vea lo que he intentado explicar.
Es posible el cambio de resolución.
Respalda el archivo UTFT.h por si algo sale mal al modificarlo o bien consigues una pantalla ILI9327 en un futuro.
Lo que sigue es pura especulación, pero creo que podría funcionar, no tengo una pantalla como la tuya para confirmarlo.
De acuerdo con el archivo UTFT.ccp, el ILI9327, es el segundo controlador que lee el filtro de UTFT, tiene el índice 1, así que el constructor puede llamarse como UTFT myGLCD(1,38,39,40,41) o bien como UTFT myGLCD(ILI9327,38,39,40,41).
Abre el archivo UTFT.ccp con el block de notas, localiza la función que contiene todas las dimensiones y métodos de conexión de los controladores, es la segunda de arriba hacia abajo
UTFT::UTFT(byte model, int RS, int WR, int CS, int RST, int SER)
{
word dsx[] = {239, 239, 239,...};
word dsy[] = {319, 399, 319,...};
byte dtm[] = {16, 16, 16, ...};
El segundo número de cada uno de los tres arrays corresponde a las dimensiones del controlador ILI9327, tiene los parámetros dsx = 239 y dsy = 399. Indica que la pantalla tiene una resolución de 0 a 239 y de 0 a 399, es decir 240x400 pixeles. La libreria UTFT considera la posición vertical como referencia base. El tercer array indica que la pantalla se conecta a 16 bits, es decir emplea todas las lineas DBx del driver.
Modifica el segundo número del array word dsy y coloca 319 en lugar de 399
UTFT::UTFT(byte model, int RS, int WR, int CS, int RST, int SER)
{
word dsx[] = {239, 239, 239,...};
word dsy[] = {319, 319, 319,...};
byte dtm[] = {16, 16, 16, ...};
Guarda los cambios y cierra el archivo. Reinicia el IDE de arduino para que los cambios surtan efecto. Ahora la pantalla será de 240x320, que corresponde a la resolución de tu pantalla. Espero que con eso ya puedas calibrarla como se debe
Tienes un constructor ILI9341 a 16 bits, basado en el ILI9327.
PD: sería factible crear un ILI9341_16 con indice 32 (UTFT vigente llega hasta 31), solo hay que aventurarse varias horas en el datasheet del ILI9341 para extraer los registros adecuados para 16 bits, tratando de encontrar cada uno de los parámetros equivalentes al ILI9327.
Quizás están dentro de la librería HX8357 que mencionas que si funcionó
Bueno pues , por fin todo correcto, muchísimas gracias una vez mas, modifique el array que me dijiste y perfecto, función táctil calibrada y funcionando sin problemas y pantalla con la resolución adecuada.
voy a escribir unas líneas a modo de resumen por si pueden ayudar a alguien:
1-Si no consigues configurar tu pantalla no te desesperes, pensaras que algo esta roto, pero casi seguro que es problema de configuración, usa la técnica de ensayo y error , cuando te aburras o desesperes pregunta, que en el foro hay gente experta con muchas ganas de ayudar.
2-descarga librerías e información que creas que te puede ser útil, crea copias de seguridad de los archivos que tengas que modificar, a veces modificas algo, no funciona lo intentas dejar como estaba, pero no hay manera.
3-Prueba diferentes librerías, La que he visto mas completa es la librería UTFT de rinky-dink electronics.
Ve modificando el código el la línea TFT myglcd (aquí tu modelo de TFT ,38,39,40,41), prueba una por una todas las posibles pantalla que puedes ver dentro del archivo UTFT.h, ve cargando el código al arduino con cada modificación y añade comentarios de ayuda en la librería, por ejemplo:
#define ILI9327 //Se ve todo bien pero la resolución es mayor que la de mi pantalla
#define ST7735 //Se ve bien pero al revés, efecto espejo
etc.......
4-Si tras encontrar la librería adecuada, tu pantalla tiene diferente resolución, es decir que los gráficos no aprovechan toda la pantalla o que por el contrario hay gráficos que no ves por que tu pantalla es pequeña, entonces debes modificar el archivo UTFT.ccp busca esto:
UTFT::UTFT(byte model, int RS, int WR, int CS, int RST, int SER)
{
word dsx[] = {239, 239, 239,...};
word dsy[] = {319, 399, 319,...};
byte dtm[] = {16, 16, 16, ...};
y pon esto si tu pantalla es de 240 x 320
UTFT::UTFT(byte model, int RS, int WR, int CS, int RST, int SER)
{
word dsx[] = {239, 239, 239,...};
word dsy[] = {319, 319, 319,...};
byte dtm[] = {16, 16, 16, ...};
para otro tamaño de pantalla debes modificar los arrays dsx o dsy poniendo el tamaño correcto, si es el caso consulta en el foro, seguro que te orientan.
5-Para configurar la función táctil de la pantalla, yo he usado la librería Utouch, el ejemplo utouch calibration que también es de rinky-dink electronics.
Una vez cargado el código sigue las instrucciones que te van apareciendo en pantalla, que consisten en pulsar en la pantalla y seguidamente dejar pulsado y liberar unos cuadro situados en los bordes de la pantalla en una secuencia concreta. Tras esto en una ultima pantalla aparece una tripleta de calibración.
algo parecido a esto:
CAL_X 0x00378F66UL
CAL_Y 0x03C34155UL
CAL_S 0x000EF13FUL
Bueno pues con estos datos abres el archivo utouchCD.h y modificas los datos existentes, con un editor de texto vale.
Si no funciona, no te desesperes, seguro que todo es correcto, pero por causas extrañas la función táctil no siempre va bien, arma y desarma el shield y pantalla del arduino, reenvía el código las veces que sean necesarias, al final alguna de esas veces funcionara, de momento no he encontrado solución para la fiabilidad en el funcionamiento de la función táctil, no hay termino medio a veces funciona perfectamente y otras no funciona nada.
6-Si intentas algo y no sale, no te agobies, descansa un poco y vuelve a intentarlo, si tras intentarlo de nuevo todo sigue igual, déjalo para mañana, seguro que no es tan urgente.
Cuando consultes en el foro, ten paciencia, la gente ayuda, pero no esta pendiente de que escribas algo para responder, una buena táctica es hacer la pregunta y volver a mirar el foro al día siguiente, así no te desesperas por que no te contestan.
Bueno ya solo me queda dar una vez mas las gracias a TFTLCDCyg, sin su ayuda todavía me estaría peleando con la pantalla y con el proyecto del acuario parado, este resumen esta basado en su conocimiento, mis aportaciones han sido nulas.
Me alegra que haya funcionado.
De hecho tuve oportunidad de conseguir una pantalla con el mismo controlador ILI9341, de 3.2", con un zócalo de 34 pines. Conseguí hacerla funcionar en un Due leyendo nuevamente el post.
Voy a armar un zócalo sobre un proto-shield, para conectar la pantalla mediante una extensión, así no se bloquearán los pines restantes del Due y no habrá que preocuparse por un cable suelto.
Te dejo un ejemplo de menú táctil con fondos de imágenes RAW que se cargan desde un lector microSD externo, pero en tu caso se puede usar el lector SD que ya tiene tu pantalla.
Van las librerías necesarias que permiten leer los archivos de imagen tipo RAW desde el lector SD, usando la librería SDFat. Funcionan en conjunto con la librería UTFT que ya tienes.
Sketch, Imagenes RAW, librerias
Las librerias las desarrolló el forero ghlawrence2000, acá está el hilo donde me enteré de ellas. Hay dos versiones: UTFT_tiny y UTFT_SdRAW, la primera permite la carga de imágenes RAW completas en un paso, la segunda me parece que tiene la capacidad de mostrar fragmentos, pero no la he explorado a fondo.
PD: de cuando en cuando no está demás recordar las bases de aprendizaje, hace un buen tiempo que no usaba la libreria UTFT
Hola a todos,Mario tengo el mismo problema que tu con esa pantalla y el shield.me podrias decir qe librerias le pusiste, soy incapaz de hacerla funcionar.gracias.
gracias ,ya he condeguido que funcione la tft y el touch.( ILI9341_16 perfecto con este).voy a por la sd.



