Riciao a tutti ![]()
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... :
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:
- 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;
- 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 ![]()
grazie a tutti ciao ![]()
#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");
}}
}
 }
 }
}