温湿度采集的实现算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
温湿度采集的实现算法
应用AM2301实现两项数据的采集,该数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器它应用专用的数字模块采集技术和温湿度传感技术。AM2301采用的是单总线传输数据,所以对温湿度数据的采集主要是时序要控制好。在AM2301进行数据传输的之前,空闲时总线为高电平,通讯开始时主机拉低总线至少500us后释放总线,延时20-40us后主机开始检测传感器的响应信号。传感器的响应信号是一个80us左右的低电平,随后传感器再拉高总线80us左右代表即将进入数据传送。每一位数据位都是由一个低电平和一个高电平组成。数字“0”由50us左右的低电平和26~28us的高电平组成,数字“1”由50us 左右的低电平和70us的高电平组成,当最后一位数据传送完毕后,传感器将再次拉低总线50us左右,随后释放总线,由上拉电阻拉高。传输的数据总共有共40位,其中包括16位湿度数据+16位温度数据+8位校验和(固定的)。每次都是高位先出,检验位是用于验证传输的数据有没有出错,当前面的4个8位的数据之和等于校验位是表示传输的数据没问题。反之,则要重新采集数据。每次采集数据的时间间隔应该大于2s!!
数据处理:传感器每次都会将采集的数据以8位为单位送出,所以定义4个无符号字符型的变量(hum_h,hum_l,temp_h,temp_l)用于储存数据,当然还要定义一个无符号字符型的变量(check)用于储存校验位。接收到了数据之后不能够马上进行数据处理,必须通过校验,如果前面4个八位数据之和等于校验位,则进行数据处理。由于温湿度数据的高八位和低八位是分开的,所以数据处理过程中要将温湿度的高八位和低八位通过移位储存在另外定义的无符号整型变量(temp,hum)里。到此数据处理好没有完,因为最终的目的是将它显示在也将显示器上,所以为了得到每位(各位、十位和百位)的值,可以这样处理
当然之前要先定义数组:
所以想要显示采集到的数值就可以分别bai,shi,ge,bai1,shi1,ge1代替i即可。
比如要显示温度十位就可以这样:
,类似的显示如此。
如果采集到的温度数值为负值,此时温度的高八位的第一位为“1”,则要temp&0X7fff,再进行求模求余等一系列处理运算(温度除了最高位,其余为表示温度值)。