示例37:旋转编码器
大约 2 分钟
示例37:旋转编码器
实验概述
旋转编码器通过旋转产生 A/B 两路正交脉冲信号,可检测旋转方向和角度。FastBee 内置 ENCODER 外设类型(type: 43)支持旋转编码器。
硬件接线
| 开发板标识 | GPIO引脚 | 连接设备 |
|---|---|---|
| CLK (A) | GPIO34 | 编码器 A相 |
| DT (B) | GPIO35 | 编码器 B相 |
| SW | GPIO4 | 编码器按键(可选) |
JSON 配置示例
{
"peripherals": [
{
"id": "encoder_01",
"name": "旋转编码器",
"type": 43,
"enabled": false,
"pins": [34, 35],
"params": {}
}
]
}外设执行联动
场景:编码器调节LED亮度(轮询触发+脚本)
功能:旋转编码器调节LED亮度(PWM占空比)
Web界面配置步骤
步骤1:确保已配置PWM LED外设
- 外设ID:
pwm_breath - 类型:GPIO PWM输出
步骤2:创建规则
- 点击左侧菜单 外设配置 → 切换到 外设执行管理 标签
- 点击 新增规则 按钮
- 填写基础配置:
- 规则名称:
编码器调光 - 上报数据:✅ 启用
- 启用:✅ 启用
- 规则名称:
步骤3:配置触发器(轮询触发)
点击 添加触发 按钮
填写触发器配置:
字段 填写内容 说明 触发类型 选择 轮询触发 检测变化 目标外设 选择 encoder_01旋转编码器 轮询间隔 5050ms(快速响应) 条件表达式 changed == true值变化时
步骤4:配置动作(脚本转换)
点击 添加动作 按钮
填写:
- 动作类型:选择 命令脚本
- 动作参数:
var pos=encoderRead('encoder_01'); var duty=Math.min(255,Math.max(0,pos*5)); pwmWrite('pwm_breath',duty);点击 保存 按钮
旋转编码器数值说明
| 旋转方向 | 计数值 | 说明 |
|---|---|---|
| 正转(顺时针) | 递增 | A相超前B相 |
| 反转(逆时针) | 递减 | B相超前A相 |
| 按下按键 | 单独检测 | SW引脚(GPIO4) |
注意事项
- 中断驱动:FastBee 使用中断检测编码器脉冲,不会丢步
- 方向判断:A 相超前 B 相为正转,B 相超前 A 相为反转
- 消抖:机械编码器有抖动,硬件可加 100nF 电容或软件消抖
- 计数范围:内部计数器为 int32,可正负计数
- 引脚选择:建议使用支持中断的引脚
