温湿度采集学习心得Word格式文档下载.docx

上传人:b****6 文档编号:20555338 上传时间:2023-01-24 格式:DOCX 页数:9 大小:20.27KB
下载 相关 举报
温湿度采集学习心得Word格式文档下载.docx_第1页
第1页 / 共9页
温湿度采集学习心得Word格式文档下载.docx_第2页
第2页 / 共9页
温湿度采集学习心得Word格式文档下载.docx_第3页
第3页 / 共9页
温湿度采集学习心得Word格式文档下载.docx_第4页
第4页 / 共9页
温湿度采集学习心得Word格式文档下载.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

温湿度采集学习心得Word格式文档下载.docx

《温湿度采集学习心得Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《温湿度采集学习心得Word格式文档下载.docx(9页珍藏版)》请在冰豆网上搜索。

温湿度采集学习心得Word格式文档下载.docx

  加关注

  错误!

超链接引用无效。

|错误!

  温馨提示!

由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!

立即重新绑定新浪微博》|错误!

  豪醒的博客

  不只是一个人的旅程

  导航

  首页

  日志

  相册

  博友

  关于我

  zigbee学习心得2——协议栈任务

  Fork-VFork一张图说明区别

  zigbee学习心得——实例分析(温湿度采集及控制)

  20XX-08-0516:

58:

58|分类:

zigbee|标签:

cc2430zigbee温湿度cc2430|字号大中小订阅

  就像这样,先添加于温湿度传感器相关的.c和.h文件,还有串口相关的,c和.h也就是写好可以给另外的文件调用的函数了。

  我这里面只用到了voidwenshi_receive(void);

一个函数,然后将函数和其中所用到的两个变量Th,Rh,分别代表温度和湿度设为全局变量。

  先打开simplesensor.c这个小工程,用官方程序调试的时候可以看出,也就是不断地发数据到协调器,自然就要找到与发数据相关的函数:

  那其实发送之前要先与协调器绑定吧,好比打电话也要先拨通电话吧。

  找到与绑定相关的函数:

  voidzb_bindconfirm(uint16commandId,uint8status)

  {

  if((status==Zb_success)

  //startreportingsensorvalues

  myApp_startReporting();

  }

  else

  //continuetodiscoveracollector

  osal_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(sapi_TaskID,mY_RepoRT_bATT_eVT,mybatterycheckperiod);

  halLedset(hAL_LeD_1,hAL_LeD_moDe_on);

  直观地从函数看上去也就相当于添加一个周期性的任务;

  从上一篇文章讲过这个TaskID的问题,也就添加一个任务嘛,回到整个工程的主函数,看看怎么回事,这里面就不详细地列出来了,有需要的读者可以一探究竟。

过程是这样的:

  主函数:

Zsegintmain(void)——/*系统初始化*/osal_init_system();

——osalInitTasks();

/*任务初始化*/

  ——sApI_Init(taskID);

/*用户自定义任务函数,他的任务ID为taskID*/?

——

  /*其中的一个等式*/sapi_TaskID=task_id;

  也就是说可以通过osal_start_timerex添加一个周期性的任务,其周期为xxxperiod,比如片内温度采集:

myTempReportperiod,电压测量mybatterycheckperiod,那xxxeVT,也就相当于一个任务Task里面一个独立的事件event了。

  那么我们也可以这么添加自己的事件:

  再看看xxxeVT和xxxperiod的定义:

  //Applicationosaleventidentifiers

  //bitmaskofevents(from0x0000to0x00FF)

  #definemY_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//milliseconds

  staticuint16myTempReportperiod=5000;

//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,myshIDuReportperiod);

  这样就添加好了自己读取温湿度信息的任务了,然后具体怎么实现这两个任务:

接下来:

  而sensor.c里面有一个handle函数用于处理时间的:

见介绍和实体:

  /*****************************************************************************

  *@fnzb_handleosalevent

  *

  *@briefThezb_handleosaleventfunctioniscalledbytheoperating

  *systemwhenataskeventisset

  *@paramevent-bitmaskcontainingtheeventsthathavebeenset

  *@returnnone

  */

  voidzb_handleosalevent(uint16event)

  uint8pData[2];

//用于存放数据和分类信息的

  if(event

  if(event函数set的事件么?

  //Readandreporttemperaturevalue

  pData[0]=Temp_RepoRT;

  //类型存放在pData[0]里面

  pData[1]=myApp_ReadTemperature();

  //读出来的温度值存到pData[1],myApp_ReadTemperature();

是读取温度值的函数

  zb_sendDataRequest(0xFFFe,sensoR_RepoRT_cmD_ID,2,pData,0,AF_AcK_ReQuesT,0);

  //发送出去

  //再设这样一个时间,无限循环

  ------------------------------------------------------------------------------------------------------------------------------

  这里再说一下发送的过程,首先从刚才osal_start_timerex();

设一个发送温度值的系统事件,在一个myTempReportperiod的周期之后,通过zb_handleosalevent的调用,再通过if(event

  pData[1]=myApp_Readbattery();

  先添加自己刚设的事件:

  //相当于添加一个可以让协调器识别你发过去的是什么的标签

  receive();

  //调用wenshi.c里面的全局函数receive();

wenshi.c是我自己写的一个c

  pData[1]=Th;

  //代表温度

  篇二:

  显示下一条|关闭

立即重新绑定新浪微博》|关闭

  osal_start_timerex(sapi_TaskID,mY_RepoRT_Temp_eVT,myTempRepo(:

温湿度采集学习心得)rtperiod);

  osal_start_timerex(sapi_TaskID,mY_RepoRT_wenDu_eVT,mywenDuReportperiod);

  //回调

  这样子

  额,pData[0]=wenDu_RepoRT;

,既然说这个是要让协调器识别的,那么协调器(simplecollectoreb.c)里面也要有相同的参数。

  #defineTemp_RepoRT0x01

  #definebATTeRY_RepoRT0x02

  #definewenDu_RepoRT0x04

  #defineshIDu_RepoRT0x08

  再分析回原来的事件处理部分:

  都有调用zb_sendDataRequest();

函数

  篇三:

温度采集系统报告

  课程设计说明书

  题目:

温度采集电路设计

  学生姓名:

赵颖娜

  学号:

20XX06090211

  院(系):

电气与信息工程学院

  专业:

网络工程132

  指导教师:

周晓慧

  20XX年12月25日

  摘要

  本次课程设计主要是做一个温度测量系统,对于0-100摄氏度的环境温度或者给定温度要求能较为精确的测量(误差小于1摄氏度)并显示在数码管上,让人直观的看到。

要想测量温度,就必须要一个温度测量仪器,而想要用电路实现功能就必须要把温度值转化为电信号量,因此我们选用Lm35作为温度感应电路的核心。

Lm35可以将温度值转化为电压值,误差小于0.5℃,符合设计要求。

由于输出电压值过小,直接进行A/D转换会造成较大误差,因此将这个电压值进行放大,放大后经A/D转换器将连续的模拟电压值转化为数字信号量,经过AT28c16的存储接两个cD4511驱动两个共阴极的数码管用来显示两个数字,分别为十位和个位,读出的即为温度值。

  目录

  第一章技术指标

  1.1整体功能要求┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈1

  第二章方案论证

  2.1方案比较┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈1

  2.2方案确定┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈1

  第三章单元电路设计

  3.1Lm35电源电路┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈1

  3.2信号放大电路┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈2

  3.3A/D转换电路┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈3

  3.4数码显示电路┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈3

  3.5AT28c16┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈3

  3.6555多谐振荡器┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈3

  第四章组装、调试

  4.1使用的主要仪器和仪表┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈4

  4.2调试电路的方法和技巧┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈4

  4.3测试的数据和波形并与计算结果比较分析┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈5

  4.4调试中出现的故障、原因及排除方法┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈6

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 人力资源管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1