Buenos Días,
He adquirido una pantalla TFT tactil (adjunto enlace)
la pantalla en cuestión es de 3,2" y viene con su shield para adaptarla al ardunino mega. su resolución es de 240x320 con el controlador IC9341. He modificado la libreria UTFT para adapatarla a su resolución y he utilizado la librería tactil UTouch, incluso he ejecutado el programa de calibración de los ejemplos y todo va bien, salvando que una vez cargado el programa, he tenido que desconectar todo físicamente, arduino, shield y pantalla y volver a ensamblarlo para que funcione. (no entiendo porque)
Hasta ahí todo mas o menos solucionado y me he puesto con mi proyecto (quiero controlar con una pantalla táctil en el puesto de mando de un barco, periféricos en la sala de maquinas con otro arduino en serie con el de la pantalla táctil)
La pantalla lleva varios menús, pero ... no tengo manera de hacer que funcione el táctil
Os cuento mis pasos ante mi desesperación inicializo todas las librerias y variables que de momento voy necesitando.
También genero una pequeña rutina, para que resalte los botones cada vez que pulso táctilmente
#include <UTFT.h> // Carga la librería TFT de la pantalla
#include <UTouch.h> // Carga la librería Tactil
UTFT myGLCD(ILI9327,38,39,40,41); //Define la pantalla como myGLCD y asigna pines
UTouch myTouch( 6, 5, 4, 3, 2); // Define el táctil como myTouch y asigna pines
extern uint8_t SmallFont[]; // Carga las Fuentes Smallfonts
extern uint8_t Arial_round_16x24[]; // Carga la Fuente Arial 16
extern uint8_t BigFont[]; // Carga la Fuente BigFont
extern uint8_t TinyFont[]; // Carga Fuente la TinyFont
int x , y ;
char currentPage;
Después creo las diferentes pantallas
void pantallaGeneral()
{
myGLCD.clrScr(); //Borra la pantalla
myGLCD.fillScr(0,0,0); //Pone la pantalla en negro
myGLCD.setFont (Arial_round_16x24);
myGLCD.setColor (0,0,255); //Asigno color azul
myGLCD.fillRoundRect (11,198,309,227); //Barra inferior
myGLCD.fillRoundRect (11,11,101,180); // CuadroIzda
myGLCD.fillRoundRect (118,11,205,180); // Cuadrocentro
myGLCD.fillRoundRect (219,11,309,180); // Cuadro sup dcha
myGLCD.setColor (255,255,255); //Asigno color blanco
myGLCD.drawRoundRect (11,198,309,227);//Marco Barra inferior
myGLCD.drawRoundRect (11,11,101,180); // Marco Izda
myGLCD.drawRoundRect (118,11,205,180); // Marco centro
myGLCD.drawRoundRect (219,11,309,180); // Marco dcha
myGLCD.print ("AJUSTES",CENTER,202);
myGLCD.print ("ELECTRON.",250,170,270);
myGLCD.print ("INTERIOR",45,165,270);
myGLCD.print ("EXTERIOR",145,165,270);
}
void pantallaInterior()
{
myGLCD.clrScr(); //Borra la pantalla
myGLCD.fillScr(0,0,0); //Pone la pantalla en negro
myGLCD.setFont (Arial_round_16x24);
myGLCD.setColor (0,0,255); //Asigno color azul
myGLCD.fillRoundRect (11,198,309,227); //Barra inferior
myGLCD.fillRoundRect (11,11,140,180); // Cuadro Potenciometro
myGLCD.fillRoundRect (150,11,309,90); // Cuadro sup dcha
myGLCD.fillRoundRect (150,101,309,180); // Cuadro inf dcha
myGLCD.setColor (255,255,255); //Asigno color blanco
myGLCD.drawRoundRect (11,198,309,227);//Marco Barra inferior
myGLCD.print ("MENU PRINCIPAL",CENTER,202);
myGLCD.print ("LUCES",188,30);
myGLCD.print ("PUENTE",179,50);
myGLCD.print ("LUCES",188,120);
myGLCD.print ("CONSOLA",170,140);
myGLCD.drawRoundRect (11,11,140,180);// Marco Cuadro Potenciometro
myGLCD.drawRoundRect (150,11,309,90); // Marco Cuadro sup dcha
myGLCD.drawRoundRect (150,101,309,180); // Matco Cuadro inf dcha
myGLCD.setFont (BigFont);
myGLCD.setColor (VGA_YELLOW); //Asigno color amarillo
myGLCD.fillRoundRect (21,21,131,170);
myGLCD.print ("DIMMER",25,160);
}
void pantallaExterior()
{
myGLCD.clrScr(); //Borra la pantalla
myGLCD.fillScr(0,0,0); //Pone la pantalla en negro
myGLCD.setFont (Arial_round_16x24);
myGLCD.setColor (0,0,255); //Asigno color azul
myGLCD.fillRoundRect (11,198,309,227); //Barra inferior
myGLCD.fillRoundRect (11,11,101,90); // Cuadro Sup Izda
myGLCD.fillRoundRect (11,101,101,180); // Cuadro Inf Izda
myGLCD.fillRoundRect (118,11,205,90); // Cuadro sup centro
myGLCD.fillRoundRect (118,101,205,180); // Cuadro inf centro
myGLCD.fillRoundRect (219,11,309,90); // Cuadro sup dcha
myGLCD.fillRoundRect (219,101,309,180); // Cuadro inf dcha
myGLCD.setColor (255,255,255); //Asigno color blanco
myGLCD.drawRoundRect (11,198,309,227);//Marco Barra inferior
myGLCD.drawRoundRect (11,11,101,90); // Marco Sup Izda
myGLCD.drawRoundRect (11,101,101,180); // Marco Inf Izda
myGLCD.drawRoundRect (118,11,205,90); // Marco sup centro
myGLCD.drawRoundRect (118,101,205,180); // Marco inf centro
myGLCD.drawRoundRect (219,11,309,90); // Marco sup dcha
myGLCD.drawRoundRect (219,101,309,180); // Marco inf dcha
myGLCD.print ("MENU PRINCIPAL",CENTER,202);
myGLCD.print ("NAV",240,40);
myGLCD.print ("FOND.",225,130);
myGLCD.print ("LUZ",30,30);
myGLCD.print ("PROA",25,50);
myGLCD.print ("LUZ",30,120);
myGLCD.print ("POPA",25,140);
myGLCD.print ("FOCO",125,40);
myGLCD.print ("VENT.",125,130);
}
void pantallaElectronica()
{
myGLCD.clrScr(); //Borra la pantalla
myGLCD.fillScr(0,0,0); //Pone la pantalla en negro
myGLCD.setFont (Arial_round_16x24);
myGLCD.setColor (0,0,255); //Asigno color azul
myGLCD.fillRoundRect (11,198,309,227); //Barra inferior
myGLCD.fillRoundRect (11,11,101,90); // Cuadro Sup Izda
myGLCD.fillRoundRect (11,101,101,180); // Cuadro Inf Izda
myGLCD.fillRoundRect (118,11,205,90); // Cuadro sup centro
myGLCD.fillRoundRect (118,101,205,180); // Cuadro inf centro
myGLCD.fillRoundRect (219,11,309,90); // Cuadro sup dcha
myGLCD.fillRoundRect (219,101,309,180); // Cuadro inf dcha
myGLCD.setColor (255,255,255); //Asigno color blanco
myGLCD.drawRoundRect (11,198,309,227);//Marco Barra inferior
myGLCD.drawRoundRect (11,11,101,90); // Marco Sup Izda
myGLCD.drawRoundRect (11,101,101,180); // Marco Inf Izda
myGLCD.drawRoundRect (118,11,205,90); // Marco sup centro
myGLCD.drawRoundRect (118,101,205,180); // Marco inf centro
myGLCD.drawRoundRect (219,11,309,90); // Marco sup dcha
myGLCD.drawRoundRect (219,101,309,180); // Marco inf dcha
myGLCD.print ("MENU PRINCIPAL",CENTER,202);
myGLCD.print ("VHF",240,40);
myGLCD.print ("RADAR",225,130);
myGLCD.print ("SONDA",17,40);
myGLCD.print ("PLOT.",20,130);
myGLCD.print ("AIS",140,40);
myGLCD.print ("MUSIC",123,130);
}
void drawFrame(int x1, int y1, int x2, int y2) // Resalta los botones al pulsarlos
{
myGLCD.setColor(255, 0, 0);
myGLCD.drawRoundRect (x1, y1, x2, y2);
while (myTouch.dataAvailable())
myTouch.read();
myGLCD.setColor(255, 255, 255);
myGLCD.drawRoundRect (x1, y1, x2, y2);
}
luego genero el setup
void setup() {
myTouch.InitTouch();
myTouch.setPrecision(PREC_MEDIUM);
myGLCD.InitLCD(); //Inicializo la pantalla
myGLCD.clrScr(); //Borra la pantalla
myGLCD.setBackColor(0, 0, 255);
pantallaInterior();
currentPage = '0'; // Asume pantallaInterior como pantalla de incio
}
y definitivamente empiezo con el loop
void loop() {
if( currentPage == "0") {
if (myTouch.dataAvailable()) {
myTouch.read();
x=myTouch.getX(); // coordenada X donde presiono
y=myTouch.getY(); // coordenada y donde presiono
if ( (x>15) && (x<300) && (y>199) && (y<229)) {//Coordenadas boton "MENU PRINCIPAL"
drawFrame(11,198,309,227);//Resalta botón
currentPage = '1';
myGLCD.clrScr();
pantallaGeneral();
}
if ((x>150) && (x<309) && (y>11) && (y<90)) {; // Coordenadas Cuadro sup dcha
drawFrame(150,11,309,90); //resalta botón
myGLCD.setColor (255,0,0); //Color rojo
myGLCD.fillRect(299,16,309,85); //Piloto indicativo (rectangulo rojo)
}
if ((x>150) && (x<309) && (y>101) && (y<180)) {; // Coordenadas Cuadro sup dcha
drawFrame(150,101,309,180); //resalta botón
myGLCD.setColor (255,0,0); //Color rojo
myGLCD.fillRect(299,106,309,175); //Piloto indicativo (rectangulo rojo)
}
}
}
}
pues bien, ni flores ... me podéis ayudar donde esta el fallo, el programa me compila bien sin proboemas
también me vendría bien saber donde me podría descargar tipos de letra (fonts) para esta pantalla y estas librerias.
Saludos,
(PD. soy muy nuevo en estas lides. si digo autenticas burradas, pido discupas de antemano)