Conectar TFT táctil a Arduino Mega

Antes que nada decir que he estado buscando aquí y por la web, y no encuentro como comenzar con la TFT táctil de 7 pulgadas.
El proyecto consiste en automatizar un acuario de 500 litros, tengo el Sketch funcionando conectado el Mega con un DS3231, 4 sensores de temperatura, un buzzer de alarma y un módulo de 8 relés.
Pongo el Sketch por si a alguien le interesa:

#include <DS3231.h>
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>

DS3231 Clock;

byte year, month, date, DoW, hour, minute, second;
byte Buzzer1=6;  byte LedsColor=7;  byte FuenteTC420=8;  byte SolenoideCO2=9; byte ElectroBomba=10;  byte Agitador=11;
byte BombasPeristalticas=12; byte LamparaUV=13; byte LuzDeLuna=14; byte CalentadorSuelo=22; byte TemperaturaAgua=24;
byte VentiladoresLeds=26; byte VentiladoresCircuitos=28;
    //Se establecen los 4 pines -entre paréntesis- de los Sensores de Temperatura: 
OneWire ourWire1(2);  OneWire ourWire2(3);  OneWire ourWire3(4);  OneWire ourWire4(5);

    //Se declaran las tres variables u objetos para los 4 Sensores:  
DallasTemperature SensorSuelo(&ourWire1);  DallasTemperature SensorAgua(&ourWire2);
DallasTemperature SensorLeds(&ourWire3);   DallasTemperature SensorCircuitos(&ourWire4);

void setup() {
  Wire.begin(); // Se inicia la interfaz I2c
  //Se inician los pines de salida:
  pinMode(Buzzer1,OUTPUT);  pinMode(LedsColor,OUTPUT);  pinMode(FuenteTC420,OUTPUT);  pinMode(SolenoideCO2,OUTPUT);  
  pinMode(ElectroBomba,OUTPUT); pinMode(Agitador,OUTPUT); pinMode(BombasPeristalticas,OUTPUT); pinMode(LamparaUV,OUTPUT); 
  pinMode (LuzDeLuna,OUTPUT);  pinMode(CalentadorSuelo,OUTPUT); pinMode(TemperaturaAgua,OUTPUT); pinMode(VentiladoresLeds,OUTPUT); 
  pinMode(VentiladoresCircuitos,OUTPUT);
  
  Serial.begin(9600);
      //Se inician los cuatro Sensores de temperatura:
  SensorSuelo.begin();  SensorAgua.begin();  SensorLeds.begin();  SensorCircuitos.begin();
  
 }

void loop() {
  delay(100);
      //Preparan los Sensores para la lectura:
  SensorSuelo.requestTemperatures();    byte temp1= SensorSuelo.getTempCByIndex(0);
  SensorAgua.requestTemperatures();     byte temp2= SensorAgua.getTempCByIndex(0);
  SensorLeds.requestTemperatures();     byte temp3= SensorLeds.getTempCByIndex(0);
  SensorCircuitos.requestTemperatures();byte temp4= SensorCircuitos.getTempCByIndex(0);  
    
      //Se lee e imprime la temperatura de los cuatro Sensores en grados Celsius: 
  Serial.print("TEMPERATURA DEL SUELO ");  Serial.print(temp1); Serial.println(" GRADOS");
  Serial.print("TEMPERATURA DEL AGUA ");  Serial.print(temp2); Serial.println(" GRADOS");
  Serial.print("TEMPERATURA DE LOS LEDS ");Serial.print(temp3); Serial.println(" GRADOS");
  Serial.print("TEMPERATURA DEL CIRCUITO ");Serial.print(temp4); Serial.println(" GRADOS");
    
    //Se activa el pin correspondiente según cada registro de temperatura:
if (temp1<=26) {Serial.println("ON CABLE CALENTADOR (Pin 22)"); digitalWrite(CalentadorSuelo,1);}
else           {Serial.println("OFF CABLE CALENTADOR (Pin 22)");  digitalWrite(CalentadorSuelo,0);}
    //En el caso de la temperatura del agua mayor de 28 grados se apaga el calentador y se activa el Buzzer1:
if (temp1>=29) {Serial.println("TEMPERATURA DEL SUELO MAYOR DE 29 GRADOS (Pin 22)!!!"); 
                digitalWrite(CalentadorSuelo,0); 
                analogWrite(Buzzer1,494);  delay(1000); digitalWrite(Buzzer1, 0); delay(100);}
if (temp3>39)  {Serial.println("ON VENTILADORES DE LEDS (Pin 26)"); digitalWrite(VentiladoresLeds,1);}
else           {Serial.println("OFF VENTILADORES DE LEDS (Pin 26)");  digitalWrite(VentiladoresLeds,0);}

if (temp4>29)  {Serial.println("ON VENTILADORES DEL CIRCUITO (Pin 28)"); digitalWrite(VentiladoresCircuitos,1);}
else           {Serial.println("OFF VENTILADORES DEL CIRCUITO (Pin 28)");  digitalWrite(VentiladoresCircuitos,0);}

Clock.getTime(year, month, date, DoW, hour, minute, second);  //Se rescata la información del Reloj DS3231
      
if (hour<10)    {Serial.print(0);  Serial.print(hour, DEC);  Serial.print(":");}  //Agrega un cero para el formato de 2 cifras
else            {Serial.print(hour,DEC);  Serial.print(":");}
if (minute<10)  {Serial.print(0);  Serial.print(minute, DEC);  Serial.print(":");}//Agrega un cero para el formato de 2 cifras
else            {Serial.print(minute,DEC);  Serial.print(":");}
if (second<10)  {Serial.print(0);  Serial.println(second, DEC);}     //Agrega un cero para el formato de segundos de 2 dígitos
else            {Serial.println(second,DEC);}
  
   //Rele que enciende el circuito de Leds de 3 watts de colores cuatro veces al día:
if ((hour==12||hour==13||hour==14||hour==15) && (minute<30))
      {digitalWrite(LedsColor, 1);  
      Serial.println("PIN-7-ON----> Leds de 3 Watts de Colores (12/13/14/15 Hs durante 30 min)");}
else
      {digitalWrite(LedsColor, 0);   
      Serial.println("PIN-7-OFF---> Leds de 3 Watts de Colores (12/13/14/15 Hs durante 30 min)");}

   //Rele que enciende la Fuente de Alimentación de 12 voltios (30 Amperios) que alimenta Leds 10w
if (hour>=10 && hour<22)
  {digitalWrite(FuenteTC420, 1);   
   Serial.println("PIN-8-ON----> Fuente de 12V Leds efecto Amanecer-Anochecer (de 10 a 22 Hs)");}
else
  {digitalWrite(FuenteTC420, 0);   
   Serial.println("PIN-8-OFF---> Fuente de 12V Leds efecto Amanecer-Anochecer (de 10 a 22 Hs)");}

   //Rele que enciende el Solenoide de CO2 durante 10 horas:
if (hour>=10 && hour<20)
     {digitalWrite(SolenoideCO2, 1);   
      Serial.println("PIN-9-ON----> Solenoide CO2 (de 10 a 20 Hs)");}
else
      {digitalWrite(SolenoideCO2, 0);   
      Serial.println("PIN-9-OFF---> Solenoide CO2 (de 10 a 20 Hs)");}
    
    //Rele que enciende la Electrobomba durante 5 minutos cuatro veces al día:
if ((hour==0|hour==6||hour==12||hour==18) && (minute<5))
     {digitalWrite(ElectroBomba, 1);   
     Serial.println("PIN-10-ON----> Electrobomba de Agua (00/06/12/18 Hs 5 min)");}
else
     {digitalWrite(ElectroBomba, 0);   
     Serial.println("PIN-10-OFF---> Electrobomba de Agua (00/06/12/18 Hs 5 min)");}

    //Rele que enciende un agitador de líquidos para antialgas:
if ((hour==0|hour==6||hour==12||hour==18) && (minute>=5 && minute<=10))
     {digitalWrite(Agitador, 1);   
     Serial.println("PIN-11-ON---->Agitador (00/06/12/18 Hs durante 5 min)");}
else
     {digitalWrite(Agitador, 0);   
     Serial.println("PIN-11-OFF--->Agitador (00/06/12/18 Hs durante 5 min)");}
   
   //Rele que enciende las bombas Peristálticas de fertilizantes:
if ((hour==0||hour==6||hour==12||hour==18) && (minute==10) && (second<15))
    {digitalWrite(BombasPeristalticas, 1);   
    Serial.println("PIN-12-ON----> Bombas Peristálticas (00:10/06:10/12:10/18:10 Hs 15 seg)");}
else
    {digitalWrite(BombasPeristalticas, 0);   
    Serial.println("PIN-12-OFF---> Bombas Peristálticas (00:10/06:10/12:10/18:10 Hs 15 seg)");}

    //Rele que enciende la Lámpara Germicida:
if (hour>=8 && hour<12 || hour>=20 && hour<24)
    {digitalWrite(LamparaUV, 1);   
    Serial.println("PIN-13-ON----> Lampara UV 9 watt (8 a 12 y 20 a 24 Hs)");}
else
    {digitalWrite(LamparaUV, 0);   
    Serial.println("PIN-13-OFF---> Lampara UV 9 watt (8 a 12 y 20 a 24 Hs)");}

    //Rele que enciende los Leds azules (luz de luna):
if (hour>=22 || hour<10)  {digitalWrite(LuzDeLuna, 1); Serial.println("PIN-14-ON----> Luz de Luna (de 22 a 10 Hs)");}
else  {digitalWrite(LuzDeLuna, 0);  Serial.println("PIN-14-OFF---> Luz de Luna (de 22 a 10 Hs)");}

}

Quiero comenzar con el siguiente display:

TFT

Pero ahora mismo no sé cómo conectar el display al Arduino, ni que librería/as utilizar, vamos, que estoy en pañales.
Una ayudita, por favor.

Busca en la librería TFT este controlador SSD1963 y descoméntalo si lo esta y por supuesto comenta el que estaba sin //
Prueba los ejemplos y luego a trabajar.

Disculpa como siempre mi ignorancia :confused:

Abrí las librerías TFT.h y la TFT.ccp pero no he encontrado lo del SSD1963 que entiendo que es el chip de la TFT.
He abierto el primer sketch de ejemplo, el TFTBitmapLogo y la página de los tutoriales donde están los circuitos, pero las siglas que aparecen para conexión con el Arduino no se corresponden con las de mi placa :o

Bueno, veo que estoy equivocado. Respondí basado en la librería que yo he usado y que no es TFT directamente.
Ahora por lo que he leido tu librería debería ser facilmente adapatable.

Mi primer preocupación es que es una TFT 3.3V has leído que atras hay una mención para 3.3 y para 5V supongo?

Usa esta UTFT Library a menos que el experto en TFT diga lo contrario y hablo de TFTLCYcyg
Hay un hilo en Hardware y otro en Documentación donde hay comentarios extensos y profundos sobre todo tipo de TFT. Ve lee y de ahi sacarás buena información.

Pero con UTFT va a funcionar haciendo lo que te dije al comienzo.

Es correcto surbyte, la librería es la UTFT. Debe buscar el controlador SSD1963.

Para MEGA o Due necesita un shield-TFT respectivo, con eso se evitará divertirse con decenas de cables.

Hola, he bajado la librería UTFT.
Supongo que el shield a que se refieren será uno como este:

Shield Aliexpress

Shield eBay

Preguntas:

1.-Si es así, tendré que esperar hasta que llegue, mientras tanto dónde puedo encontrar documentación para poder hacer las conexiones, aunque sean muchos cablecitos, por no esperar digo :slight_smile:

2.- Cual programa de ejemplo creen que es más sencillo como para hacer los primeros pasos en este tema?

La cuestión es un poco complicada con el hardware que quieres usar, tu pantalla tiene lógica de 3.3V, quieres usar un arduino MEGA que funciona con lógica de 5V; debes conectar un conversor lógico de 5V a 3.3V o bien construir un divisor de voltaje con dos resistencias para cada linea de unión. El shield para mega viene con todos los conversores de voltaje necesarios y te ahorra el cableado.

El shield con PCB blanco es la versión mas reciente para MEGA, así que deberías conseguir ese.

No intentes conectar directamente tu pantalla al MEGA, ya que la podrías dañar en el curso del experimento.

Con el Due las cosas son diferentes, puedes conectar la pantalla siguiendo hilo por hilo el cableado señalado en la librería UTFT. El shield en este caso te permitirá ahorrarte todos esos cables.

Te sugiero tener paciencia hasta que llegue el shield.

PD: familiarizate con la libreria UTFT, URTouch, el manejo del lector SD, te recomiendo que mires videos y busques tutoriales en la red.

Tu pantalla viene con un chip que tiene precargadas imagenes y fuentes, podrías averiguar como lo debes usar para sacarle el mayor provecho a tu pantalla.

Por cierto para poder usar los elementos de tu proyecto debes construir una interface entre el MEGA y el shield de la pantalla.

Hola, gracias por contestar con suficiente claridad TFTLDDCyg (jo, si tu nik fuesen las siglas de tu apellido serías algo así como de la más rancia oligarquía, jajaja!! -es broma-)
Pues esperaré a recibir el shield, seguiré leyendo (no creas, llevo un montón de horas leyendo e intentando entender esta pantalla TFT y me ha sabido más a pérdida de tiempo que a otra cosa), pero lo seguiré intentando, estoy bastante en pañales en el tema de electrónica y de Arduino, pero todo se andará, a propósito, entiendo que el shield a que te refieres es el que puse en el link del mensaje de más arriba como "Shield eBay" verdad?
Pues a empollar las dos librerías que me indicas, y el tema del lector de tarjetas.
En cuanto a la alimentación tengo unos modulitos "step-down" con un display que ya he probado y parecen bastante exactos, como para alimentar la TFT (y también el Arduino) desde una fuente de alimentación conmutada de 220 AC a 12 DC.
Lo que menos me ha quedado claro de tu mensaje es lo que pones al final sobre construir una interface entre el MEGA y el Shield.

PD: como sabrás, y queda bastante claro al leer muchos de los posts de este foro, un gran porcentaje de gente que se asoma a este mundo del Arduino -al igual que yo- no somos ingenieros electrónicos, ni informáticos, ni siquiera electricistas, y asimismo he comprobado al leer esos mismos posts, que en ocasiones se les responde con poca actitud didáctica, que no digo que todos los que responden -y agradecidos desde ya debemos estar a todos ellos- sean didactas, pero creo que deberían responder bajando al nivel de quien pregunta, de lo contrario solo crean incertidumbre.
Yo en mi campo, me enfrento diariamente a esas situaciones y no me canso de "bajarme del burro" para explicar una y otra vez, las veces que sean necesarias, lo que me preguntan, de la manera más simple, de forma de acercar y no de alejar del tema a quien pregunta, que tiene la intención de aprender.
Te pido disculpas por la parrafada, tal vez este apartado sería para publicarlo en otra sección, pero bueno, necesitaba expresarlo.
Un saludo.

Creo que todos estamos en el mismo perfil: aficionados al mundo arduino.

El shield-TFT está diseñado para cubrir por completo tu arduino MEGA, y tiene conectores solo para recibir la pantalla TFT

Los pines que no usa de tu arduino MEGA, no estarán accesibles para que puedas conectar los elementos extra de tu proyecto, que refieres en tu pregunta inicial:

"... DS3231, 4 sensores de temperatura, un buzzer de alarma y un módulo de 8 relés..."

Asi es como va a quedar tu TFT instalado:

Como verás no podrás acceder a los pines, ya que el shield y el TFT cubrirán por completo a tu MEGA.

Hay varias opciones que podrías usar:

Conseguir una protoboard para MEGA, con pines alargados, encima de ella puedes conectar el shield TFT

Sustituir los cabezales del mega por cabezales con pines extralargos, afin de usar el otro lado de tu arduino mega, al estilo de las placas STM32

Usar pines en 90 grados, antes de instalar el shield TFT

Ok, comprenido lo del interface.
Dentro del diseño del proyecto mi idea es poner todos los circuitos y componentes dentro de una cabina o caja, colocando incluso unos ventiladores de 12v para mantener la temperatura por debajo de los 30 grados, y la TFT colocarla por fuera de la caja, con lo cual tal vez se complica aún más el proyecto, pues si coloco el arduino-shield-TFT por fuera también tendré que cablear un montón de conexiones con el resto de componentes dentro de la caja, no?
Es coherente utilizar dos arduinos, uno con el programa dentro de la cabina, y el tándem TFT-shield-Arduino2 conectado con el primero de alguna manera (cable, bluetooth, inalámbrico)?