Skip to main content

2.8英寸TFT触摸屏盾牌 V1.0

2.8英寸TFT触摸屏盾牌是一款兼容Arduino / Arduino Mega的多彩TFT显示屏,配备4线电阻式触摸屏。它包括一个兼容Arduino盾牌的脚位设计以便连接。TFT驱动基于专业驱动IC,采用8位数据和4位控制接口。

特性

  • 兼容Arduino/Seeeduino、Arduino Mega和Seeeduino Mega

  • 2.8英寸QVGA显示屏

  • 电阻式触摸屏

规格

项目最小值典型值最大值单位
电压4.555.5VDC
电流//250mA
LCD面板尺寸2.8英寸
视角60~120
分辨率320x240/
LCD颜色65k/
背光类型LED/
LCD驱动ICST7781R/
接口类型10±2g
接口类型并口(8位数据 + 4位控制)/
触摸屏4线电阻式触摸屏/
活动区域43.2*57.3mm
ESD接触放电±4KV
ESD空气放电±8KV
尺寸72.5x54.7x18mm
重量24±2g

注意事项

  • 请勿使模块受到机械冲击或因掉落而受损。

  • 请勿对显示屏表面或相邻区域施加过大的压力,否则可能导致颜色调变化。

Arduino上的引脚使用

D0 - 未使用。

D1 - 未使用。

D2 - LCD数据位8。

D3 - LCD数据位9。

D4 - LCD数据位10。

D5 - LCD数据位11。

D6 - LCD数据位12。

D7 - LCD数据位13。

D8 - LCD数据位14。

D9 - LCD数据位15。

D10 - LCD CS引脚,低电平有效。

D11 - LCD RS引脚。

D12 - LCD WR引脚。

D13 - LCD RD引脚。

D14(A0) - 触摸屏Y-。

D15(A1) - 触摸屏X-。

D16(A2) - 触摸屏Y+。

D17(A3) - 触摸屏X+。

D18(A4) - 未使用。

D19(A5) - 未使用。

使用说明

硬件安装

  • 按如下所示将 TFT 触摸屏扩展板插入 Seeeduino。

TFT 编程

TFT 库提供了以下应用程序接口(API)。该库直接访问 PORT 寄存器,而不是使用 Arduino 的 API。这是为了提高 MCU 和 TFT 之间的通信速度。目前,该库支持 Arduino、Arduino Mega(1280 或 2560)以及与 Seeeduino ADK 主板兼容的开发板。在 Mega 上,TFT 的 8 位数据端口分布在属于不同端口的不同引脚上。与 Arduino 相比,这会降低图形绘制的速度。端口引脚的选择完全基于 Arduino / Mega 的端口引脚排列。

通用功能


paintScreenBlack(void)

  • TFT RAM 只能在显示关闭模式下初始化,因此此功能仅用于用黑色清屏。

setXY(unsigned int poX, unsigned int poY)

  • 将光标位置设置为 (poX, poY)。此功能由其他图形 API 内部使用。

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

  • 将 (poX, poY) 像素设置为颜色 color。此功能由其他图形 API 内部使用。

线条


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

  • 从像素 (x0, y0) 到像素 (x1, y1) 绘制一条颜色为 color 的线。

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

  • 从像素 (poX, poY) 开始绘制长度为 length 的水平线,颜色为 color。

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

  • 从像素 (poX, poY) 开始绘制长度为 length 的垂直线,颜色为 color。

矩形


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

  • 从 (poX, poY) 开始绘制一个长度为 length、宽度为 width、颜色为 color 的矩形。

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

  • 从像素 (poX, poY) 开始绘制一个填充的矩形,长度为 length,宽度为 width,颜色为 color

圆形


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

  • 在 (poX, poY) 绘制一个半径为 r、颜色为 color 的圆。

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

  • 在 (poX, poY) 绘制一个填充的圆,半径为 r,颜色为 color

文本


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

  • 从 (poX, poY) 开始绘制一个字符,使用内置字体,大小为 size,颜色为 fgcolor。此功能由 drawString() 函数使用。

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

  • 从 (poX, poY) 开始绘制一段文本,使用内置字体,大小为 size,颜色为 fgcolor。

触摸屏编程


TFT 触摸屏扩展板使用 Adafruit 触摸屏库。要了解电阻式触摸屏的原理,请参考 外部链接。简而言之,4 线电阻式触摸屏为 X 和 Y 轴分别提供两个电压分压器。通过为每个轴施加适当的电压并扫描 ADC 值,可以检测触摸的位置。这些值总是容易受到噪声影响,因此使用了数字滤波器。

  • 要使用 TouchScreen 库,首先创建一个 TouchScreen 对象:

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

其中 XP、YP、XM 和 YM 是连接到触摸屏的 XPlus、YPlus、XMinus 和 YMinus 引脚的 ADC 端口引脚。300 是 X 板之间的电阻。

  • 使用以下方法读取原始 ADC 值:

Point p = ts.getPoint();

  • 原始 ADC 值需要转换为像素坐标。这可以通过 map 函数完成。此映射在 v0.9 和 v1.0 中有所不同。演示应用程序已经处理了此映射。

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

  • 以下示例代码演示了如何使用 TouchScreen 库。这也可以用于校准触摸屏坐标。

  • 编译并上传代码。

  • 打开串口监视器并触摸屏幕上显示的点。

  • 检查显示的 X 和 Y 值是否正确。如果不正确,则需要重新校准触摸屏坐标。

如何校准触摸屏?

  • 参数 TS_MINX, TS_MAXX, TS_MINY 和 TS_MAXY 实际上决定了触摸屏的极限,并形成校准参数。

  • 分配给这些变量的值是触摸屏对角线极限点(即原始 X 和原始 Y)时测量的 ADC 值。

  • 触摸点 (0,0) 和 (239,319),记录原始 X 和原始 Y 值。为了更高的准确性,请多次尝试并找到正确的值。

  • TS_MINX 对应于 X = 0 时的 ADC 值;

  • TS_MINY 对应于 Y = 0 时的 ADC 值;

  • TS_MAXX 对应于 X = 240 -1 即 239 时的 ADC 值;

  • TS_MAXY 对应于 Y = 320 -1 即 319 时的 ADC 值;

  • 在代码中更改这些参数,重新编译并上传到 Arduino。

  • 如果仍然无法获得准确的值,请重复上述步骤。

触摸屏演示代码

// Paint application - 演示 TFT 和触摸屏功能
// 此库是免费软件;您可以根据 GNU 较小通用公共许可证的条款
// 重新分发和/或修改它;许可证版本为 2.1 或更高版本。
//
// 此库分发的目的是希望它能有用,但不提供任何保证;
// 包括但不限于适销性或特定用途的适用性。
// 有关详细信息,请参阅 GNU 较小通用公共许可证。
//
// 您应该已经收到此库的 GNU 较小通用公共许可证副本;
// 如果没有,请联系: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 // 必须是模拟引脚,使用 "An" 表示法!
#define XM A1 // 必须是模拟引脚,使用 "An" 表示法!
#define YM 54 // 可以是数字引脚,这是 A0
#define XP 57 // 可以是数字引脚,这是 A3

#elif defined(__AVR_ATmega32U4__) // Leonardo
#define YP A2 // 必须是模拟引脚,使用 "An" 表示法!
#define XM A1 // 必须是模拟引脚,使用 "An" 表示法!
#define YM 18 // 可以是数字引脚,这是 A0
#define XP 21 // 可以是数字引脚,这是 A3

#else // 168, 328, 其他
#define YP A2 // 必须是模拟引脚,使用 "An" 表示法!
#define XM A1 // 必须是模拟引脚,使用 "An" 表示法!
#define YM 14 // 可以是数字引脚,这是 A0
#define XP 17 // 可以是数字引脚,这是 A3

#endif

// 测量 (0,0) 和 (210-1,320-1) 的 ADC 值
// TS_MINX 对应于 X = 0 时的 ADC 值
// TS_MINY 对应于 Y = 0 时的 ADC 值
// TS_MAXX 对应于 X = 240 -1 时的 ADC 值
// TS_MAXY 对应于 Y = 320 -1 时的 ADC 值

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

int color = WHITE; // 画笔颜色

// 为了更好的压力精度,我们需要知道 X+ 和 X- 之间的电阻
// 使用任意万用表读取
// 2.8" TFT 触摸屏扩展板的 X 板电阻为 300 欧姆

TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300); // 初始化触摸屏端口引脚

void setup()
{

Tft.init(); // 初始化 TFT 库
pinMode(0,OUTPUT);
// 绘制调色板
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()
{

// 一个点对象包含 x、y 和 z 坐标。
Point p = ts.getPoint();

// 将读取的 ADC 值映射到像素坐标

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

// 我们有一些最低压力值认为是“有效”的
// 压力为 0 表示没有按压!

if (p.z > ts.pressureThreshhold) {


// 检测画笔颜色变化
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);
}
}
}

演示代码展示

  • 按如下所示将 TFT 触摸屏扩展板插入 Seeeduino。

TFT 触摸屏扩展板连接到 Seeeduino

在线原理图查看器

资源

技术支持与产品讨论

如果您有任何技术问题,请将问题提交到我们的 论坛。 感谢您选择我们的产品!我们致力于为您提供不同的支持,以确保您使用我们的产品时体验顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。

Loading Comments...