tinyos学习笔记11--DHT11驱动及测试程序

本文记录了在CC2538cb平台上使用TinyOS开发DHT11温湿度传感器驱动及测试程序的过程。经过一番努力,作者发现并修正了将温度和湿度数据混淆的错误。此外,提供了DHT11模块的使用参考链接,并说明驱动程序已丢失。

测试平台:CC2538cb(群主师父的杰作)

1.测试效果图

      忙活了几天终于把这款DHT11温湿度的传感器的驱动及测试程序搞定了,最后一个步骤犯了一个相当可笑的错误,把测量到的温度的数据当成了湿度的数据,把湿度的数据当成温度的数据。看结果,越看不对劲,误差怎么可能这么大了?温度是41C,湿度是14%RH。o(∩_∩)o 哈哈,搞了半天把温湿度数据的位置看反了...



2.DHT11模块温湿度模块的使用

      关于DHT11模块温湿度模块的使用,有兴趣的可以看我找到的网上的一篇文档。

      http://blog.csdn.net/ourrtems/article/details/50848894


3.驱动程序(由于间隔时间太久,程序找不到了,请不要留下邮箱了,谢谢大家关注2018.05.04大笑

<span style="font-size:18px;">/*******************************************************************************
从DHT11读取一个字节
*******************************************************************************/
void Read8Bit(void)
{
  static uint16_t  OverTimeCnt = 0;
  uint8_t i,tmpBit;
  uint8_t delay;
  
  for(i=0;i<8;i++)
  {
    //OverTimeCnt = 2;
    //while((Get_dht11_DQ() == 0)&&OverTimeCnt++);
    while(!Get_dht11_DQ());

    delay = 110;
    while(--delay);  //主机拉低至少18ms	
    if(Get_dht11_DQ() == 0)
      tmpBit = 0;
    else
      tmpBit = 1;
	  
    //OverTimeCnt = 2;
    //while((Get_dht11_DQ() == 1)&&OverTimeCnt++); //等待读到的“1”或“0”的高电平结束
    while(Get_dht11_DQ());
	
    		  
    if(OverTimeCnt==1) //超时则跳出for循环
      break;
    
    tmp8BitValue<<=1;
    tmp8BitValue|=tmpBit;        //0  
  }
}

/*******************************************************************************
读取DHT11温度、湿度值
*******************************************************************************/  
void ReadValue(uint8_t *sv)
{
  static uint16_t  OverTimeCnt = 0;
  uint16_t delay;
   
  ReSet_dht11_DQ();
  delay = 50000000;
  while(--delay);  //主机拉低至少18ms  
  
  Set_dht11_DQ();
  delay = 100;
  while(--delay);  //总线由上拉电阻拉高 主机延时20us-40us
  
  if(Get_dht11_DQ() == 0)
  {
    //OverTimeCnt = 2;
    //while((Get_dht11_DQ() == 0)&&OverTimeCnt++);

    //OverTimeCnt = 2;
    //while((Get_dht11_DQ() == 1)&&OverTimeCnt++);
	
    while(!Get_dht11_DQ());
    while(Get_dht11_DQ());

    //数据接收状态	
    Read8Bit();
    sv[0] = tmp8BitValue;

    Read8Bit();
    sv[1]=tmp8BitValue;

    Read8Bit();
    sv[2]=tmp8BitValue;

    Read8Bit();
    sv[3]=tmp8BitValue;	

    Read8Bit();
    CheckSum = tmp8BitValue;
    
    if(CheckSum == sv[0]+sv[1]+sv[2]+sv[3])
    {
      CheckSum = 0xff;
    }
  }
  else
  {
    sv[0] = 0xaa;
    sv[2] = 0x55;
  }
}</span>

By:霜月孤鸟

2016.3.10


评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值