1、加关注错误!超链接引用无效。|错误!温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博|错误!豪醒的博客不只是一个人的旅程导航首页日志相册博友关于我zigbee学习心得2协议栈任务Fork-VFork一张图说明区别zigbee学习心得实例分析(温湿度采集及控制)20XX-08-0516:58:58|分类:zigbee|标签:cc2430zigbee温湿度cc2430|字号大中小订阅就像这样,先添加于温湿度传感器相关的.c和.h文件,还有串口相关的,c和.h也就是写好可以给另外的文件调用的函数了。我这里面只用到了voidwenshi_receive(
2、void);一个函数,然后将函数和其中所用到的两个变量Th,Rh,分别代表温度和湿度设为全局变量。先打开simplesensor.c这个小工程,用官方程序调试的时候可以看出,也就是不断地发数据到协调器,自然就要找到与发数据相关的函数:那其实发送之前要先与协调器绑定吧,好比打电话也要先拨通电话吧。找到与绑定相关的函数:voidzb_bindconfirm(uint16commandId,uint8status)if(status=Zb_success)/startreportingsensorvaluesmyApp_startReporting();else/continuetodiscover
3、acollectorosal_start_timerex(sapi_TaskID,mY_FInD_coLLecToR_eVT,mybindRetryDelay);直接点,若绑定成功,就会返回一个Zb_success的状态,此时方会调用myApp_startReporting();函数,否则就继续搜索节点。对于myApp_startReporting();:voidmyApp_startReporting(void)osal_start_timerex(sapi_TaskID,mY_RepoRT_Temp_eVT,myTempReportperiod);osal_start_timerex(sa
4、pi_TaskID,mY_RepoRT_bATT_eVT,mybatterycheckperiod);halLedset(hAL_LeD_1,hAL_LeD_moDe_on);直观地从函数看上去也就相当于添加一个周期性的任务;从上一篇文章讲过这个TaskID的问题,也就添加一个任务嘛,回到整个工程的主函数,看看怎么回事,这里面就不详细地列出来了,有需要的读者可以一探究竟。过程是这样的:主函数:Zsegintmain(void)/*系统初始化*/osal_init_system();osalInitTasks();/*任务初始化*/sApI_Init(taskID);/*用户自定义任务函数,他的
5、任务ID为taskID*/?/*其中的一个等式*/sapi_TaskID=task_id;也就是说可以通过osal_start_timerex添加一个周期性的任务,其周期为xxxperiod,比如片内温度采集:myTempReportperiod,电压测量mybatterycheckperiod,那xxxeVT,也就相当于一个任务Task里面一个独立的事件event了。那么我们也可以这么添加自己的事件:再看看xxxeVT和xxxperiod的定义:/Applicationosaleventidentifiers/bitmaskofevents(from0x0000to0x00FF)#defin
6、emY_sTART_eVT0x0001#definemY_RepoRT_Temp_eVT0x0002#definemY_RepoRT_bATT_eVT0x0004#definemY_FInD_coLLecToR_eVT0x0008自己跟着做:#definemY_RepoRT_wenDu_eVT0x0010#definemY_RepoRT_shIDu_eVT0x0020这里说一下为什么要这么做因为等下调用任务处理函数zb_handleosalevent();的时候判断语句是这种形式的:if(event/millisecondsstaticuint16myTempReportperiod=5000
7、;/milliseconds添加:staticuint16mywenDuReportperiod=6000;staticuint16myshIDuReportperiod=7000;这样子(这里的周期是毫秒级的,比如5000代表的就是5秒传一次mcu的温度)再回到刚才的myApp_startReporting(void)添加:osal_start_timerex(sapi_TaskID,mY_wenDu_bATT_eVT,mywenDuReportperiod);osal_start_timerex(sapi_TaskID,mY_shIDu_bATT_eVT,myshIDuReportperi
8、od);这样就添加好了自己读取温湿度信息的任务了,然后具体怎么实现这两个任务:接下来:而sensor.c里面有一个handle函数用于处理时间的:见介绍和实体:/*fnzb_handleosalevent*briefThezb_handleosaleventfunctioniscalledbytheoperating*systemwhenataskeventisset*paramevent-bitmaskcontainingtheeventsthathavebeenset*returnnone*/voidzb_handleosalevent(uint16event)uint8pData2;/用
9、于存放数据和分类信息的if(eventif(event函数set的事件么?!/ReadandreporttemperaturevaluepData0=Temp_RepoRT;/类型存放在pData0里面pData1=myApp_ReadTemperature();/读出来的温度值存到pData1,myApp_ReadTemperature();是读取温度值的函数zb_sendDataRequest(0xFFFe,sensoR_RepoRT_cmD_ID,2,pData,0,AF_AcK_ReQuesT,0);/发送出去/再设这样一个时间,无限循环-这里再说一下发送的过程,首先从刚才osal_s
10、tart_timerex();设一个发送温度值的系统事件,在一个myTempReportperiod的周期之后,通过zb_handleosalevent的调用,再通过if(eventpData1=myApp_Readbattery();先添加自己刚设的事件:/相当于添加一个可以让协调器识别你发过去的是什么的标签receive();/调用wenshi.c里面的全局函数receive();wenshi.c是我自己写的一个cpData1=Th;/代表温度篇二:显示下一条|关闭立即重新绑定新浪微博|关闭osal_start_timerex(sapi_TaskID,mY_RepoRT_Temp_eVT,
11、myTempRepo(:温湿度采集学习心得)rtperiod);osal_start_timerex(sapi_TaskID,mY_RepoRT_wenDu_eVT,mywenDuReportperiod);/回调这样子额,pData0=wenDu_RepoRT;,既然说这个是要让协调器识别的,那么协调器(simplecollectoreb.c)里面也要有相同的参数。#defineTemp_RepoRT0x01#definebATTeRY_RepoRT0x02#definewenDu_RepoRT0x04#defineshIDu_RepoRT0x08再分析回原来的事件处理部分:都有调用zb_s
12、endDataRequest();函数篇三:温度采集系统报告课程设计说明书题目:温度采集电路设计学生姓名:赵颖娜学号:20XX06090211院(系):电气与信息工程学院专业:网络工程132指导教师:周晓慧20XX年12月25日摘要本次课程设计主要是做一个温度测量系统,对于0-100摄氏度的环境温度或者给定温度要求能较为精确的测量(误差小于1摄氏度)并显示在数码管上,让人直观的看到。要想测量温度,就必须要一个温度测量仪器,而想要用电路实现功能就必须要把温度值转化为电信号量,因此我们选用Lm35作为温度感应电路的核心。Lm35可以将温度值转化为电压值,误差小于0.5,符合设计要求。由于输出电压值
13、过小,直接进行A/D转换会造成较大误差,因此将这个电压值进行放大,放大后经A/D转换器将连续的模拟电压值转化为数字信号量,经过AT28c16的存储接两个cD4511驱动两个共阴极的数码管用来显示两个数字,分别为十位和个位,读出的即为温度值。目录第一章技术指标1.1整体功能要求1第二章方案论证2.1方案比较12.2方案确定1第三章单元电路设计3.1Lm35电源电路13.2信号放大电路23.3A/D转换电路33.4数码显示电路33.5AT28c1633.6555多谐振荡器3第四章组装、调试4.1使用的主要仪器和仪表44.2调试电路的方法和技巧44.3测试的数据和波形并与计算结果比较分析54.4调试中出现的故障、原因及排除方法6
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1