Aggiornamento schermata Touchscreen TFT 1/2

Buonasera,
sto progettando una centrale di allarme che interessa più zone attivabili tutte insieme oppure singolamente.
Il tutto è protetto da psw iniziale tramite la quale si accede al menù di attivazione
Lo schermo è un TFT Touchscreen 320 x 480 montato su un Arduino Mega con libreria MCUFRIEND_kbv
Fino ad ora, aiutandomi anche con varie ricerche fatte in internet, sono riuscito a far apparire una tastiera iniziale dove inserisco la psw che se corretta mi porta alla nuova schermata menù di attivazione centrale.
Fino ad ora ho riscontrato due problemi ai quali non sono riuscito, nonostante i tentativi e prove tramite codice, a venirne a capo e per i quali chiedo un aiuto
1° problema: quando digito la psw i numeri vengono evidenziati nell’apposito campo tranne l’ultima cifra in quanto appena la inserisco il programma passa direttamente al menù successivo mentre vorrei che si vedesse l’ultime cifra prima di passare al menù successivo
2° problema: quando passa al menù successivo altrea ai tasti di attivazione che mi aspetto di vedere mi ritrovo anche disegnato l’ultimo tasto che ho digitato della psw mentre non dovrebbe esserci
Le ho provate tutte, almeno quelle di mia conoscenza, ma non riesco a venirne a capo.
Devo dire che è la prima volta che mi cimento con uno schermo TFT.
Se qualcuno può indirizzarmi sulla soluzione sarei grato
Allego codice interessato suddiviso su due post in quanto supera il limite ammesso
Grazie

//librerie
#include <SPI.h> 
#include <Adafruit_GFX.h>
#include <MCUFRIEND_kbv.h>
#include <TouchScreen.h>

//definizioni per TFT 3.2"
#define MINPRESSURE 200
#define MAXPRESSURE 1000
#define BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF
#define LTBL    0x6EFC
#define BG222   0x2104
#define BG333   0x3186
#define BG111   0x1082

MCUFRIEND_kbv tft; //definizione oggetto TFT

const int XP=8,XM=A2,YP=A3,YM=9; //320x480 ID=0x9486
const int TS_LEFT=153,TS_RT=878,TS_TOP=949,TS_BOT=102;

TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
Adafruit_GFX_Button on_btn, off_btn, a1_btn, b2_btn, c3_btn, d4_btn, e5_btn, one_btn,
 two_btn, three_btn, four_btn, five_btn, six_btn, seven_btn, eight_btn, nine_btn,
 clear_btn, zero_btn, rtn_btn, return1_btn;//definizione bottoni

int pixel_x, pixel_y; //cordinate schermo premuto

//funzione che rileva la pressione dei tasti
  bool getPoint(){
  bool pressed = false;
  TSPoint p = ts.getPoint();
  pinMode(YP, OUTPUT);      //restore shared pins
  pinMode(XM, OUTPUT);
  digitalWrite(YP, HIGH);   //because TFT control pins
  digitalWrite(XM, HIGH);
  if ((p.z > MINPRESSURE) && (p.z < MAXPRESSURE)) {
    pressed = true;
    pixel_x = map(p.x, TS_LEFT, TS_RT, 0, tft.width());
    pixel_y = map(p.y, TS_TOP, TS_BOT, 0, tft.height());
  }
  return pressed;
}

String pWord, pString;
int counter = 0;
boolean correctP = false;

//variabili di sistema
boolean keyScrn = true;
boolean callScrn = false;


/* Vengono definite le costanti PIN utilizzati*/


//funzione per reset arduino
void(* resetFunc)(void) = 0;

void setup() {
  Serial.begin(9600);
  //inizializza il TFT
  int id = tft.readID(); //legge ID del TFT
  tft.begin(id); //inizializza il TFT
  tft.setRotation(0);    //0=PORTRAIT, 1=LANDSCAPE
  tft.fillScreen(BLACK); //sfondo schermo
  tft.setTextSize(2);
  tft.setTextColor(WHITE, BLACK);
  pWord = String("54321");
  pString = String("");
  drawKeypad();
    
}

void loop() {
  
    while (keyScrn) {
    keypad();
    }
}

>mark61: No, non è così che si mette il codice, per cui, cortesemente … in conformità al regolamento, punto 7, devi editare i tui post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More → Modify che si trova in basso a destra del tuo post) e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code] così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo. Grazie.

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non avrai sistemato il codice come richiesto, nessuno ti potrà rispondere, quindi ti consiglio di farlo al più presto. :wink:

seconda parte del code.
Mi scuso per il disquido precedente

void checkPword() {
        if (counter == 5) {
          if (pString == pWord) {
            counter = 0;
            correctP = true;
            pString = "";
            clear();
            tft.setTextColor(WHITE);
            tft.setCursor(10,20);
            tft.setTextSize(3);
            tft.setTextWrap(false);
            tft.println("PASSWORD CORRETTA");
            delay(100);
            clear();
            drawMenu();
            } else {
            clear();
            counter = 0;
            correctP = false;
            pString = "";
            tft.setTextColor(WHITE);
            tft.setCursor(38,20);
            tft.setTextSize(3);
            tft.setTextWrap(false);
            tft.println("PASSWORD ERRATA");
            }
          }
}

void keypad(void)
{
    bool down = getPoint();
    one_btn.press(down && one_btn.contains(pixel_x, pixel_y));
    two_btn.press(down && two_btn.contains(pixel_x, pixel_y));
    three_btn.press(down && three_btn.contains(pixel_x, pixel_y));
    four_btn.press(down && four_btn.contains(pixel_x, pixel_y));
    five_btn.press(down && five_btn.contains(pixel_x, pixel_y));
    six_btn.press(down && six_btn.contains(pixel_x, pixel_y));
    seven_btn.press(down && seven_btn.contains(pixel_x, pixel_y));
    eight_btn.press(down && eight_btn.contains(pixel_x, pixel_y));
    nine_btn.press(down && nine_btn.contains(pixel_x, pixel_y));
    clear_btn.press(down && clear_btn.contains(pixel_x, pixel_y));
    zero_btn.press(down && zero_btn.contains(pixel_x, pixel_y));
    rtn_btn.press(down && rtn_btn.contains(pixel_x, pixel_y));

    if (one_btn.justReleased())
        one_btn.drawButton();
        
    if (two_btn.justReleased())
        two_btn.drawButton();
        
    if (three_btn.justReleased())
        three_btn.drawButton();

    if (four_btn.justReleased())
        four_btn.drawButton();
        
    if (five_btn.justReleased())
        five_btn.drawButton();
        
    if (six_btn.justReleased())
        six_btn.drawButton();

    if (seven_btn.justReleased())
        seven_btn.drawButton();
        
    if (eight_btn.justReleased())
        eight_btn.drawButton();
        
    if (nine_btn.justReleased())
        nine_btn.drawButton();
        
    if (clear_btn.justReleased())
        clear_btn.drawButton();
        
    if (zero_btn.justReleased())
        zero_btn.drawButton();
        
    if (rtn_btn.justReleased())
        rtn_btn.drawButton();

    if (one_btn.justPressed()) {
        one_btn.drawButton(true);
        //tft.fillRect(40, 8, 160, 4, WHITE);
        counter++;
        pString += 1;
        checkPword();
        
        delay(100);}
        
    if (two_btn.justPressed()) {
        two_btn.drawButton(true);
        //tft.fillRect(40, 8, 160, 4, BLUE);
        counter++;
        pString += 2;
        checkPword();
        delay(100);}
        
    if (three_btn.justPressed()) {
        three_btn.drawButton(true);
        //tft.fillRect(40, 8, 160, 4, RED);
        counter++;
        pString += 3;
        checkPword();
        delay(100);}

        
    if (four_btn.justPressed()) {
        four_btn.drawButton(true);
        //tft.fillRect(40, 8, 160, 4, GREEN);
        counter++;
        pString += 4;
        checkPword();
        delay(100);}
        
    if (five_btn.justPressed()) {
        five_btn.drawButton(true);
        //tft.fillRect(40, 8, 160, 4, CYAN);
        counter++;
        pString += 5;
        checkPword();
        delay(100);}
        
    if (six_btn.justPressed()) {
        six_btn.drawButton(true);
        //tft.fillRect(40, 8, 160, 4, MAGENTA);
        counter++;
        pString += 6;
        checkPword();
        delay(100);}

        
    if (seven_btn.justPressed()) {
        seven_btn.drawButton(true);
        //tft.fillRect(40, 8, 160, 4, YELLOW);
        counter++;
        pString += 7;
        checkPword();
        delay(100);}
        
    if (eight_btn.justPressed()) {
        eight_btn.drawButton(true);
        //tft.fillRect(40, 8, 160, 4, WHITE);
        counter++;
        pString += 8;
        checkPword();
        delay(100);}
        
    if (nine_btn.justPressed()) {
        nine_btn.drawButton(true);
        //tft.fillRect(40, 8, 160, 4, BLACK);
        counter++;
        pString += 9;
        checkPword();
        delay(100);}
        
    if (clear_btn.justPressed()) {
        clear_btn.drawButton(true);
        //tft.fillRect(40, 8, 160, 4, GREEN);
        counter = 0;
        pString = "";
        delay(100);}
        
    if (zero_btn.justPressed()) {
        zero_btn.drawButton(true);
        //tft.fillRect(40, 8, 160, 4, YELLOW);
        counter++;
        pString += 0;
        checkPword();
        delay(100);}
        
    if (rtn_btn.justPressed()) {
        rtn_btn.drawButton(true);
        //tft.fillRect(40, 8, 160, 4, RED);
        counter = 0;
        pString = "";
        delay(100);
        callScrn = true;
        keyScrn = false;
        
        }
  tft.setTextColor(WHITE);
  tft.setCursor(110,70);
  tft.setTextSize(3);
  tft.setTextWrap(false);
  tft.println(pString);
    
}


void TopTXT() {
  tft.setTextColor(WHITE);
  tft.setCursor(38,20);
  tft.setTextSize(3);
  tft.setTextWrap(false);
  tft.println("ENTER PASSWORD");
}

void PassTXT() {
  tft.setTextColor(WHITE);
  tft.setCursor(80,70);
  tft.setTextSize(3);
  tft.setTextWrap(false);
  tft.println("[      ]");
}

void drawKeypad () {
  clear();
  TopTXT();
  PassTXT();
    one_btn.initButton(&tft, 55, 150, 70, 70, BLACK, LTBL, WHITE, "1", 3);
    two_btn.initButton(&tft, 160, 150, 70, 70, BLACK, LTBL, WHITE, "2", 3);
    three_btn.initButton(&tft, 260, 150, 70, 70, BLACK, LTBL, WHITE, "3", 3);
    four_btn.initButton(&tft, 55, 240, 70, 70, BLACK, LTBL, WHITE, "4", 3);
    five_btn.initButton(&tft, 160, 240, 70, 70, BLACK, LTBL, WHITE, "5", 3);
    six_btn.initButton(&tft, 260, 240, 70, 70, BLACK, LTBL, WHITE, "6", 3);
    seven_btn.initButton(&tft, 55, 330, 70, 70, BLACK, LTBL, WHITE, "7", 3);
    eight_btn.initButton(&tft, 160, 330, 70, 70, BLACK, LTBL, WHITE, "8", 3);
    nine_btn.initButton(&tft, 260, 330, 70, 70, BLACK, LTBL, WHITE, "9", 3);
    clear_btn.initButton(&tft, 55, 420, 70, 70, BLACK, LTBL, WHITE, "CLR", 3);
    zero_btn.initButton(&tft, 160, 420, 70, 70, BLACK, LTBL, WHITE, "0", 3);
    rtn_btn.initButton(&tft, 260, 420, 70, 70, BLACK, LTBL, WHITE, "RTN", 3);
    
    one_btn.drawButton(false);
    two_btn.drawButton(false);
    three_btn.drawButton(false);
    four_btn.drawButton(false);
    five_btn.drawButton(false);
    six_btn.drawButton(false);
    seven_btn.drawButton(false);
    eight_btn.drawButton(false);
    nine_btn.drawButton(false);
    clear_btn.drawButton(false);
    zero_btn.drawButton(false);
    rtn_btn.drawButton(false);
  }

void drawMenu() {
  bool down = getPoint();
  clear();
  on_btn.initButton(&tft, 80,200, 140,40, WHITE, CYAN, BLACK, "ALL ZONE", 2); //tutte i sensori
  off_btn.initButton(&tft, 240,200, 140,40, WHITE, CYAN, BLACK, "ZONE 1", 2); //solo le tapparelle e il garage
  a1_btn.initButton(&tft, 80,270, 140,40, WHITE, CYAN, BLACK, "ZONE 2", 2); //solo le tapparelle, le finestre e il garage
  b2_btn.initButton(&tft, 240,270, 140,40, WHITE, CYAN, BLACK, "ZONE 3", 2); //solo il garage
  c3_btn.initButton(&tft, 80,340, 140,40, WHITE, CYAN, BLACK, "DEACTIVE", 2); //disattiva la centrale
  d4_btn.initButton(&tft, 240,340, 140,40, WHITE, CYAN, BLACK, "RESET", 2); //reset
      
  on_btn.drawButton(false);
  off_btn.drawButton(false);
  a1_btn.drawButton(false);
  b2_btn.drawButton(false);
  c3_btn.drawButton(false);
  d4_btn.drawButton(false);
}

void clear() {
  tft.fillScreen(BLACK);
  }