5-6 任务6 智能LED控制_第1页
5-6 任务6 智能LED控制_第2页
5-6 任务6 智能LED控制_第3页
5-6 任务6 智能LED控制_第4页
5-6 任务6 智能LED控制_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、任务6 智能LED控制目 录任务目标01任务要求02任务实施03任务目标任务目标v (1)掌握)掌握ZigBee无线通信。无线通信。v (2)掌握信息采集与设备控制的智能联动。)掌握信息采集与设备控制的智能联动。任务要求v 本任务实现光照传感器和灯的智能联动功能,当采集的光本任务实现光照传感器和灯的智能联动功能,当采集的光照值低于设定的阈值,自动开灯,否则关灯。灯做为负载照值低于设定的阈值,自动开灯,否则关灯。灯做为负载接在继电器上,通过控制继电器的吸合和断开控制灯的通接在继电器上,通过控制继电器的吸合和断开控制灯的通断。断。v 我们采用星型网络,使用节点我们采用星型网络,使用节点1连接光照传

2、感器,节点连接光照传感器,节点2连连接接LED灯模块,协调器负责转发信息,功能设置如图灯模块,协调器负责转发信息,功能设置如图5-37所示。所示。协调器节点 2节点 1图 5-37 智能灯具控制结构图v (1)协调器编程)协调器编程:关键:关键代码如下:代码如下:/*消息处理函数*/void GenericApp_MessageMSGCB(afIncomingMSGPacket_t *pkt) uint16 lightval = 0; if(!memcmp(pkt-cmd.Data, light, 5) lightval = pkt-cmd.Data5; / 保存光强度值 lightval |

3、= (uint16)pkt-cmd.Data6) 8; if(lightval cmd.Data, Eaddr, 5) / 保存LED灯设备节点信息 endAddr = pkt-cmd.Data5; endAddr |= (uint16)pkt-cmd.Data6) 8; 任务实施v (1)协调器编程:)协调器编程:/*无线发送数据给终端节点2*/void Senddata_MSG(uint8 *coding) afAddrType_t my_DstAddr; my_DstAddr.addrMode = (afAddrMode_t)Addr16Bit; my_DstAddr.endPoint

4、= GENERICAPP_ENDPOINT; my_DstAddr.addr.shortAddr = endAddr; AF_DataRequest(&my_DstAddr, &GenericApp_epDesc, GENERICAPP_CLUSTERID, 6, coding, &GenericApp_TransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS); 任务实施上述代码实现功能:协调器收到无线数据后,判断光照值,如果小于设定好的阈值,就以单播方式发送关灯命令“ledon”给终端节点2,否则发送“ledoff”。任务实施(2)终端节

5、点)终端节点1编程。首先将光照传感器编程。首先将光照传感器BH1750驱动模块驱动模块light.c和和light.h文件文件复制到工程复制到工程Source文件夹下,在协议栈的文件夹下,在协议栈的APP目录树下点击右键目录树下点击右键Add,添加,添加light.c和和light.h文件文件。在终端节点。在终端节点1EndDevice1.c文件中,找到文件中,找到任务初始化函数任务初始化函数,函数后面添加红色部分代码,函数后面添加红色部分代码: /*任务初始化函数任务初始化函数*/ void GenericApp_Init(byte task_id) 。 afRegister(&Ge

6、nericApp_epDesc); P0SEL &= (1 5); / 光照传感器此管脚应置光照传感器此管脚应置1才能正常工作,但在协议栈才能正常工作,但在协议栈中此处被拉低中此处被拉低 P0DIR |= 1 5; / 所以需要手动重新置所以需要手动重新置1 APCFG &= (1 hdr.status); if(GenericApp_NwkState = DEV_END_DEVICE) osal_set_event(GenericApp_TaskID, SEND_MSG_CODING); / 入网成功后注册入网成功后注册发送数据事件发送数据事件 P1_0 = 1; P1_1

7、= 1; 。 任务实施/*事件处理函数事件处理函数*/ UINT16 GenericApp_ProcessEvent(byte task_id, UINT16 events) if(events & SEND_MSG_CODING) uint16 light; light = get_light(); lightval5 = (uint8)light; lightval6 = (uint8)(light 8); GenericApp_SendTheMessage(); osal_start_timerEx(GenericApp_TaskID, SEND_MSG_CODING, 1000

8、); / 一秒后再次一秒后再次采集光照强度并发给协调器采集光照强度并发给协调器 return (events SEND_MSG_CODING); return 0; 任务实施/*无线发送数据*/ void GenericApp_SendTheMessage(void) afAddrType_t my_DstAddr;/单播模式发送给协调器 my_DstAddr.addrMode = (afAddrMode_t)Addr16Bit; my_DstAddr.endPoint = GENERICAPP_ENDPOINT; my_DstAddr.addr.shortAddr = 0 x0000; AF

9、_DataRequest(&my_DstAddr, &GenericApp_epDesc, GENERICAPP_CLUSTERID, 7, lightval, &GenericApp_TransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS); 任务实施v (3)终端)终端节点节点2编程编程:在任务初始化函数后面添加:在任务初始化函数后面添加LED灯控制的管脚的初灯控制的管脚的初始化代码始化代码/*任务初始化函数*/ void GenericApp_Init(byte task_id) 。 APCFG &= (1 5); P0SEL

10、 &= (1 5); / 初始化LED灯控制的管脚 P0DIR |= 1 cmd.Data, led on, 6) / 判断接收到的命令判断接收到的命令P0_5 = 1; if(!memcmp(MSGpkt-cmd.Data, ledoff, 6)P0_5 = 0; break; default: break; osal_msg_deallocate(uint8*)MSGpkt); MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive(GenericApp_TaskID); return (events SYS_EVENT_MSG); r

11、eturn 0; 任务实施v 终端终端节点节点2:发送消息函数将自身的网络地址以单播的方式无线发送给协调:发送消息函数将自身的网络地址以单播的方式无线发送给协调器器/*将网络地址无线发送给协调器*/ void GenericApp_SendTheMessage(void) uint16 myNwk; myNwk = NLME_GetShortAddr(); myAddr5 = (uint8)myNwk; myAddr6 = (uint8)(myNwk 8); /单播模式发送给协调器 afAddrType_t my_DstAddr; my_DstAddr.addrMode = (afAddrMode_t)Addr16Bit; my_DstAddr.endPoint = GENERICAPP_ENDPOINT; my_DstAddr.addr.shortAddr = 0 x0000; AF_DataRequest(&my_DstAddr, &GenericApp_epDesc, GENERICAPP_C

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论