Touch Screen#

TouchScreen#

构造函数#

描述#

构造函数

语法#

TouchScreen(TwoWire *wire, uint16_t dev_addr);

参数#

  • wire See Wire/I2C

  • dev_addr 触摸设备 I2C 设备地址

返回值#

示例说明#

poll#

描述#

读取触摸数据

语法#

TSPoint poll();

参数#

返回值#

示例说明#

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 LCD

  • result 校准结果

返回值#

  • 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);

参数#

返回值#

示例说明#

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);
    }
}