Skip to main content

Touch Shield Display TFT de 2.8 pulgadas V1.0

2.8" TFT Touch Shield es una pantalla TFT multicolor con pantalla táctil resistiva de 4 hilos, compatible con Arduino y Arduino Mega. Incluye una huella compatible con shields Arduino para facilitar su montaje. El controlador TFT está basado en un circuito integrado profesional, con una interfaz de datos de 8 bits y control de 4 bits.

Características

  • Compatible con Arduino/Seeeduino, Arduino Mega y Seeeduino Mega
  • Pantalla QVGA de 2.8”
  • Pantalla táctil resistiva

Especificaciones

ElementoMínTípicoMáxUnidad
Voltaje4.555.5VDC
Corriente//250mA
Tamaño del panel LCD2.8pulgadas
Ángulo de visión60~120Grados
Resolución320x240/
Colores del LCD65k/
Tipo de retroiluminaciónLED/
Controlador LCD ICST7781R/
Tipo de interfaz10±2g
Tipo de interfazPuerto paralelo (8 bits de datos + 4 bits de control)/
Pantalla táctilPantalla táctil resistiva de 4 hilos/
Área activa43.2 × 57.3mm
Descarga ESD por contacto±4kV
Descarga ESD por aire±8kV
Dimensiones72.5 × 54.7 × 18mm
Peso24±2g

Precauciones

  • No someter el módulo a impactos mecánicos ni dejarlo caer.
  • No aplicar fuerza excesiva sobre la superficie de la pantalla o zonas adyacentes, ya que esto puede alterar los tonos de color.

Uso de pines en Arduino

  • D0 – No usado
  • D1 – No usado
  • D2 – Bit de datos LCD 8
  • D3 – Bit de datos LCD 9
  • D4 – Bit de datos LCD 10
  • D5 – Bit de datos LCD 11
  • D6 – Bit de datos LCD 12
  • D7 – Bit de datos LCD 13
  • D8 – Bit de datos LCD 14
  • D9 – Bit de datos LCD 15
  • D10 – Pin CS del LCD, activo en bajo
  • D11 – Pin RS del LCD
  • D12 – Pin WR del LCD
  • D13 – Pin RD del LCD
  • D14 (A0) – Pantalla táctil Y−
  • D15 (A1) – Pantalla táctil X−
  • D16 (A2) – Pantalla táctil Y+
  • D17 (A3) – Pantalla táctil X+
  • D18 (A4) – No usado
  • D19 (A5) – No usado

Uso

Instalación del Hardware

  • Inserta el TFT Touch Shield en el Seeeduino como se muestra a continuación.

Programación del TFT

La librería TFT proporciona las siguientes Interfaces de Programación de Aplicaciones (API).
Esta librería utiliza acceso directo a los registros PORT en lugar de las funciones estándar de Arduino, con el fin de aumentar la velocidad de comunicación entre el MCU y el TFT.
Actualmente, la librería es compatible con placas Arduino, Arduino Mega (1280 o 2560) y Seeeduino ADK Main Board.

En el caso del Mega, el puerto de datos de 8 bits del TFT está distribuido entre pines de diferentes puertos, lo que reduce la velocidad del dibujo gráfico en comparación con el Arduino.
La selección de pines está basada únicamente en la disposición de pines de los puertos de Arduino/Mega.

Funciones Generales


paintScreenBlack(void)

  • La RAM del TFT solo puede inicializarse con la pantalla apagada. Esta función se usa para limpiar la pantalla con color negro.

setXY(unsigned int poX, unsigned int poY)

  • Establece la posición del cursor en (poX, poY). Esta función es utilizada internamente por otras funciones gráficas.

setPixel(unsigned int poX, unsigned int poY, unsigned int color)

  • Establece el píxel (poX, poY) con el color indicado. Esta función también es usada internamente por otras funciones gráficas.

Líneas


drawLine(unsigned int x0, unsigned int y0, unsigned int x1, unsigned int y1, unsigned int color)

  • Dibuja una línea desde el píxel (x0, y0) hasta el píxel (x1, y1) con el color indicado.

drawVerticalLine(unsigned int poX, unsigned int poY, unsigned int length, unsigned int color)

  • Dibuja una línea horizontal de longitud length con el color indicado, comenzando desde el píxel (poX, poY).

drawHorizontalLine(unsigned int poX, unsigned int poY, unsigned int length, unsigned int color)

  • Dibuja una línea vertical de longitud length con el color indicado, comenzando desde el píxel (poX, poY).

Rectángulo


drawRectangle(unsigned int poX, unsigned int poY, unsigned int length, unsigned int width, unsigned int color)

  • Dibuja un rectángulo desde el punto (poX, poY), con longitud length, ancho width y color color.

fillRectangle(unsigned int poX, unsigned int poY, unsigned int length, unsigned int width, unsigned int color)

  • Dibuja un rectángulo relleno desde el píxel (poX, poY), con longitud length, ancho width y color color.

Círculo


drawCircle(int poX, int poY, int r, unsigned int color)

  • Dibuja un círculo en (poX, poY) con radio r y color color.

fillCircle(int poX, int poY, int r, unsigned int color)

  • Dibuja un círculo relleno en (poX, poY) con radio r y color color.

Texto


drawChar(unsigned char ascii, unsigned int poX, unsigned int poY, unsigned int size, unsigned int fgcolor)

  • Dibuja un carácter en (poX, poY) utilizando una fuente incorporada de tamaño size y color fgcolor. Esta función es utilizada por drawString().

*drawString(char string, unsigned int poX, unsigned int poY, unsigned int size, unsigned int fgcolor)

  • Dibuja una cadena de texto desde (poX, poY) usando una fuente incorporada de tamaño size y color fgcolor.

Programación de Pantalla Táctil


TFT Touch Shield utiliza la Librería de Pantalla Táctil de Adafruit.
Para comprender el principio detrás de una pantalla táctil resistiva, consulta los enlaces externos.

En resumen, una pantalla táctil resistiva de 4 hilos proporciona dos divisores de voltaje: uno para el eje X y otro para el eje Y.
Aplicando los voltajes adecuados para cada eje y escaneando los valores del ADC, se puede detectar la posición del toque. Estos valores suelen estar sujetos a ruido, por lo que se emplea un filtro digital.

  • Para usar la librería, primero crea un objeto TouchScreen:

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

Donde XP, YP, XM y YM son los pines ADC conectados a los terminales X+, Y+, X− y Y− de la pantalla táctil. El valor 300 representa la resistencia entre las placas X.

  • Para leer el valor ADC crudo:

Point p = ts.getPoint();

  • El valor ADC debe convertirse a coordenadas de píxeles. Esto se hace con la función map(). El mapeo varía entre las versiones v0.9 y v1.0. Las aplicaciones de demostración ya manejan este mapeo automáticamente:

p.x = map(p.x, TS_MINX, TS_MAXX, 240, 0); p.y = map(p.y, TS_MINY, TS_MAXY, 320, 0);

  • El siguiente sketch demuestra el uso de la librería TouchScreen. También puede usarse para calibrar las coordenadas de la pantalla táctil.

  • Compila y sube el sketch.

  • Abre el monitor serial y toca los puntos que aparecen en la pantalla.

  • Verifica si los valores X e Y mostrados son correctos. Si no lo son, es necesario recalibrar las coordenadas de la pantalla táctil.

¿Cómo calibrar la pantalla táctil?

  • Los parámetros TS_MINX, TS_MAXX, TS_MINY y TS_MAXY definen los límites extremos de la pantalla táctil y, en efecto, funcionan como parámetros de calibración.

  • Los valores asignados a estas variables son los valores ADC medidos (es decir, Raw X y Raw Y) cuando tocamos los extremos diagonales de la pantalla táctil.

  • Toca los puntos (0,0) y (239,319) y anota los valores Raw X y Raw Y. Para una mayor precisión, realiza la prueba varias veces hasta obtener valores consistentes.

  • TS_MINX corresponde al valor ADC cuando X = 0.

  • TS_MINY corresponde al valor ADC cuando Y = 0.

  • TS_MAXX corresponde al valor ADC cuando X = 240 - 1, es decir, 239.

  • TS_MAXY corresponde al valor ADC cuando Y = 320 - 1, es decir, 319.

  • Modifica estos parámetros en el sketch, recompila y súbelo nuevamente al Arduino.

  • Repite los pasos anteriores si aún no obtienes valores precisos.

Sketch de demostración de la pantalla táctil

// Paint application - Demonstate both TFT and Touch Screen
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#include <stdint.h>
#include <TouchScreen.h>
#include <TFT.h>

#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) // mega
#define YP A2 // must be an analog pin, use "An" notation!
#define XM A1 // must be an analog pin, use "An" notation!
#define YM 54 // can be a digital pin, this is A0
#define XP 57 // can be a digital pin, this is A3

#elif defined(__AVR_ATmega32U4__) // leonardo
#define YP A2 // must be an analog pin, use "An" notation!
#define XM A1 // must be an analog pin, use "An" notation!
#define YM 18 // can be a digital pin, this is A0
#define XP 21 // can be a digital pin, this is A3

#else //168, 328, something else
#define YP A2 // must be an analog pin, use "An" notation!
#define XM A1 // must be an analog pin, use "An" notation!
#define YM 14 // can be a digital pin, this is A0
#define XP 17 // can be a digital pin, this is A3

#endif

//Measured ADC values for (0,0) and (210-1,320-1)
//TS_MINX corresponds to ADC value when X = 0
//TS_MINY corresponds to ADC value when Y = 0
//TS_MAXX corresponds to ADC value when X = 240 -1
//TS_MAXY corresponds to ADC value when Y = 320 -1

#define TS_MINX 140
#define TS_MAXX 900
#define TS_MINY 120
#define TS_MAXY 940

int color = WHITE; //Paint brush color

// For better pressure precision, we need to know the resistance
// between X+ and X- Use any multimeter to read it
// The 2.8" TFT Touch shield has 300 ohms across the X plate

TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300); //init TouchScreen port pins

void setup()
{

Tft.init(); //init TFT library
pinMode(0,OUTPUT);
//Draw the pallet
Tft.fillRectangle(0,0,30,10,BLACK);
Tft.fillRectangle(30,0,30,10,RED);
Tft.fillRectangle(60,0,30,10,GREEN);
Tft.fillRectangle(90,0,30,10,BLUE);
Tft.fillRectangle(120,0,30,10,CYAN);
Tft.fillRectangle(150,0,30,10,YELLOW);
Tft.fillRectangle(180,0,30,10,WHITE);
Tft.fillRectangle(210,0,30,10,GRAY1);

}

void loop()
{

// a point object holds x y and z coordinates.
Point p = ts.getPoint();

//map the ADC value read to into pixel co-ordinates

p.x = map(p.x, TS_MINX, TS_MAXX, 240, 0);
p.y = map(p.y, TS_MINY, TS_MAXY, 320, 0);

// we have some minimum pressure we consider 'valid'
// pressure of 0 means no pressing!

if (p.z > ts.pressureThreshhold) {


// Detect paint brush color change
if(p.y < 15)
{
if(p.x >= 0 && p.x < 30)
{
color = BLACK;
}
if(p.x >= 30 && p.x < 60)
{
color = RED;
digitalWrite(0,HIGH);
}
if(p.x >= 60 && p.x < 90)
{
color = GREEN;
}
if(p.x >= 90 && p.x < 110)
{
color = BLUE;
digitalWrite(0,LOW);
}
if(p.x >= 120 && p.x < 150)
{
color = CYAN;
}
if(p.x >= 150 && p.x < 180)
{
color = YELLOW;
}
if(p.x >= 180 && p.x < 210)
{
color = WHITE;
}
if(p.x >= 210 && p.x < 240)
{
color = GRAY1;
}
}
else
{
Tft.fillCircle(p.x,p.y,2,color);
}
}
}

Código de Demostración

  • Inserta el TFT Touch Shield en el Seeeduino como se muestra a continuación.

TFT Touch Shield connected to Seeeduino

Visor de Esquemático en Línea

Recursos

Soporte Técnico y Discusión sobre el Producto

Si tienes algún problema técnico, por favor publícalo en nuestro foro.
¡Gracias por elegir nuestros productos! Estamos aquí para ofrecerte diferentes formas de soporte y asegurarnos de que tu experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para adaptarnos a tus preferencias y necesidades.

Loading Comments...