Buenas noches a todos!
Hacia años que no posteaba aqui pero al ver el nick de Surbyte se que en su dia me ayudaste mucho y te lo agradezco de nuevo.
Necesito de vuestro vuestra ayuda o alguna sugerencia.
Estoy creando un pequeño programa con un Arduino Mega y una pantalla china que compre hace años es una tft 240x320, el tema de conexionado de pantalla, tactil, shield esta ok, todo funciona perfecto.
El problema es que he creado el programa que posteo a continuación con dos paginas diferentes, una gestionada via tactil con los menus principal y una serie de botones que activaran unos reles ( no hay problema en programar esto ), el problema que cuando llamo a la funcion de la segunda pantalla, aunque no esten los botones en pantalla se siguen pulsando, y el boton de VOLVER de la segunda pantalla es imposible pulsarlo. No se si lograreis entenderme para que sea mas claro he subido un video a youtube con el fallo.
La cuestión es : ¿Podriais ayudarme por favor a hacer que al darle al botón de VOLVER lo lea correctamente y me devuelta a la función Principal ?
Os posteo el codigo y el video subido a YT.
#include <UTFT.h>
#include <URTouch.h>
extern uint8_t SmallFont[];
UTFT myGLCD(CTE28,38,39,40,41); // Configuración inicial pantalla
URTouch myTouch(6,5,4,3,2);
void Principal()
{
myGLCD.setFont(SmallFont);
myGLCD.clrScr();
myGLCD.setColor(VGA_RED);
myGLCD.fillRect(0,0,319,20);
myGLCD.fillRect(0,219,319,239);
myGLCD.setBackColor(VGA_RED);
myGLCD.setColor(VGA_BLUE);
myGLCD.fillRoundRect(11,159,140,209); // Calibración cuadrado
myGLCD.fillRoundRect(170,119,299,154); // Velocidad 2 cuadrado
myGLCD.setColor(VGA_GREEN);
myGLCD.fillRoundRect(170,74,299,109); // Velocidad 1 cuadrado
myGLCD.fillRoundRect(20,89,70,139); // Cuadrado ON
myGLCD.setColor(VGA_RED);
myGLCD.fillRoundRect(170,164,299,199); // Paro Motor cuadrado
myGLCD.fillRoundRect(80,89,130,139); // Cuadrado OFF
myGLCD.setColor(VGA_YELLOW);
myGLCD.drawRoundRect(10,30,140,149); // Cuadrado amarillo LUZ
myGLCD.drawRoundRect(10,158,141,210); // Reborde calibracion
myGLCD.drawRoundRect(160,30,309,210); // Reborde Motor
myGLCD.setBackColor(VGA_BLACK);
myGLCD.print("LUZ",65,45);
myGLCD.print("MOTOR",215,45);
myGLCD.setBackColor(VGA_GREEN);
myGLCD.print("ON",40,109);
myGLCD.print("VELOCIDAD 1",190,85);
myGLCD.setBackColor(VGA_RED);
myGLCD.print("PARO MOTOR",190,175);
myGLCD.print("OFF",92,109);
myGLCD.setBackColor(VGA_BLUE);
myGLCD.print("CALIBRACION",32,179);
myGLCD.print("VELOCIDAD 2",190,130);
}
void Pulsar()
{
int x ,y ;
myTouch.read();
x=myTouch.getX();
y=myTouch.getY();
if ((x>=11) && (x<=140))
{
if ((y>=159) && (y<=209))
{
Serial.println("Calibración"); // Calibración
calibracion();
delay(500);
}
}
if ((y>=89) && (y <=139))
{
if ((x>=20 ) && (x<=70))
{
Serial.println("Luz Encendida"); // Luz on
delay(500);
}
if ((x>=80) && (x<=130))
{
Serial.println("Luz Apagada"); // Luz apagada
delay(500);
}
}
if ((x>=170) && (x<=299))
{
if ((y>=74) && (y<=109))
{
Serial.println("Velocidad 1"); //Velocidad 1
delay(500);
}
if ((y>=119) && (y<=154))
{
Serial.println("Velocidad 2"); // Velocidad 2
delay(500);
}
if ((y>=164) && (y<=199))
{
Serial.println("Paro Motor"); // Paro Motor
/*Serial.print("x : ");
Serial.print(x);
Serial.print(" - y : ");
Serial.print(y);
Serial.println();
*/
delay(500);
}
}
}
void calibracion()
{
int a,b;
int x=0;
int y=0;
myGLCD.clrScr();
myGLCD.setColor(VGA_RED);
myGLCD.fillRect(0,0,319,20);
myGLCD.fillRect(0,219,319,239);
myGLCD.setBackColor(VGA_RED);
myGLCD.setColor(VGA_BLUE);
myGLCD.setColor(VGA_YELLOW);
myGLCD.setBackColor(VGA_BLACK);
myGLCD.print("CALIBRACION",CENTER,45);
myGLCD.print("Coloque dos llaves en bruto iguales en",2,85);
myGLCD.print("la mordaza y bloquee el muelle. ",2,105);
myGLCD.print("Acto seguido toque una llave con la",2,125);
myGLCD.print("fresa o el palpador y gire la rueda",2,145);
myGLCD.print("de regulacion hacia la luz verde hasta",2,165);
myGLCD.print("que las dos esferas esten en verde.",2,185);
//return(Pulsar);
delay(1000);
myGLCD.clrScr();
myGLCD.setColor(VGA_RED);
myGLCD.fillRect(0,0,319,20);
myGLCD.fillRect(0,219,319,239);
myGLCD.setBackColor(VGA_RED);
myGLCD.setColor(VGA_BLUE);
myGLCD.print("Matrix SLX Evo",CENTER,5);
myGLCD.print("Jaime Lloret",CENTER,224);
myGLCD.setColor(VGA_RED);
myGLCD.fillCircle(80,90,60);
myGLCD.fillCircle(240,90,60);
myGLCD.setColor(VGA_BLUE);
myGLCD.fillRoundRect(80,160,240,210);
myGLCD.setColor(VGA_YELLOW);
myGLCD.setBackColor(VGA_BLUE);
myGLCD.print("VOLVER",140,178);
myTouch.read();
a=myTouch.getX();
b=myTouch.getY();
if ((a>=80) && (a<=240))
{
if ((b>=160) && (b<=210))
{
loop();
}
}
}
void setup()
{
myGLCD.InitLCD();
myGLCD.setFont(SmallFont);
myGLCD.clrScr();
myTouch.InitTouch();
myTouch.setPrecision(PREC_MEDIUM);
Principal();
Serial.begin(9600);
}
void loop()
{
Pulsar();
}
Aqui adjunto el video del "fallo" que no soy capaz de solventar : Video del fallo
Muchas gracias por vuestra ayuda!
Un saludo!!