display 7" TFTM070-4v2.1 su arduino mega

salve,
avrei un quesito… da ignorante/totalmente inesperto…
cercando non ho trovato risposte…
ho un arduino mega e un display 3,5 kuman (questo). con questo display ho sviluppato tutto il necessario e pare far il suo dovere.
vorrei sostituire questo display con uno più grande (questo).
c’è modo di adattare il “vecchio” codice e farlo funzionare con il nuovo display?
quindi, sfruttare le stesse librerie, o parte di esse e modificare il meno possibile?
o devo riscriverlo di sana pianta?
il fatto che il vecchio display è resistivo e il nuovo è capacitivo, è un problema?
se il display da 7" lo prendessi resistivo come quello da 3,5 cambierebbe qualcosa?
grazie!
inserisco la parte iniziale del codice del progetto, funzionante, con display 3,5"

//display touch
#include <MCUFRIEND_kbv.h>
#include <Adafruit_GFX.h>
#include <TouchScreen.h>
MCUFRIEND_kbv tft;

#include <EEPROM.h>                   //  To save button status on EEPROM

// The control pins for the LCD can be assigned to any digital or
// analog pins...but we'll use the analog pins as this allows us to
// double up the pins with the touch screen (see the TFT paint example).
#define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0
#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin

/*  Touch  */

#define YP A3  // must be an analog pin, use "An" notation!
#define XM A2  // must be an analog pin, use "An" notation!
#define YM 9   // can be a digital pin
#define XP 8   // can be a digital pin

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


// For better pressure precision, we need to know the resistance
// between X+ and X- Use any multimeter to read it
// For the one we're using, its 300 ohms across the X plate
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);

#define MINPRESSURE 10
#define MAXPRESSURE 1000

/*  End Touch  */

Grazie!

Non sei con un sistema operativo (esempio windows o linux) in cui il driver pilota il display, quindi a ogni scheda grafica metti un driver (fornito dal costruttore)
Stai usando specifica libreria per il tuo attuale display 3.5" anzi per il chip grafico interno al display
Se trovi una libreria "generica" e che supporta tutte e due i chip allora i comandi sono gli stessi.
Dubito che la libreria MCUFRIEND_kbv che usi possa pilotare anche il chip SSD1963 di quel display da 7"

ok… grazie per la risposta! lo supponevo… ma questo diciamo che sarebbe il problema minore… riscrivere la parte grafica utilizzando utft.

stessa cosa per il touch quindi immagino… non posso usare la touchscreen del vecchio progetto ma devo usare la UTouch del nuovo? in poche parole devo rifarmi dall’inizio… :frowning:

qualcuno mi può aiutare su come posso capire quali sono i pin che gestiscono il touch nel nuovo display?
mi sto rassegnando al pensiero di dover riscrivere tutto ma non riesco a capire come “gestire” il touch…
questo l’esempio fornito dal produttore:

//Web: http://www.buydisplay.com
  EastRising Technology Co.,LTD
  Examples for ER-TFTM070-4V2.1(800x480 Pixels) with Capacitive Touch Panel
  I2C Interface for Capacitive Touch Panel,8080 16-bit Interface for Display,5V Power Supply
  This program is a demo of how to use capacitive touch panel

  Tested and worked with:
  Arduino Mega 2560,Arduino Due
  Works with Arduino 1.6.0 IDE
****************************************************/

#include <stdint.h>
#include <UTFT.h>
#include <SPI.h>
#include <Wire.h>


uint8_t addr  = 0x38;  //CTP IIC ADDRESS
// Declare which fonts we will be using
extern uint8_t SmallFont[];

// Set the pins to the correct ones for your development shield
// ------------------------------------------------------------
// Standard Arduino Mega/Due shield            : <display model>,38,39,40,41

#define FT5206_WAKE 11
#define FT5206_INT   48
// Remember to change the model parameter to suit your display module!
UTFT myGLCD(SSD1963_800480, 38, 39, 40, 41); //(byte model, int RS, int WR, int CS, int RST, int SER)
uint16_t tx, ty;

enum {
  eNORMAL = 0,
  eTEST   = 0x04,
  eSYSTEM = 0x01
};

struct TouchLocation
{
  uint16_t x;
  uint16_t y;
};

TouchLocation touchLocations[5];

uint8_t readFT5206TouchRegister( uint8_t reg );
uint8_t readFT5206TouchLocation( TouchLocation * pLoc, uint8_t num );
uint8_t readFT5206TouchAddr( uint8_t regAddr, uint8_t * pBuf, uint8_t len );

uint32_t dist(const TouchLocation & loc);
uint32_t dist(const TouchLocation & loc1, const TouchLocation & loc2);

bool sameLoc( const TouchLocation & loc, const TouchLocation & loc2 );


uint8_t buf[30];

uint8_t readFT5206TouchRegister( uint8_t reg )
{
  Wire.beginTransmission(addr);
  Wire.write( reg );  // register 0
  uint8_t retVal = Wire.endTransmission();

  uint8_t returned = Wire.requestFrom(addr, uint8_t(1) );    // request 6 uint8_ts from slave device #2

  if (Wire.available())
  {
    retVal = Wire.read();
  }

  return retVal;
}

uint8_t readFT5206TouchAddr( uint8_t regAddr, uint8_t * pBuf, uint8_t len )
{
  Wire.beginTransmission(addr);
  Wire.write( regAddr );  // register 0
  uint8_t retVal = Wire.endTransmission();

  uint8_t returned = Wire.requestFrom(addr, len);    // request 1 bytes from slave device #2

  uint8_t i;
  for (i = 0; (i < len) && Wire.available(); i++)
  {
    pBuf[i] = Wire.read();
  }

  return i;
}

uint8_t readFT5206TouchLocation( TouchLocation * pLoc, uint8_t num )
{
  uint8_t retVal = 0;
  uint8_t i;
  uint8_t k;

  do
  {
    if (!pLoc) break; // must have a buffer
    if (!num)  break; // must be able to take at least one

    uint8_t status = readFT5206TouchRegister(2);

    static uint8_t tbuf[40];

    if ((status & 0x0f) == 0) break; // no points detected

    uint8_t hitPoints = status & 0x0f;

    Serial.print("number of hit points = ");
    Serial.println( hitPoints );

    readFT5206TouchAddr( 0x03, tbuf, hitPoints * 6);

    for (k = 0, i = 0; (i < hitPoints * 6) && (k < num); k++, i += 6)
    {
      pLoc[k].x = (tbuf[i + 0] & 0x0f) << 8 | tbuf[i + 1];
      pLoc[k].y = (tbuf[i + 2] & 0x0f) << 8 | tbuf[i + 3];
    }

    retVal = k;

  } while (0);

  return retVal;
}

void writeFT5206TouchRegister( uint8_t reg, uint8_t val)
{
  Wire.beginTransmission(addr);
  Wire.write( reg );  // register 0
  Wire.write( val );  // value

  uint8_t retVal = Wire.endTransmission();
}

void readOriginValues(void)
{
  writeFT5206TouchRegister(0, eTEST);
  delay(1);
  //uint8_t originLength = readFT5206TouchAddr(0x08, buf, 8 );
  uint8_t originXH = readFT5206TouchRegister(0x08);
  uint8_t originXL = readFT5206TouchRegister(0x09);
  uint8_t originYH = readFT5206TouchRegister(0x0a);
  uint8_t originYL = readFT5206TouchRegister(0x0b);

  uint8_t widthXH  = readFT5206TouchRegister(0x0c);
  uint8_t widthXL  = readFT5206TouchRegister(0x0d);
  uint8_t widthYH  = readFT5206TouchRegister(0x0e);
  uint8_t widthYL  = readFT5206TouchRegister(0x0f);

  //if (originLength)
  {
    Serial.print("Origin X,Y = ");
    Serial.print( uint16_t((originXH << 8) | originXL) );
    Serial.print(", ");
    Serial.println( uint16_t((originYH << 8) | originYL) );

    Serial.print("Width X,Y = ");
    Serial.print( uint16_t((widthXH << 8) | widthXL) );
    Serial.print(", ");
    Serial.println( uint16_t((widthYH << 8) | widthYL) );
  }

}




void setup()
{
  randomSeed(analogRead(0));

  Serial.begin(9600);
  Wire.begin();        // join i2c bus (address optional for master)

  // Setup the LCD
  myGLCD.InitLCD();
  // -------------------------------------------------------------
  pinMode(8, OUTPUT);  //backlight
  digitalWrite(8, HIGH);//on
  // -------------------------------------------------------------
  readOriginValues();
  pinMode     (FT5206_WAKE, INPUT);
  digitalWrite(FT5206_WAKE, HIGH );
  writeFT5206TouchRegister(0, eNORMAL); // device mode = Normal

  uint8_t periodMonitor = readFT5206TouchRegister(0x89);

  Serial.print("periodMonitor = ");
  Serial.println( periodMonitor, HEX );

  uint8_t  lenLibVersion = readFT5206TouchAddr(0x0a1, buf, 2 );
  if (lenLibVersion)
  {
    uint16_t libVersion = (buf[0] << 8) | buf[1];

    Serial.print("lib version = ");
    Serial.println( libVersion, HEX);
  }
  else
  {
    Serial.println("lib version length is zero");
  }

  uint8_t firmwareId = readFT5206TouchRegister( 0xa6 );

  Serial.print("firmware ID = ");
  Serial.println( firmwareId);

  pinMode     (FT5206_INT, INPUT);
  //digitalWrite(FT5206_INT, HIGH );


  myGLCD.setFont(SmallFont);

}

uint32_t dist(const TouchLocation & loc)
{
  uint32_t retVal = 0;

  uint32_t x = loc.x;
  uint32_t y = loc.y;

  retVal = x * x + y * y;

  return retVal;
}
uint32_t dist(const TouchLocation & loc1, const TouchLocation & loc2)
{
  uint32_t retVal = 0;

  uint32_t x = loc1.x - loc2.x;
  uint32_t y = loc1.y - loc2.y;

  retVal = sqrt(x * x + y * y);

  return retVal;
}

bool sameLoc( const TouchLocation & loc, const TouchLocation & loc2 )
{
  return dist(loc, loc2) < 50;
}

ho omesso il loop