# K230 触摸屏（TOUCH）使用教程

## 概述

K230 支持 **电容屏** 和 **电阻屏** 的触摸输入，提供了基于 RT-Smart 封装的 `TOUCH` 类接口。开发者可使用它读取触点坐标、事件类型等信息，广泛应用于 HMI、交互终端等场景。

## 快速上手示例

以下示例展示了如何读取触摸屏上的触点数据：

```python
from machine import TOUCH

# 实例化触摸设备 0
tp = TOUCH(0)

# 可选：启用坐标旋转（旋转 90 度），适配屏幕方向
# tp = TOUCH(0, 1)

# 读取当前触摸点数据
p = tp.read()

# 输出完整的触摸数据结构
print(p)

# 如有触摸点，可访问第一个触点的坐标与事件类型
# print(p[0].x)       # X 坐标
# print(p[0].y)       # Y 坐标
# print(p[0].event)   # 事件类型（如 Touch Down、Move、Up）
```

## 接口说明

| 接口名                 | 说明                                |
| ------------------- | --------------------------------- |
| `TOUCH(id)`         | 创建触摸屏实例，`id=0` 表示设备号              |
| `TOUCH(id, rotate)` | 实例化并启用屏幕坐标旋转，`rotate=1` 代表旋转 90 度 |
| `read()`            | 返回当前触摸点信息，通常是一个列表结构               |

## 示例详解

### 实例化设备

```python
tp = TOUCH(0)
```

创建 `TOUCH` 设备对象，表示使用触摸通道 0。

可选参数 `TOUCH(0, 1)` 用于对坐标做旋转，适用于竖屏方向的设备。

### 读取触摸数据

```python
p = tp.read()
print(p)
```

返回的 `p` 通常是一个包含多个触点对象的列表。每个对象包含：

* `x`: X 坐标
* `y`: Y 坐标
* `event`: 触摸事件（如 Touch Down、Move、Touch Up）

### 示例输出参考

```text
[<TouchPoint x=120 y=65 event=0>]
```

如果有多个触点，例如支持多指操作：

```text
[<TouchPoint x=120 y=65 event=0>, <TouchPoint x=250 y=130 event=0>]
```

## 应用场景

| 场景        | 示例               |
| --------- | ---------------- |
| 图形界面交互    | 基于触摸点驱动按钮点击、滑动切换 |
| 自定义手势识别   | 多点滑动、旋转等操作识别     |
| 简单绘图板或签名板 | 基于触点轨迹做线条绘制      |

## 常见问题

**Q：没有读取到触摸点，返回是空列表？**
A：此时说明屏幕未被触摸。`tp.read()` 只在屏幕被按下时返回触点。
**Q：如何处理多点触控？**
A：读取到的是一个包含多个 `TouchPoint` 的列表，使用 `for` 循环逐个读取即可。
**Q：是否支持旋转坐标系？**
A：支持，通过第二个参数 `TOUCH(0, 1)` 可开启坐标旋转（90 度顺时针）。

## 延伸阅读

* 📄 [TOUCH 模块 API 文档](../../api/machine/K230_CanMV_TOUCH模块API手册.md)
