-
proty
-
Autor del tema
-
Fuera de línea
-
Navegador Iniciado
-
-
Mensajes: 15
-
Gracias recibidas: 1
-
-
|
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.
|