Pantalla tactil /Desactivar boton tactil

Hola:
Uso una pantalla tactil con las librerias

#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_TFTLCD.h> // Hardware-specific library
#include <TouchScreen.h>

Tengo este programa:

  • ejecuto para que salga un boton tactil
    -que haga lo que sea al pulsarlo
    -que luego desaparezca ese boton

El boton hago que desaparezca machancandolo por encima, es decir, lo cubro del color del fondo de la pantalla.
Cual es el problema, que sigue ahi. Si pulso esa zona de la pantalla se ejecuta.

if (cont=1){ 
    tft.fillRect(60,300, 210, 80, WHITE);  //borramos cualquir cosa que este en esa zona
    buttons[3].initButton(&tft, 160, 330,200, BUTTON_H, ILI9341_WHITE, ILI9341_DARKGREEN, ILI9341_BLACK,"CONTINUAR", 3);  buttons[3].drawButton(); //ejecutamos el boton tactil
 }
 if (buttons[3].justPressed()) {
  borradopuerta=1;
}
 if (borradopuerta==1){
  tft.fillRect(60,300, 210, 80, WHITE); //tapamos el boton tactil

¿Hay algun comando para deshabilitar un boton tactil?

Gracias

Este es el mismo comando que usas antes de poner el boton.
O sea que no borras el botón sino que borras toda la región.
Cuando el botón es presionado tu respondes a

if (cont=1){
` ``

pero luego esperas que como el boton ya fue presionado justPressed() lo borrse con 
borradopuerta = 1 y claro que lo hace pero en el siguiente ciclo 
cont sigue siendo = 1 y se vuelve a ejecutar y por eso ves el boton.

Deberías hacer 


if (borradopuerta==1){
tft.fillRect(60,300, 210, 80, WHITE); //tapamos el boton tactil
cont = 0;
}

hola:
Entiendo lo que dices, pero si pongo siguiente:

if (cont=1){ 
    tft.fillRect(60,300, 210, 80, WHITE);  //borramos cualquir cosa que este en esa zona
    buttons[3].initButton(&tft, 160, 330,200, BUTTON_H, ILI9341_WHITE, ILI9341_DARKGREEN, ILI9341_BLACK,"CONTINUAR", 3);  buttons[3].drawButton(); //ejecutamos el boton tactil
 }
 if (buttons[3].justPressed()) {
  borradopuerta=1;
  cont=0;
}
 if (borradopuerta==1){
  tft.fillRect(60,300, 210, 80, WHITE); //tapamos el boton tactil

aqui ya le digo que deje de dar la senal (cont=0) para que no aparezca el boton tactil.
No obtante parece que un vez que se ejecuta queda en segundo plano si o si.

Estuve buscando por https://github.com/ pero no encuentro un sitio donde se citen todos los posibles comandos que puedes usar.
Estoy casi seguro que tiene uno para deshabilitar un botón táctil

Te hago una pregunta desde otro punto de vista.

¿Si tuvieras un botón físico que luego de ser pulsado quisieras deshabilitar hasta que se cumpla determinada condición, cómo harías?

Para mi es lo mismo, cuando borras el botón de la pantalla cualquier pulsación posterior la ignoras.

Saludos

Hola:
Muchas gracias por contestar.
Pues pruebo con bastantes condicionales para que no se ejecute ese botón táctil, pero una vez ejecutado queda en segundo plano.
Al final conseguí que no se mostrara simplemente machándolo con otro botón táctil igual al anterior pero del mismo color que el fondo de pantalla.

buttons[3].initButton(&tft, 160, 330,200, BUTTON_H, ILI9341_WHITE, ILI9341_WHITE, ILI9341_WHITE,"CONTINUAR", 3);  buttons[3].drawButton();

Muchas gracias

Vuelve a leer mi respuesta post#2 y ahora entenderás que te dije entonces.
Lo que ocurre es que lo borras pero luego al no cambiar el flag o bandera, se vuelve a mostrar.
Y si ahora funciona una posibilidad muy fuerte es que al final luego de mostrarlo, quitarlo y volver a mostrarlo de nuevo lo estes tapando con el color de fondo que mencionas. Ahora como no veo el código completo solo me lo imagino.

Exactamente lo mismo me pasa a mi, solo intento adivinar por falta de código.

Si que le cambio el flag o la bandera de forma que ese boton tactil deja de ejecutarse. Lo pongo el post3.

Os copio aqui el codigo. No lo puse porque es muy largo.
Os pongo la funcion donde ejecuto el codigo del boton tactil.
Y muchas gracias a los dos

void Alarma(){ 
//apertura de puerta
puerta=digitalRead(51);
if (puerta==!HIGH){
    borradopuerta=0;
    cont=1;   //ponemos esta señal sino aparece el boton de "continuar" por defecto
    tft.fillRect(60,300, 210, 80, ILI9341_DARKGREEN);
    tft.setCursor(110,325);
    tft.setTextColor(WHITE);
    tft.setTextSize(3);
    tft.print("PUERTA");
    // cambiamos el color para el efecto parpadeo
    tft.setCursor(110,325);
    tft.setTextColor(BLACK);
    tft.setTextSize(3);
    tft.print("PUERTA");
    
        
}
 if (puerta == !LOW && puertaAnterior == !HIGH && cont==1){ 
    tft.fillRect(60,300, 210, 80, WHITE);
    buttons[3].initButton(&tft, 160, 330,200, BUTTON_H, ILI9341_WHITE, ILI9341_DARKGREEN, ILI9341_BLACK,"CONTINUAR", 3);  buttons[3].drawButton();
 }
 if (buttons[3].justPressed()&&(borradopuerta==0)){
  cont=0;
  borradopuerta=1;
}
 if (borradopuerta==1){  
  buttons[3].initButton(&tft, 160, 330,200, BUTTON_H, ILI9341_WHITE, ILI9341_WHITE, ILI9341_WHITE,"CONTINUAR", 3);  buttons[3].drawButton();//pongo un boton tactil igual al anterior,pero en blanco, para machacar el anterir boton
 }
  puertaAnterior = puerta;
  Serial.println(puerta);
}

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.