Files
IOT_SIM/samples/p3-t2-人体红外ZigBee联动/task.md
T
xuyueandClaude Opus 5.5 46e0f40cce
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
实训台接线:串口要选对。接线做成数据(BoardState.wiring),默认按教材布局图 COM2 ADAM-4017+、COM3 ADAM-4150、COM4 ZigBee 协调器、COM5 LED 屏,实验可在 meta.json 的 wiring 里改:项目 7 的书上代码在一个串口上打开两个模块,这三个实验把 4150 并到 COM2 的 485 总线上。选错串口时返回值照反编译的真机版 dll(4017 全 null、4150 全 false,4150 的 OnOff 和 LED 推送返回成功但设备不动作,ZigBee 返回 false);串口没打开时照教材仿真版。Open / Close / 没打开就读写报告给服务器,实训台最上方用红字提示("程序在 COM2 上打开 ADAM-4150,它接在 COM3""ADAM-4150 的串口没有打开,程序却在读写它"),评分不通过时也附上。只读接线展示:鼠标移到实训台设备上,标题栏写出线路,对应通道、模块、串口高亮;串口服务器按接线列出设备,程序打开的口亮绿点;程序里串口下拉框的灰字按当前接线。打开实验时浏览器发 experiment 消息换接线,老师看学生提交时按作业的实验接线(提交接口返回 sampleId)。"4017"统一写成 ADAM-4017+
上课前逐个检查 23 个实验后的修改:补上三处评分漏洞(项目 3 任务 1、项目 4 任务 3 的关闭和项目 7 任务 2 的熄灯,程序什么都不做也能通过);评分说明的空格;任务说明按实测补充(项目 2 任务 1–3、项目 3 任务 2、项目 4 任务 2、项目 7 任务 1–3、项目 8 任务 5)。使用说明、设计方案同步,设计方案记下以后可能扩展"物联网设备安装与调试"课

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 17:40:57 +08:00

3.3 KiB
Raw Blame History

任务目标

做一个"楼梯灯":勾选人体开关后,程序每 5 秒检查一次人体红外传感器,有人就开路灯,没人就关灯;不勾选时用"开""关"两个按钮手动控制。

练习重点:复选框的 Click 事件、定时器(Timer)、控件的 Enabled 属性。详细步骤见书 p58–61。

界面和控件名

控件 名称(Name) 文字(Text)和用途
窗体 Form1 人体红外ZigBee联动
灯泡 lamp1 窗体上显示路灯的亮灭
按钮 btn_lampOpen 开(手动开灯)
按钮 btn_lampClose 关(手动关灯)
分组框 groupBox1 配置
标签 lbl_lamp 路灯
标签 lbl_environment 环境采集
下拉框 com_lamp 路灯(ZigBee 协调器)的串口
下拉框 com_environment 环境采集(ADAM-4150)的串口
复选框 ch_bodyInfrared 人体开关
按钮 btn_open 打开(打开后变成"关闭")
定时器 timer1 Interval 设为 5000(5 秒),Enabled 保持 False

书上的表格写的是 btn_Open,代码里是 btn_open。名字区分大小写,请按代码写成 btn_open,否则自动评分找不到这个按钮。

实现步骤

  1. 代码开头加上 using System.IO.Ports; 和 using DeviceCtrlLibrary;。
  2. Form1_Load:清空两个下拉框,用 SerialPort.GetPortNames() 把串口号加进去。
  3. 写一个方法 LampOnOff(int RelayNum, bool IsOpen):调用 DeviceCtrlHelper.zigBeeHelper.OnOff 控制实训台的路灯,再调用 lamp1.OnOff 让窗体上的灯泡跟着变。
  4. btn_open 的 Click:和任务 1 一样,按钮文字是"打开"时打开 ZigBee 串口(com_lamp.Text)并改成"关闭",反之关闭串口。
  5. btn_lampOpen、btn_lampClose 的 Click:分别调用 LampOnOff(1, true)、LampOnOff(1, false)。
  6. ch_bodyInfrared 的 Click:
    • 勾上时:打开 ADAM-4150 串口(adam4150Helper.Open(com_environment.Text)),启动 timer1,两个手动按钮设为不可用;
    • 取消时:关闭串口,停止 timer1,两个按钮恢复可用。
  7. timer1 的 Tick:读 adam4150Helper.SetData().bodyInfraredValue,是 true(有人)就开灯,否则关灯。

书上第 15 步说"进入 Click 事件",定时器的事件其实是 Tick(事件窗口里叫"计时到"):在设计器里双击 timer1 就会生成 timer1_Tick。

在平台上怎么试

  1. 运行后,"路灯"选 COM4(ZigBee 协调器),"环境采集"选 COM3(ADAM-4150),点"打开"。
  2. 点"开""关",看窗体上的灯泡和实训台的照明灯 1 是否一起亮灭。
  3. 勾选"人体开关","开""关"按钮应变成灰色;在实训台上把人体红外点成"有人",5 秒内路灯应亮起,点回"无人"后 5 秒内熄灭。