Problema con URTOUCH al ejecutar otra funcion no puedo dejar de leer datos

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!!

Hola!

Arreglado me faltaba un if gracias a todos!!!