Touch Screen TFT LCD Shield 2.4" on Arduino Mega

I BOUGHT THIS TOUCH SCREEN SHIELD:

IT WORKS WITH ARDUINO UNO, BUT NOT WITH THE MEGA.
THIS IS THE PROGRAM:

#include <Adafruit_GFX.h> // Libreria de graficos
#include <Adafruit_TFTLCD.h> // Libreria de LCD
#include <TouchScreen.h> // Libreria del panel tactil

// Pines necesarios para los 4 pines del panel tactil
#define YP A2 // Pin analogico A1 para ADC
#define XM A3 // Pin analogico A2 para ADC
#define YM 8
#define XP 9

// Definimos la presion máxima y minima que podemos realizar sobre el panel
#define MINPRESSURE 1
#define MAXPRESSURE 1000

TouchScreen ts = TouchScreen(XP, YP, XM, YM, 364);

// Original values
#define TS_MINX 150
#define TS_MINY 120
#define TS_MAXX 920
#define TS_MAXY 940

/*short TS_MINX = 125; // Coordenadas del panel tactil para delimitar
short TS_MINY = 85; // el tamaño de la zona donde podemos presionar
short TS_MAXX = 965; // y que coincida con el tamaño del LCD
short TS_MAXY = 905; */

#define LCD_CS A3 // Definimos los pines del LCD
#define LCD_CD A2 // para poder visualizar elementos graficos
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4

#define BLACK 0x0000 // Definimos los colores
#define BLUE 0x001F // que utilizaremos para
#define RED 0xF800 // el texto y los elementos graficos
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF

Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET); // Instancia LCD

int X; // Variables que almacenaran la coordenada
int Y; // X, Y donde presionemos y la variable Z
int Z; // almacenara la presion realizada

int stato = 0; // variable "flag" para control rebotes
int sensor=0;

#define ledA 5
#define ledK 3

void setup(void){

tft.begin(0x9341); // Iniciamos el LCD especificando el controlador ILI9341.
tft.setRotation(1);

tft.fillScreen(BLUE); // Pintamos la pantalla de Rojo
Serial.begin(9600);
pinMode(13, OUTPUT);
pinMode(5, OUTPUT);
pinMode(4, OUTPUT);

tft.setCursor(60,35); // Colocamos el cursor
tft.setTextSize(4); // Especificamos el tamaño del texto
tft.setTextColor(RED); // Definimos el color del texto
tft.println("HELLO"); // Escribimos por pantalla
}

void loop(){
sensor=analogRead(5);
lecturaPanel(); // Realizamos lectura del panel para detectar presion y coordenadas

Serial.print("X: ");
Serial.print(X);
Serial.print(" Y: ");
Serial.print(Y);
Serial.print(" Z: ");
Serial.println(Z);

if((X > 28 && X < 58) && (Y > 200 && Y < 230) && (Z > MINPRESSURE && Z < MAXPRESSURE) && (stato==0)) {

tft.fillRect(0, 0, 320, 250, YELLOW);
tft.drawRect(0,0, 40, 40, RED);
tft.drawRect(280,0, 40, 40, GREEN);
tft.setCursor(60,35); // Colocamos el cursor
tft.setTextSize(4); // Especificamos el tamaño del texto
tft.setTextColor(RED); // Definimos el color del texto
tft.println(sensor);

stato=1;
delay(10);
}

else if((X > 28 && X < 58) && (Y > 200 && Y < 230) && (Z > MINPRESSURE && Z < MAXPRESSURE) && (stato==1)) {

tft.fillRect(0,0, 40, 40, RED);
tft.fillRect(280,0, 40, 40, GREEN);

stato=0;
delay(10);
}

}

void lecturaPanel()
{
digitalWrite(13, HIGH);
TSPoint p = ts.getPoint(); // Realizamos lectura de las coordenadas
digitalWrite(13, LOW);

pinMode(XM, OUTPUT); // La librería utiliza estos pines como entrada y salida
pinMode(YP, OUTPUT); // por lo que es necesario declararlos como salida justo
// despues de realizar una lectura de coordenadas.

// Mapeamos los valores analogicos leidos del panel tactil (0-1023)
// y los convertimos en valor correspondiente a la medida del LCD 320x240
X = map(p.x, TS_MAXX, TS_MINX, tft.width(), 0);
Y = map(p.y, TS_MAXY, TS_MINY, tft.height(), 0);
Z = p.z;
}

IF I PUT THE SHIELD ON ARDUINO MEGA LIKE I DID FOR THE UNO, IT DOESN'T WORK.

What can I do?
Thanks.

prova_touch_screen_senza_ritardi.ino (3.74 KB)

On Mega you have to use different pins, connecting LCD D0-D7 to pins 22-29, so you can not just plug the shield on the board. I suggest to read the Adafruit_TFTLCD library files for details.

Cheers, Ale.

Hi.

I use "same" 2.4 cheap ebay display with this code.

2.4 tft

Same code for UNO as mega.

Just check on code how it is initialized.