上课前逐个检查 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>
3.3 KiB
3.3 KiB
任务目标
做一个"楼梯灯":勾选人体开关后,程序每 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,否则自动评分找不到这个按钮。
实现步骤
- 代码开头加上
using System.IO.Ports;和using DeviceCtrlLibrary;。 - Form1_Load:清空两个下拉框,用
SerialPort.GetPortNames()把串口号加进去。 - 写一个方法
LampOnOff(int RelayNum, bool IsOpen):调用DeviceCtrlHelper.zigBeeHelper.OnOff控制实训台的路灯,再调用lamp1.OnOff让窗体上的灯泡跟着变。 - btn_open 的 Click:和任务 1 一样,按钮文字是"打开"时打开 ZigBee 串口(
com_lamp.Text)并改成"关闭",反之关闭串口。 - btn_lampOpen、btn_lampClose 的 Click:分别调用
LampOnOff(1, true)、LampOnOff(1, false)。 - ch_bodyInfrared 的 Click:
- 勾上时:打开 ADAM-4150 串口(
adam4150Helper.Open(com_environment.Text)),启动timer1,两个手动按钮设为不可用; - 取消时:关闭串口,停止
timer1,两个按钮恢复可用。
- 勾上时:打开 ADAM-4150 串口(
- timer1 的 Tick:读
adam4150Helper.SetData().bodyInfraredValue,是true(有人)就开灯,否则关灯。
书上第 15 步说"进入 Click 事件",定时器的事件其实是 Tick(事件窗口里叫"计时到"):在设计器里双击 timer1 就会生成
timer1_Tick。
在平台上怎么试
- 运行后,"路灯"选 COM4(ZigBee 协调器),"环境采集"选 COM3(ADAM-4150),点"打开"。
- 点"开""关",看窗体上的灯泡和实训台的照明灯 1 是否一起亮灭。
- 勾选"人体开关","开""关"按钮应变成灰色;在实训台上把人体红外点成"有人",5 秒内路灯应亮起,点回"无人"后 5 秒内熄灭。