Bienvenido, Invitado
Nombre de Usuario: Contraseña: Recordarme
  • Página:
  • 1

TEMA:

Problema al mostrar variables en pantalla TFT 5 años 4 meses antes #450

Buenas.

Estoy intentando realizar un proyecto con una pantalla TFT Táctil que tiene que ir mostrando valores. Como ejemplo para ir desarrollando el código, he realizado un menú principal, y al darle a la primera opción, nos muestra una pantalla donde debería ir mostrando como cambia el valor que nos devuelve la función millis();

La cuestión es que sólo muestra el primer valor de la primera llamada a la función. En las posteriores llamadas la pantalla no se refresca, a pesar de que sí cambie si lo comprobamos en el monitor de Serie.

Comentando el condicional para detectar las pulsaciones de la pantalla, si que se refrescan los valores correctamente.

Dejo por aquí el código por si me pueden ayudar a detectar el fallo, o a programarlo de otra manera:
#include <Arduino.h>
#include <UTFTGLUE.h>
#include <TouchScreen.h>

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

#define TS_MINX 73 //Puntos X e Y máximos y mínimos de la pantalla
#define TS_MINY 130
#define TS_MAXX 932
#define TS_MAXY 880

#define COLOR_TXT 241, 196, 15   Macros con diferentes colores en RGB
#define COLOR_BACK_TXT_INICIO 200, 0, 0
#define COLOR_BACK_TXT 255, 255, 255
#define COLOR_BARRA_MENU 200, 0, 0
#define COLOR_BOTON 200, 0, 0
#define COLOR_TXT_BOTON 255, 255, 255
#define COLOR_LINEAS 255, 255, 255
#define COLOR_PILOTO_1 192, 57, 43
#define COLOR_PILOTO_2 34, 153, 84
#define COLOR_PILOTO_3 52, 152, 219
#define COLOR_PILOTO_4 241, 196, 15

#if !defined(SmallFont)
extern uint8_t SmallFont[]; //.kbv GLUE defines as GFXFont ref
#endif

void mostrarPantallaInicio();
void mostrarPantallaCarrera();
void mostrarBarraInicio();
void escribirTiempo(uint8_t piloto, String tiempo, int vueltas, int faltas);


TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
UTFTGLUE lcd(0x7783, A2, A1, A3, A4, A0);

void mostrarBarraMenu()
{
    lcd.setColor(COLOR_BARRA_MENU);
    lcd.fillRect(0, 201, 320, 240);
    lcd.setFont(SevenSegNumFont);
    lcd.setColor(COLOR_TXT);
    lcd.setBackColor(COLOR_BARRA_MENU);
    lcd.print("INICIO", 10, 215);
    //lcd.print("START", 180, 215);
    lcd.setColor(255, 255, 255);
    lcd.drawLine(0, 200, 320, 200);
    lcd.drawLine(60, 200, 60, 240);
}

void mostrarPantallaCarrera(){
  
 lcd.InitLCD();
  //lcd.fillScreen(0);
  lcd.clrScr();
  lcd.fillScr(0, 0, 0);
  lcd.setColor(COLOR_PILOTO_1);
  lcd.fillRect(0, 0, 49, 49);
  lcd.setColor(COLOR_PILOTO_2);
  lcd.fillRect(0, 51, 49, 99);
  lcd.setColor(COLOR_PILOTO_3);
  lcd.fillRect(0, 101, 49, 149);
  lcd.setColor(COLOR_PILOTO_4);
  lcd.fillRect(0, 149, 49, 199);
  lcd.setColor(COLOR_LINEAS);
  lcd.drawLine(50, 0, 50, 200);
  lcd.drawLine(0, 50, 320, 50);
  lcd.drawLine(0, 100, 320, 100);
  lcd.drawLine(0, 150, 320, 150);
  lcd.drawLine(51, 15, 320, 15);
  lcd.drawLine(51, 65, 320, 65);
  lcd.drawLine(51, 115, 320, 115);
  lcd.drawLine(51, 165, 320, 165);
  lcd.setBackColor(COLOR_PILOTO_1);
  lcd.setTextSize(3);
  lcd.print("1", 16, 15);
  lcd.setBackColor(COLOR_PILOTO_2);
  lcd.print("2", 16, 65);
  lcd.setBackColor(COLOR_PILOTO_3);
  lcd.print("3", 16, 115);
  lcd.setBackColor(COLOR_PILOTO_4);
  lcd.print("4", 16, 165);
  lcd.setBackColor(0, 0, 0);
  lcd.setFont(BigFont);
  lcd.print("Tiempo", 70, 5);
  lcd.print("Vueltas", 200, 5);
  lcd.print("Faltas", 270, 5);

  lcd.print("Tiempo", 70, 55);
  lcd.print("Vueltas", 200, 55);
  lcd.print("Faltas", 270, 55);

  lcd.print("Tiempo", 70, 105);
  lcd.print("Vueltas", 200, 105);
  lcd.print("Faltas", 270, 105);

  lcd.print("Tiempo", 70, 155);
  lcd.print("Vueltas", 200, 155);
  lcd.print("Faltas", 270, 155);
  mostrarBarraMenu();

  
  while (1)
  {
    escribirTiempo(1, (String) millis(), 0, 0);

    TSPoint p = ts.getPoint();
    if (p.z > 20) //ts.pressureThreshhold)
    {
      p.x = map(p.x, TS_MAXX, TS_MINX, 0, 320);
      p.y = map(p.y, TS_MAXY, TS_MINY, 0, 240);
      if (p.y > 200 && p.y < 240 && p.x > 0 && p.x < 60)
      {
        mostrarPantallaInicio();
      }
    }
  }
}

void mostrarPantallaInicio()
{
  //Gráficos
  lcd.InitLCD();
  lcd.clrScr();
  lcd.fillScr(0, 0, 0);
  lcd.setColor(COLOR_LINEAS);
  lcd.setFont(BigFont);
  lcd.drawLine(0, 50, 320, 50);
  lcd.drawLine(0, 100, 320, 100);
  lcd.drawLine(0, 150, 320, 150);
  lcd.setBackColor(COLOR_BACK_TXT);
  lcd.print("COMENZAR CARRERA", CENTER, 25);
  mostrarBarraMenu();

  //Acciones
  while (1)
  {
    
    //**** CONTROL DE PULSACIONES *****//
    TSPoint p = ts.getPoint();
    if (p.z > 20) //ts.pressureThreshhold)
    {
      p.x = map(p.x, TS_MAXX, TS_MINX, 0, 320);
      p.y = map(p.y, TS_MAXY, TS_MINY, 0, 240);
      if (p.y > 0 && p.y < 50)
      {
          mostrarPantallaCarrera();
      }
    }
  }
  
}

void escribirTiempo(uint8_t piloto, String tiempo, int vueltas, int faltas)
{
    
  int pos_x = 70, pos_y;
  lcd.setTextSize(2);
  lcd.setBackColor(0,0,0);
  lcd.setColor(0, 0, 0);
  switch (piloto)
  {
    case 1:
        pos_y = 25;
        lcd.fillRect(51, 16, 320, 49);
        break;
    default:
        break;
  }
  lcd.setColor(COLOR_TXT_BOTON);
  lcd.print(tiempo, pos_x, pos_y);
  lcd.print((String)vueltas, 200, pos_y);
  lcd.print((String)faltas, 270, pos_y);
  Serial.println("Reescribiendo tiempo");
}

void setup() {
 
  Serial.begin(9600);
  lcd.setColor(255, 255, 255);
  lcd.setBackColor(0, 0, 0);
  lcd.InitLCD();
  mostrarPantallaInicio();
}


void loop() {
  
}

He de comentar también que creo que no está programado de una manera muy ortodoxa, con todo el código dentro de la función loop(). De hecho esta función está vacía. Pero he seguido una lógica que he leido en algún foro donde recomendaban hacerlo así para tener más control sobre las variables y lo que se muestra en cada pantalla y tenerlas así más aisladas unas de otras.

Saludos.

Por favor, Identificarse o Crear cuenta para unirse a la conversación.

Última Edición: por proty.

Problema al mostrar variables en pantalla TFT 5 años 4 meses antes #451

Si haces el favor, añade el codido de la nextion y del arduino a una carpeta, comprimelo en rar y subelo.

De todas formas, no has puesto ni un solo comentario, eso para quien no haya realizado el programa, le puede llevar horas ir mirando que quieres hacer en cada instruccion, y como comprenderas, no se si habra mucha gente que este dispuesta a regalarte horas de su tiempo.

P.d. Me acabo de dar cuenta que es una pantalla normal, no HMI, yo nunca he trabajado con ninguna. osea yo no podre ayudarte.

Por favor, Identificarse o Crear cuenta para unirse a la conversación.

Última Edición: por Jose Luis.

Problema al mostrar variables en pantalla TFT 5 años 4 meses antes #452

Te pido disculpas José Luis, no sabía muy bien como compartir el código.

En realidad no son más que scripts típicos de ejemplo para posicionar, textos, figuras, y colorearlos. No hay más. Cualquiera que lo suba a un arduino con una pantalla tipo shield pinchada encima le funcionará y podrá jugar con él, así que en cualquier caso, ahí queda por si le puede servir a alguien .

Un saludo.

Por favor, Identificarse o Crear cuenta para unirse a la conversación.

Problema al mostrar variables en pantalla TFT 5 años 4 meses antes #453

A ver si te puede ayudar alguien que haya trabajado con ella. Yo despues de trabajar con la nextion, no vuelvo a esas pantallas.
:D

Por favor, Identificarse o Crear cuenta para unirse a la conversación.

Problema al mostrar variables en pantalla TFT 5 años 4 meses antes #455

Llevaba varios días atascado con este problema, pero tras una larga anoche conseguí localizar el error:

Utilizo las librerías UTFTGLUE.h y TouchScreen.h. Pues bien, desde que invocaba a la función getPoint() de TouchScreen.h dejaba de refrescarse la pantalla. Fuera texto, o dibujos. Parece ser que que la pantalla TFT comparte pines con el panel táctil, de tal manera que al invocar a la función getPoint() los pines pasaban de modo salida a modo entrada, y luego por más que quisiera imprimir algo pues lógicamente no los mostraba.

Lo simpático del tema es que estas son las dos librerías con las que ilustran los ejemplos de la pantalla Valleman 2.8 que tengo.

Con poner pinMode(YP, OUTPUT); y pinMode(XM, OUTPUT); después de trabajar con getPoint() todo va como la seda.

Espero poder solventar pronto el modo de no tener que hacer esto cada vez y poder compartirlo por aquí.

Gracias y saludos.
El siguiente usuario dijo gracias: Perbutt

Por favor, Identificarse o Crear cuenta para unirse a la conversación.

Problema al mostrar variables en pantalla TFT 5 años 4 meses antes #456

Pues te agradezco la informacion, espero que la gente que trabaja con esas pantallas te lo agradecera.

Por favor, Identificarse o Crear cuenta para unirse a la conversación.

  • Página:
  • 1
Tiempo de carga de la página: 0.118 segundos
Gracias a Foro Kunena