Pasar codigo de utftglue a mcufriend ? Por no funcionar el lcd.

Buenos días chicos.

Me presento:
Estoy aprendiendo a usar arduino poco a poco, empece modificando ejemplos y mirando tutoriales y voy aprendiendo, pero el otro día me tropecé con un código que me gustaría usar para mover servos usando un tft que tengo. Conozco los ejemplos de servo, pero esta que vi me ha gustado mucho, se que esta a años luz de mi nivel, pero que le voy a hacer... me ha gustado muchísimo. Aquí cuelgo link de youtube:

Tengo un tft de 3.5" tactil marca kuman (https://www.amazon.es/dp/B0796TSMNS/?coliid=I1FY1O588QAREH&colid=3UGTRMDXNWIDW&psc=0&ref_=lv_ov_lig_dp_it) instale sus bibliotecas y los ejemplos funcionan a la perfección, pero usando adafruit gfx y mcufriend. Los ejemplos usando utftglue no funcionan, ni cargando librerias nuevas desde github.
Con el serial monitor y test de lcd me dice que tiene la id=0x9486

Uso un arduino mega 2560 chino. :-[

he modificado tanto el ejemplo descargado que creo que ahora es una aplicación para descodificar el plus jejeje

Me permito colgar el código antes de toquetearlo todo.

He cambiado la descripción de pines del tft, chip pantalla... y no tengo mas conocimientos para hacer nada mas.

Así que mi pregunta es si algún miembro del foro puede ayudarme un poco.
Gracias de todas las formas chicos.

Proyecto_18_TouchLCD2.ino (7.29 KB)

Hi,
No se si esto tiene que ver con tu problema pero creo que le estas asignando los pines A2 y A3 a la UTFTGLUE y tambien para creo controlar los x y y de la panatalla.

UTFTGLUE myGLCD(0x9481, A2, A1, A3, A4, A0);


//Definir pines para controlar la pantalla

#define XP 9   //Pin de control digital
#define YP A2  //Pin análogo de control 
#define XM A3  //Pin análogo de control
#define YM 8   //Pin digital de control

Muchas gracias por tu respuesta!

La verdad, ni lo había visto. Me ofusqué con el codigo y querer pasarlo a mcufriend creyendo que este era el problema.
Esta noche cuando llegue a casa me pondre de nuevo y comentaré si era esto.

Gracias de nuevo!

Buenas noches.

Comentar que ahora he cambiado la asignación duplicada y cargado, no ha funcionado, pero con la modificación y al añadir la #define <MCUFRIEND_kbv.h> ha funcionado! Ya funciona el tft.

Solo falta el tft touch y cuando tenga mas tiempo conectare el servo.

Muchísimas gracias!

Colgare el proyecto en el vídeo del diseñador para que mas gente lo pueda disfrutar.

//Incluir la librería del servo
#include <Servo.h>
Servo servomotor;

//Incluir las librerías para utilizar la pantalla
#include <TouchScreen.h>
#include <Adafruit_GFX.h>
#include <MCUFRIEND_kbv.h>
#include <UTFTGLUE.h>
#include <stdint.h>

UTFTGLUE myGLCD(0x9486, A2, A1, A3, A4);

//Definir pines para controlar la pantalla
#define XP 9   //Pin de control digital
#define YP A8  //Pin análogo de control
#define XM A9  //Pin análogo de control
#define YM 8   //Pin digital de control
// Definir los niveles de presión mínima y máxima
#define MINPRESSURE 10
#define MAXPRESSURE 1000

//Definir los valores para calibrar la pantalla táctil
#define X_STPT  75    // Valor de X inicial
#define X_ENPT  905    // Valor de X final
#define Y_STPT  145    // Valor de Y inicial
#define Y_ENPT  880    // Valor de Y final

TouchScreen myTouch = TouchScreen(XP, YP, XM, YM, 300);

//Definir códigos de los colores más utilizados
#define NEGRO   0x0000
#define AZUL    0x001F
#define ROJO     0xF800
#define VERDE   0x07E0
#define CIAN    0x07FF
#define MAGENTA 0xF81F
#define AMARILLO  0xFFE0
#define BLANCO   0xFFFF

int led = 10; //Pin PWM donde va conectado el LED

//Define el ancho y largo de la pantalla en pixeles
int x_size = 480; int y_size = 320;
bool settscrsize(int w, int h) {
  if ((w <= 0) || (h <= 0)) return false;
  x_size = w; y_size = h;
  return true;
}

int x, y;  //Variables para obtener las coordenadas X y Y donde se presiona la pantalla

void setup() {

  //Inicializacion de la pantalla
  myGLCD.InitLCD(1);  //Inicia en modo horizontal
  myGLCD.clrScr();

  //Rectángulo para el control del LED
  myGLCD.setColor(ROJO);
  myGLCD.drawRect(30, 60, 450, 90);

  //Rectángulo para el control del servomotor
  myGLCD.setColor(VERDE);
  myGLCD.drawRect(30, 140, 450, 170);

  //Rectangulos para los numeros del display 7 segmentos
  myGLCD.setColor(AMARILLO);
  myGLCD.drawRoundRect(30, 220, 100, 255);
  myGLCD.drawRoundRect(30, 265, 100, 300);
  myGLCD.drawRoundRect(110, 220, 180, 255);
  myGLCD.drawRoundRect(110, 265, 180, 300);
  myGLCD.drawRoundRect(190, 220, 260, 255);
  myGLCD.drawRoundRect(190, 265, 260, 300);
  myGLCD.drawRoundRect(270, 220, 340, 255);
  myGLCD.drawRoundRect(270, 265, 340, 300);
  myGLCD.drawRoundRect(350, 220, 420, 255);
  myGLCD.drawRoundRect(350, 265, 420, 300);

  //Textos
  myGLCD.setTextColor(CIAN);
  myGLCD.setTextSize(2);
  myGLCD.print("Control LED", 30, 30);
  myGLCD.print("Control servo", 30, 110);
  myGLCD.print("Mostrar en display 7 segmentos:", 30, 190);

  //Números en los rectángulos para control del 7 segmentos
  myGLCD.setTextColor(CIAN);
  myGLCD.print("0", 60, 230);
  myGLCD.print("1", 140, 230);
  myGLCD.print("2", 220, 230);
  myGLCD.print("3", 300, 230);
  myGLCD.print("4", 380, 230);
  myGLCD.print("5", 60, 275);
  myGLCD.print("6", 140, 275);
  myGLCD.print("7", 220, 275);
  myGLCD.print("8", 300, 275);
  myGLCD.print("9", 380, 275);

  //Inicialización de los pines del display 7 segmentos

  pinMode(22, OUTPUT);
  pinMode(23, OUTPUT);
  pinMode(24, OUTPUT);
  pinMode(25, OUTPUT);
  pinMode(26, OUTPUT);
  pinMode(27, OUTPUT);
  pinMode(28, OUTPUT);

  //Inicialización del pin PWM del LED

  pinMode(led, INPUT);

  //Declaración del pin PWM donde va conectado el servo

  servomotor.attach(11); //Pin PWM 6 del Arduino
  servomotor.write(10);

}

void loop() {

  TSPoint p;

  if (checktouch(&myTouch, &p))
  {
    x = p.x; y = p.y;

    //Condicional para manejar la barra de control del LED
    if (x >= 30 && x <= 450 && y >= 60 && y <= 90 )
    {
      myGLCD.setColor(ROJO);
      myGLCD.fillRect(30, 60, p.x, 90);
      myGLCD.setColor(NEGRO);
      myGLCD.fillRect(p.x, 61, 449, 89);
      int valor_brillo = map(p.x, 31, 449, 0, 255);
      analogWrite(led, valor_brillo);
    }

    //Condicional para manejar la barra de control del servo
    if (x >= 30 && x <= 450 && y >= 140 && y <= 170 )
    {
      myGLCD.setColor(VERDE);
      myGLCD.fillRect(30, 140, p.x, 170);
      myGLCD.setColor(NEGRO);
      myGLCD.fillRect(p.x, 141, 449, 169);
      int angulo_servo = map(p.x, 31, 449, 10, 180);
      servomotor.write(angulo_servo);
    }

    if (x >= 30 && x <= 100 && y >= 220 && y <= 255 )
    {
      encender (1, 1, 1, 1, 1, 1, 0); //Muestra el numero 0
    }

    if (x >= 110 && x <= 180 && y >= 220 && y <= 255 )
    {
      encender (0, 1, 1, 0, 0, 0, 0); //Muestra el numero 1
    }

    if (x >= 190 && x <= 260 && y >= 220 && y <= 255 )
    {
      encender (1, 1, 0, 1, 1, 0, 1); //Muestra el numero 2
    }

    if (x >= 270 && x <= 340 && y >= 220 && y <= 255 )
    {
      encender (1, 1, 1, 1, 0, 0, 1); //Muestra el numero 3
    }

    if (x >= 350 && x <= 420 && y >= 220 && y <= 255 )
    {
      encender (0, 1, 1, 0, 0, 1, 1); //Muestra el numero 4
    }

    if (x >= 30 && x <= 100 && y >= 265 && y <= 300 )
    {
      encender (1, 0, 1, 1, 0, 1, 1); //Muestra el numero 5
    }

    if (x >= 110 && x <= 180 && y >= 265 && y <= 300 )
    {
      encender (1, 0, 1, 1, 1, 1, 1); //Muestra el numero 6
    }

    if (x >= 190 && x <= 260 && y >= 265 && y <= 300 )
    {
      encender (1, 1, 1, 0, 0, 0, 0); //Muestra el numero 7
    }

    if (x >= 270 && x <= 340 && y >= 265 && y <= 300 )
    {
      encender (1, 1, 1, 1, 1, 1, 1); //Muestra el numero 8
    }

    if (x >= 350 && x <= 420 && y >= 265 && y <= 300 )
    {
      encender (1, 1, 1, 0, 0, 1, 1); //Muestra el numero 9
    }
  }
}

//Funcion que permite mostrar los numeros del 0 al 9

void encender(int a, int b, int c, int d, int e, int f, int g)
{
  //Asigna un segmento del display a cada pin

  digitalWrite(22, a);  //Asigna el segmento 'a' al pin 22
  digitalWrite(23, b);  //Asigna el segmento 'b' al pin 23
  digitalWrite(24, c);  //Asigna el segmento 'c' al pin 24
  digitalWrite(25, d);  //Asigna el segmento 'd' al pin 25
  digitalWrite(26, e);  //Asigna el segmento 'e' al pin 26
  digitalWrite(27, f);  //Asigna el segmento 'f' al pin 27
  digitalWrite(28, g);  //Asigna el segmento 'g' al pin 28
}

bool checktouch_core(TouchScreen *ts, TSPoint *pp, bool calflg) {
  // variables
  bool rlt = false;
  int rtry = 10;

  // Leer el sensor táctil de la pantalla
  delay(1);
  TSPoint p = ts->getPoint();
  if ((p.z < MINPRESSURE) || (p.z > MAXPRESSURE)) goto rsmpt;
  if (pp == 0) {
    rlt = true;
    goto rsmpt;
  }

  // Volver a leer el sensor táctil
  if (p.x < (X_STPT + 100)) {
    for (int i = 0 ; i < 2 ; i++) {
      delay(1);
      p = ts->getPoint();
      if (p.x > (X_STPT + 100)) break;
      if (p.x == 0) {
        if (rtry > 0) {
          rtry--;
          i = 0;
        }
      }
    }
  }
  if (p.x == 0) return false;

  // Obtener las coordenadas X y Y en donde se toca la pantalla
  if (pp != 0) {
#ifdef X_INVERSE
    p.x = 1100 - p.x;
#endif
    if (calflg) {
      pp->x = p.x; pp->y = p.y;
    } else {
      pp->x = ((long)(p.x - X_STPT) * (long)x_size) / (long)(X_ENPT - X_STPT);
      if (pp->x < 0) pp->x = 0;
      pp->y = ((long)(p.y - Y_STPT) * (long)y_size) / (long)(Y_ENPT - Y_STPT);
      if (pp->y < 0) pp->y = 0; if (pp->y >= y_size) pp->y = y_size - 1;
    }
    pp->z = p.z;
  }
  rlt = true;

  // Restaurar los pines para volver a ser utilizados para la función táctil
rsmpt:
  pinMode(XP, OUTPUT); pinMode(XM, OUTPUT);
  pinMode(YP, OUTPUT); pinMode(YM, OUTPUT);

  return rlt;
}

// Verificar el sensor touch para usarlo
bool checktouch(TouchScreen *ts, TSPoint *pp) {
  return checktouch_core(ts, pp, false);
}

Ahora me corrijo a mi mismo.

El táctil funciona solo si A2 y A3 están como el código original, pero con añadir el mcufriend funciona todo.

Creo que me ofusque buscando problemas donde hacía falta añadir una biblioteca y tocando tocando me lié.

Bueno, para eso están los foros, para aprender y mejorar.

Si el compañero no me dice lo de los pines no hubiera encontrado el fallo jejeje.

Chao!