Touch Screen#
TouchScreen#
构造函数#
描述#
构造函数
语法#
TouchScreen(TwoWire *wire, uint16_t dev_addr);
参数#
wire
See Wire/I2Cdev_addr
触摸设备 I2C 设备地址
返回值#
无
示例说明#
无
poll#
描述#
读取触摸数据
语法#
TSPoint poll();
参数#
无
返回值#
TSPoint
See TSPoint
示例说明#
无
ts_read#
描述#
使用 I2C 读寄存器,可在派生类中重写该函数
语法#
virtual int ts_read(int cmd, int *val);
参数#
cmd
寄存器地址val
读取到的结果
返回值#
sts
执行状态0
成功Other
失败
示例说明#
无
ts_write#
描述#
使用 I2C 写寄存器,可在派生类中重写该函数
语法#
virtual int ts_write(int cmd, int *val);
参数#
cmd
寄存器地址val
写入寄存器的数据
返回值#
sts
执行状态0
成功Other
失败
示例说明#
无
do_tscal#
描述#
触摸屏校准,可在派生类中重写该函数
语法#
virtual int do_tscal(ST7789V &lcd, int result[7]);
参数#
lcd
屏幕,用来显示校准点, See LCDresult
校准结果
返回值#
sts
执行状态0
成功Other
失败
示例说明#
无
TSPoint#
构造函数#
描述#
构造函数
语法#
TSPoint(int x0, int y0, enum event_type type0);
参数#
x0
触摸坐标 x 轴坐标y0
触摸坐标 y 轴坐标type0
触摸结果类型TOUCH_NONE
默认TOUCH_BEGIN
按下TOUCH_MOVE
按下之后移动TOUCH_END
停止触摸
返回值#
无
示例说明#
无
NS2009#
构造函数#
描述#
构造函数
语法#
NS2009(TwoWire *wire);
参数#
wire
See Wire/I2C
返回值#
无
示例说明#
无
begin#
描述#
初始化函数
备注
在调用该函数之前,需要调用 wire->begin(scl, sda)
,进行引脚配置
语法#
bool begin(int cal[7] = NULL);
参数#
cal
校准参数
返回值#
sts
初始化结果true
成功false
失败
示例说明#
无
例程 - track.ino#
在屏幕上画出触摸轨迹
#include "Arduino.h"
#include "NS2009.h"
#include "ST7789V.h"
#include "Wire.h"
#include "k210-hal.h"
#define CLR_PIN (16)
TwoWire i2c1(1); // 使用I2C1
NS2009 ts(&i2c1); // 构造NS2009
ST7789V lcd(240, 320); // 构造LCD
void setup()
{
Serial.begin(115200); // 初始化串口,115200波特率
while (!Serial)
{
}
// need configure the pins
if (false == i2c1.begin(30, 31)) // 配置触摸芯片的引脚
{
Serial.println("ts i2c begin failed!");
while (1)
{
}
}
if (false == ts.begin()) //初始化NS2009
{
Serial.println("ts begin failed!");
while (1)
{
}
}
lcd.begin(); //初始化屏幕
lcd.setRotation(3); // 旋转屏幕
// 取消注释,则在开机之后进行触摸校准
// int cal[7];
// ts.do_tscal(lcd, cal);
// for(int i = 0; i < 7; i++)
// {
// Serial.printf("%d->%d\n", i, cal[i]);
// }
lcd.fillScreen(0xFFFF); // 填充屏幕为白色
pinMode(CLR_PIN, INPUT_PULLUP); // 初始化引脚,按下清空轨迹
Serial.println("Start!");
}
// 在屏幕上画点
static inline void lcd_draw(int x, int y)
{
lcd.writePixel(x, y, 0xF800);
lcd.endWrite();
}
void loop()
{
auto p = ts.poll(); // 读取触摸信息
// 判断触摸信息,并画点
if((p.type != TOUCH_END) && (p.type != TOUCH_NONE))
{
lcd_draw(p.x, p.y);
}
// 判断按键是否按下,按下则清屏
if(0x00 == digitalRead(CLR_PIN))
{
lcd.fillScreen(0xFFFF);
}
}