Go Down

Topic: Schermo touch (Read 254 times) previous topic - next topic

Etabeta2018

Jan 29, 2019, 09:23 pm Last Edit: Jan 29, 2019, 09:28 pm by Etabeta2018
Salve potreste spiegarmi molto semplicemente come posso modificare le coordinate dello schermo touch.Mi spiego meglio ho preso lo scheck da github dove ci sono due pulsanti e funziona perfettamente ma come provo a spostarli o a ruotere lo schermo non funzionano più. Ho letto in giro che è un problema di coordinate dle touch mi potete spiegare come funziona?Lo schermo in questione è questo,3.2 pollici TFT LCD modulo Display Touch Screen Shield sensore di temperatura a bordo + Penna per Arduino UNO R3/Mega 2560 R3/Leonardo ,preso qui https://it.aliexpress.com/item/3-2-TFT-LCD-Display-module-Touch-Screen-Shield-board-onboard-temperature-sensor-w-Touch-Pen/32755473754.html?spm=a2g0s.9042311.0.0.32a54c4dDqoS8I .Lo scheck è questo
Code: [Select]
//Librerie

#include <MCUFRIEND_kbv.h>
MCUFRIEND_kbv tft;       // hard-wired for UNO shields anyway.
#include <TouchScreen.h>
//---------------------

//--------------
char *name = "Please Calibrate.";  //edit name of shield
const int XP = 6, XM = 56, YP = 55, YM = 7; //ID=0x9341
const int TS_LEFT = 907, TS_RT = 136, TS_TOP = 942, TS_BOT = 139;

TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
TSPoint tp;


#include <Adafruit_GFX.h>
#include <MCUFRIEND_kbv.h>

#include <TouchScreen.h>
#define MINPRESSURE 200
#define MAXPRESSURE 1000

// ALL Touch panels and wiring is DIFFERENT
// copy-paste results from TouchScreen_Calibr_native.ino




Adafruit_GFX_Button on_btn, off_btn;

int pixel_x, pixel_y;     //Touch_getXY() updates global vars
bool Touch_getXY(void)
{
 
  TSPoint p = ts.getPoint();
  pinMode(YP, OUTPUT);      //restore shared pins
  pinMode(XM, OUTPUT);
  digitalWrite(YP, HIGH);   //because TFT control pins
  digitalWrite(XM, HIGH);

  bool pressed = (p.z > MINPRESSURE && p.z < MAXPRESSURE);
  if (pressed) {
    pixel_x = map(p.x, TS_LEFT, TS_RT, 0, tft.width()); //.kbv makes sense to me
    pixel_y = map(p.y, TS_TOP, TS_BOT, 0, tft.height());
  }
  return pressed;

}
// Assign human-readable names to some common 16-bit color values:
#define BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF


void setup(void)
{
  //-
 
  //-------
  Serial.begin(9600);
  /* */
  uint16_t ID = tft.readID();

  if (ID == 0xD3D3) ID = 0x9486; // write-only shield
  tft.begin(ID);
  tft.setRotation(0);            //PORTRAIT
  tft.fillScreen(BLACK);
  /*
     primo numero distanza da SX60
     secondo numero altezza dall'alto 200
     terzo numero larghezza del bottone 100
     quarto numero altezza40
     ultimo numero grandezza del carattere2
  */
  on_btn.initButton(&tft,  60, 200, 100, 40, WHITE, CYAN, BLACK, "acceso", 2);
  off_btn.initButton(&tft, 180, 200, 100, 40, WHITE, CYAN, BLACK, "OFF", 2);
  on_btn.drawButton(false);
  off_btn.drawButton(false);
  tft.fillRect(40, 80, 160, 80, RED);

  //-----------

}
void loop(void)
{
  bool down = Touch_getXY();
  on_btn.press(down && on_btn.contains(pixel_x, pixel_y));
  off_btn.press(down && off_btn.contains(pixel_x, pixel_y));
  if (on_btn.justReleased())
    on_btn.drawButton();
  if (off_btn.justReleased())
    off_btn.drawButton();
  if (on_btn.justPressed()) {
    on_btn.drawButton(true);
     /*
     primo numero distanza da SX40
     secondo numero altezza dall'alto 80
     terzo numero larghezza del bottone 160
     quarto numero altezza80
     ultimo numero grandezza del carattere2
  */
    tft.fillRect(40, 80, 160, 80, GREEN);
    Serial.print ("ciao");
    //------
    tft.setTextColor(YELLOW, BLACK);
    tft.setCursor(0, (tft.height() * 6) / 8);
    tft.print("Touch screen Diego");
   
    //------
  }
  if (off_btn.justPressed()) {
    off_btn.drawButton(true);
    tft.fillRect(40, 80, 160, 80, RED);
    tft.setTextColor(YELLOW, BLACK);
    tft.setCursor(0, (tft.height() * 6) / 8);
    tft.print("                  ");
  }

}
[code]

Go Up