Buenas noches, como prometí en el hilo anterior y muy a pesar mio regreso necesitando ayuda para que funcione el menú de mi proyecto.
Desde el ultimo post estoy enrredao buscando ideas en internet para confeccionar mi menú, empollando manuales y demás. Me puse manos a la obra y tengo confeccionado toda la parte de gráficos y del táctil , pero no consigo relacionar la parte funcional para que el menú actúe como debe. También me falta el que funcionen los números para introducir los datos necesarios.
El esquema del menú es simple: Pantalla principal con un mensaje, al pulsar la pantalla pasa a la pantalla numérica para introducir un valor y al pulsar validar en esta, tiene que pasar a una tercera pantalla con otro mensaje en la cual al volver a tocarla pasara fe nuevo a la pantalla numérica,por ultimo al pulsar otra vez validar debe pasar a la pantalla de inicio.
La teoría bien ... en la practica no consigo pasar de la primera pantalla.
He tratado por todos los medios de hacerlo funcionar pero no hay manera ...
A ver si alguien puede echarle un ojo y decirme que narices hago mal.
Muchísimas gracias por adelantado como siempre .
#include <SPFD5408_Adafruit_GFX.h> // Libreria de graficos
#include <SPFD5408_Adafruit_TFTLCD.h> // Libreria de LCD
#include <SPFD5408_TouchScreen.h> // Libreria del panel tactil
//pines del panel tactil
#define YP A1
#define XM A2
#define YM 7
#define XP 6
// Definimos la presion máxima y minima que podemos realizar sobre el panel
#define MINPRESSURE 10
#define MAXPRESSURE 1000
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 410);
short TS_MINX=172;
short TS_MINY=173;
short TS_MAXX=966;
short TS_MAXY=927;
#define LCD_CS A3 // Definimos los pines del LCD
#define LCD_CD A2 // para poder visualizar elementos graficos
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4
#define BLACK 0x0000 // Definimos los colores
#define BLUE 0x001F // que utilizaremos para
#define BLUE2 0x051F
#define RED 0xF800 // el texto y los elementos graficos
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
#define DARKGREY 0x7BEF
#define ORANGE 0xFD20
#define RED2 0xFE4832
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET); // Instancia LCD
int X; // Variables que almacenaran la coordenada
int Y; // X, Y donde presionemos y la variable Z
int Z; // almacenara la presion realizada
int posicion = 0;
int menu = 0;
boolean lineascr = false;
boolean cantidadscr = false;
boolean validar = false;
//boolean validar2 = false;
char pulsacion =0;
void setup()
{
tft.begin(0x9341);
menu0 ();
}
void menu0 () // GRAFICOS PANTALLA SELECCION LINEA
{
tft.fillScreen(ORANGE);
tft.drawRoundRect(0, 0, 240, 319, 8, WHITE);
tft.setCursor(31,60);
tft.setTextSize(3);
tft.print("SELECCIONE");
tft.setCursor(44,140);
tft.print("UNA LINEA");
tft.setCursor(50,230);
tft.print("A CARGAR");
lecturaPanel();
lecturamenu0();
lineascr = true ;
}
void menu1 ()
// GRAFICOS PANTALLA SELECCION CANTIDAD
{
tft.fillScreen(ORANGE);
tft.drawRoundRect(0, 0, 240, 319, 8, WHITE);
tft.setCursor(30,60);
tft.setTextSize(3);
tft.print("SELECCIONE");
tft.setCursor(50,140);
tft.print("CANTIDAD");
tft.setCursor(50,230);
tft.print("A CARGAR");
lecturaPanel();
lecturamenu1();
cantidadscr = true ;
}
void menuTeclado ()
// GRAFICOS MENU TECLADO
{
tft.fillScreen(RED2);
tft.drawRoundRect(30,10, 180, 80,5, WHITE);
tft.fillRoundRect(31,11, 178, 78,5, DARKGREY);
tft.drawRoundRect(10,130,60,30,5, WHITE);tft.drawRoundRect(90,130,60,30,5, WHITE);tft.drawRoundRect(170,130,60,30,5, WHITE);
tft.drawRoundRect(10,180,60,30,5, WHITE);tft.drawRoundRect(90,180,60,30,5, WHITE);tft.drawRoundRect(170,180,60,30,5, WHITE); // BOTONES DIGITOS
tft.drawRoundRect(10,230,60,30,5, WHITE);tft.drawRoundRect(90,230,60,30,5, WHITE);tft.drawRoundRect(170,230,60,30,5, WHITE);
tft.drawRoundRect(10,280,60,30,5, WHITE);tft.drawRoundRect(90,280,60,30,5, WHITE);tft.drawRoundRect(170,280,60,30,5, WHITE);
tft.fillRoundRect(11, 131,58, 28, 5, ORANGE);tft.fillRoundRect(91,131,58,28,5, ORANGE);tft.fillRoundRect(171,131,58,28,5, ORANGE);
tft.fillRoundRect(11, 181,58, 28, 5, ORANGE);tft.fillRoundRect(91,181,58,28,5, ORANGE);tft.fillRoundRect(171,181,58,28,5, ORANGE);
tft.fillRoundRect(11, 231,58, 28, 5, ORANGE);tft.fillRoundRect(91,231,58,28,5, ORANGE);tft.fillRoundRect(171,231,58,28,5, ORANGE);//MARCO BOTONES DIGITOS
tft.fillRoundRect(11, 281,58, 28, 5, ORANGE);tft.fillRoundRect(91,281,58,28,5, ORANGE);tft.fillRoundRect(171,281,58,28,5, ORANGE);
tft.setTextSize(3);tft.setTextColor(WHITE);
tft.setCursor(32, 135);tft.print("1"); tft.setCursor(112, 135);tft.print("2"); tft.setCursor(192, 135);tft.print("3");
tft.setCursor(32, 185);tft.print("4"); tft.setCursor(112, 185);tft.print("5"); tft.setCursor(192, 185);tft.print("6"); //DIGITOS Y LETRAS
tft.setCursor(32, 235);tft.print("7"); tft.setCursor(112, 235);tft.print("8"); tft.setCursor(192, 235);tft.print("9");
tft.setCursor(20, 285);tft.print("RS");tft.setCursor(112, 285);tft.print("0"); tft.setCursor(175, 285);tft.print("VAL");
lecturaPanel();
lecturamenuTeclado();
validar = true ;
}
void lecturaPanel()
{
TSPoint p = ts.getPoint(); // Realizamos lectura de las coordenadas
pinMode(XM, OUTPUT); // La librería utiliza estos pines como entrada y salida
pinMode(YP, OUTPUT); // por lo que es necesario declararlos como salida justo
// despues de realizar una lectura de coordenadas.
X = map(p.x,TS_MINX ,TS_MAXX, 0, tft.width());
Y = map(p.y, TS_MINY ,TS_MAXY, 0, tft.height());
Z = p.z;
}
void lecturamenu0()
{
if((X > 5 && X < 235) && (Y > 5 && Y < 315) && (Z > MINPRESSURE && Z < MAXPRESSURE)){lineascr = 0;}
if(Z < MINPRESSURE ){pulsacion =0;delay(50);}
}
void lecturamenu1()
{
if((X > 5 && X < 235) && (Y > 5 && Y < 315) && (Z > MINPRESSURE && Z < MAXPRESSURE)){cantidadscr = 0;}
if(Z < MINPRESSURE ){pulsacion =0;delay(50);}
}
void lecturamenuTeclado()
{
if((X > 10 && X < 70) && (Y > 100 && Y < 130) && (Z > MINPRESSURE && Z < MAXPRESSURE)){pulsacion= '1';}
if((X > 90 && X < 150) && (Y > 100 && Y < 130) && (Z > MINPRESSURE && Z < MAXPRESSURE)){pulsacion = '2' ;}
if((X > 170 && X < 230) && (Y > 100 && Y < 130) && (Z > MINPRESSURE && Z < MAXPRESSURE)){pulsacion = '3' ;}
if((X > 10 && X < 70) && (Y > 150 && Y < 180) && (Z > MINPRESSURE && Z < MAXPRESSURE)){pulsacion = '4' ;}
if((X > 90 && X < 150) && (Y > 150 && Y < 180) && (Z > MINPRESSURE && Z < MAXPRESSURE)){pulsacion = '5' ;}
if((X > 170 && X < 230) && (Y > 150 && Y < 180) && (Z > MINPRESSURE && Z < MAXPRESSURE)){pulsacion = '6' ;}
if((X > 10 && X < 70) && (Y > 200 && Y < 230) && (Z > MINPRESSURE && Z < MAXPRESSURE)){pulsacion = '7' ;}
if((X > 90 && X < 150) && (Y > 200 && Y < 230) && (Z > MINPRESSURE && Z < MAXPRESSURE)){pulsacion = '8' ;}
if((X > 170 && X < 230) && (Y > 200 && Y < 230) && (Z > MINPRESSURE && Z < MAXPRESSURE)){pulsacion = '9' ;}
if((X > 10 && X < 70) && (Y > 250 && Y < 280) && (Z > MINPRESSURE && Z < MAXPRESSURE)){pulsacion = '*' ;}
if((X > 90 && X < 150) && (Y > 250 && Y < 280) && (Z > MINPRESSURE && Z < MAXPRESSURE)){pulsacion = '0' ;}
if((X > 170 && X < 230) && (Y > 250 && Y < 280) && (Z > MINPRESSURE && Z < MAXPRESSURE)){pulsacion = '#' ;}
if(Z < MINPRESSURE ){pulsacion =0;}
}
void loop()
{
if ( pulsacion == lecturamenu0){menuTeclado();} // pasa de menu0(seleccione linea a cargar)a menu teclado
if ( pulsacion == lecturamenu1){menuTeclado();} // pasa de menu1(seleccione cantidad a cargar) a menu teclado
if ( pulsacion == '#') {menu1();}// pasa de menuteclado a cantidad a cargar
if ( pulsacion == '#') {menu0();}// pasa de teclado a linea a cargar
}