problema con lo sketch per tastiera qwerty su display adafruit 2.8"

Riciao a tutti :smiley:
dopo il precedente post riguardante i comandi della libreria ILI9341, risolto, almeno per ora, ho riscontrato un altro problema, o meglio lacuna ( ignoranza) che mi sta incasinado un po’ i lavori.
Sto cercando di disegnare una tastiera qwerty sul monitor tft 2.8" della adafruit

fin’ora, non nego, dopo anche della fatica… ::slight_smile: ho disegnato 2 pulsanti corrispondenti alla A e B ed un rettangolo che serve da display.
fino qui abbastanza chiaro e liscio, i problemi nei quali mi sono imbattutto, e per i quali non riesco a trovare soluzione, anche se penso sia un errore di sintassi, parentesi ecc… sono i seguenti:

  1. premendo sia sul pulsante A che B mi compaiono le lettere AB insieme nel display e nel monitor seriale dice che ho premuto sia A che B, ho ricontrollato le coordinate dei 2 pulsanti ma penso siano corrette e diversificate;
  2. premendo ovunque sullo schermo sul monitor seriale compare la scritta “pulsante A premuto” e nel rettangolo “display” compare la scritta AB

ho provato a modificare la posizione di parentesi ed usare diversamente if, else e else if… ma nulla,
Nello sketch allegato si riscontrano i problemi sopra riportati.
vorrei che ad ogni tasto corrispondesse la scrittura della sua lettara.
Mi piacerebbe risolvere il problema con i primi due tasti in modo da poter continuare con la creazione della tastiera per un totale di 40 tasti. sempre nello sketch si noterà che visualizzo solo 6 lettere, in quello definitivo penso di arrivare a 20. sicuramente voi che ne sapete moltopiù di me noterete delle parti di codice superflue, derivano da uno spudorato copia-incolla dall’esempio onoffbutton della libreria adafruit 9341 caricata nellIDE.
se qualcuno potesse darmi delle dritte per migliorare la situazione ne sarei molto grato. Ovviamente a progetto terminato sarà postato nell’apposita sezione per chi ne avesse bisogno :wink:
grazie a tutti ciao :smiley:

#include <Adafruit_GFX.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_ILI9341.h>
#include <Adafruit_STMPE610.h>
#include <stdint.h>
#include "TouchScreen.h"
#include <TouchScreen.h>


#define STMPE_CS 8                                   // parte per il funzionamento dei comandi tft.
Adafruit_STMPE610 ts = Adafruit_STMPE610(STMPE_CS);
#define TFT_CS 10
#define TFT_DC 9
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);


#define TS_MINX 150
#define TS_MINY 180
#define TS_MAXX 3800
#define TS_MAXY 4000

#define MINPRESSURE 55
#define MAXPRESSURE 58
int PRESSURE =0;


#define AFRAME_X 140// definisce le dimensioni del rettangolo AFRAME
#define AFRAME_Y 150
#define AFRAME_W 50
#define AFRAME_H 50

#define BFRAME_X 190// definisce le dimensioni del rettangolo BFRAME
#define BFRAME_Y 150
#define BFRAME_W 50
#define BFRAME_H 50

#define SCRITTA_X 65// definisce le dimensioni del rettangolo SCRITTA
#define SCRITTA_Y 95
#define SCRITTA_W 200
#define SCRITTA_H 30


#define ABUTTON_X AFRAME_X
#define ABUTTON_Y AFRAME_Y
#define ABUTTON_W AFRAME_W
#define ABUTTON_H AFRAME_H

#define BBUTTON_X BFRAME_X
#define BBUTTON_Y BFRAME_Y
#define BBUTTON_W BFRAME_W
#define BBUTTON_H BFRAME_H



int statoButton     = 0 ; // stato del pulsante
int countButton     = 0 ; // conteggio del bottone
int countstatoButton= 0 ; // conteggio stato bottone




void drawFrame()
{
tft.drawRect(SCRITTA_X, SCRITTA_Y, SCRITTA_W, SCRITTA_H, ILI9341_BLACK);
tft.drawRect(AFRAME_X, AFRAME_Y, AFRAME_W, AFRAME_H, ILI9341_BLACK);                                     // disegna un rettangolo con le dimensioni impostate prima 
tft.drawRect(BFRAME_X, BFRAME_Y, BFRAME_W, BFRAME_H, ILI9341_BLACK);
}

void ABtn()
{ 
tft.fillRect(ABUTTON_X, ABUTTON_Y, ABUTTON_W, ABUTTON_H, ILI9341_RED);   // definisce il pulsante ABUTTON,
drawFrame();
tft.setCursor(ABUTTON_X + 15 ,ABUTTON_Y + 15);
tft.setTextColor(ILI9341_BLACK);
tft.setTextSize(3);
tft.println("A");
}
void BBtn()
{ 
tft.fillRect(BBUTTON_X, BBUTTON_Y, BBUTTON_W, BBUTTON_H, ILI9341_RED);   // definisce il pulsante BBUTTON,
drawFrame();
tft.setCursor(BBUTTON_X + 15 ,BBUTTON_Y + 15);
tft.setTextColor(ILI9341_BLACK);
tft.setTextSize(3);
tft.println("B");
}


void setup(void) 
{
 Serial.begin(9600);
tft.begin();
if (!ts.begin()) { 
  Serial.println("Unable to start touchscreen.");
  
} 
else { 
  Serial.println("Touchscreen started.");
}
tft.fillScreen(ILI9341_WHITE);                                        // definisce il colore dello sfondo
// origin = left,top landscape (USB left upper)
tft.setRotation(1); 
ABtn();
BBtn();
}


void loop()
{
// See if there's any  touch data for us
if (!ts.bufferEmpty())
{   
  // Retrieve a point  
  TS_Point p = ts.getPoint(); 
  // Scale using the calibration #'s
  // and rotate coordinate system
  p.x = map(p.x, TS_MINY, TS_MAXY, 0, tft.height());
  p.y = map(p.y, TS_MINX, TS_MAXX, 0, tft.width());
  int y = tft.height() - p.x;
  int x = p.y;
if (p.z > MINPRESSURE && p.z < MAXPRESSURE) {         // pressione 100 = bassa pressione
                                                    // pressione 0 = massima pressione
   
   Serial.print("\tPressure = "); Serial.println(p.z);

                                              // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
{
  if  (((x > ABUTTON_X) && (x < (ABUTTON_X + ABUTTON_W))));{                   // indica entro quali coordinate deve essere il tocco per far sisulatare premuto il pulsante A
  if (((y > ABUTTON_Y) && (y <= (ABUTTON_Y + ABUTTON_H))));{
    
  statoButton = 1;
  }
     Serial.println ("tasto A premuto");
     ABtn();
                                                                                  
  countButton=countButton+1;                                                      // Aumento il count del bottone 
  Serial.println ( countButton);                                                  // stampa su monitor seriale il conteggio del contatore




if ( countButton == 2)                                                              // se è la seconda pressione del bottone sposta scrive la A più a dx di 16 posti
{ 
         
    tft.setCursor(SCRITTA_X + 18 ,SCRITTA_Y + 4);
tft.setTextColor(ILI9341_BLACK);
tft.setTextSize(3);
tft.println("A");
} 
if ( countButton == 3) 
{ 
         
    tft.setCursor(SCRITTA_X + 34 ,SCRITTA_Y + 4);
tft.setTextColor(ILI9341_BLACK);
tft.setTextSize(3);
tft.println("A");
} 
if ( countButton == 4) 
{ 
         
    tft.setCursor(SCRITTA_X + 50 ,SCRITTA_Y + 4);
tft.setTextColor(ILI9341_BLACK);
tft.setTextSize(3);
tft.println("A");
} 
if ( countButton == 5) 
{ 
         
    tft.setCursor(SCRITTA_X + 66 ,SCRITTA_Y + 4);
tft.setTextColor(ILI9341_BLACK);
tft.setTextSize(3);
tft.println("A");
}
if ( countButton == 6) 
{ 
         
    tft.setCursor(SCRITTA_X + 82 ,SCRITTA_Y + 4);
tft.setTextColor(ILI9341_BLACK);
tft.setTextSize(3);
tft.println("A");
}    

 else 
 {                                                      // scrive A nel primo posto a sx nella casella SCRITTA quando il pulsante A viene premuto
    tft.setCursor(SCRITTA_X + 2 ,SCRITTA_Y + 4);
tft.setTextColor(ILI9341_BLACK);
tft.setTextSize(3);
tft.println("A");
 }}

                                          //BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

  if  (((x > BBUTTON_X) && (x < (BBUTTON_X + BBUTTON_W))));{                   // indica entro quali coordinate deve essere il tocco per far sisulatare premuto il pulsante B
  if (((y > BBUTTON_Y) && (y <= (BBUTTON_Y + BBUTTON_H))));{
    
  statoButton = 1;
  }
     Serial.println ("tasto B premuto");
     ABtn();
                                                                                  
  countButton=countButton+1;                                                      // Aumento il count del bottone 
  Serial.println ( countButton);                                                  // stampa su monitor seriale il conteggio del contatore




if ( countButton == 2)                                                              // se è la seconda pressione del bottone sposta scrive la B più a dx di 16 posti
{ 
         
    tft.setCursor(SCRITTA_X + 18 ,SCRITTA_Y + 4);
tft.setTextColor(ILI9341_BLACK);
tft.setTextSize(3);
tft.println("B");
} 


 else 
 {                                                      // scrive B nel primo posto a sx nella casella SCRITTA quando il pulsante B viene premuto
    tft.setCursor(SCRITTA_X + 2 ,SCRITTA_Y + 4);
tft.setTextColor(ILI9341_BLACK);
tft.setTextSize(3);
tft.println("B");
 }}
 
 }
   }
  }
 }

@Secondome: in conformità al regolamento, punto 7, edita (in basso a destra del post, bottone More → Modify) il tuo post e racchiudi il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra). Grazie.

Guglielmo

P.S.: Se inoltre lo riprendi nel IDE e usi la funzione che trovi nel Menu → Tools → Auto Format … lo avrai ben formattato e molto più leggibile (… inoltre ti indica anche se mancano delle parentesi)

Scusa Guglielmo, spero cosi sia meglio ! :smiley:
adesso seguo il tuo consiglio e verifico...
grazie