中国自动化学会专家咨询工作委员会指定宣传媒体
免费注册 登录 广告服务 | 客服中心
您现在所在的是:

嵌入式系统

抖音 德嘉 泓格论坛 FLIR红外热像论坛
工控论坛首页 嵌入式系统 → 浏览主题: 【STM32 .Net MF开发板学习-23】DHT11温湿度传感器通信(下)
发表新帖 回复该主题
回帖:0个,阅读:689 [上一页] [1] [下一页]
* 帖子主题:

【STM32 .Net MF开发板学习-23】DHT11温湿度传感器通信(下)

分享到
884
yefanqiu
文章数:33
年度积分:50
历史总积分:884
注册时间:2004/8/19
发站内信
发表于:2010/12/6 12:09:18
#0楼
 
在上一篇《
dht11温湿度传感器通信(上)
》中,我们介绍了dht11的通信原理及实现通信的底层代码,当时由于没有封装成托管代码库,所以应用开发的用户还不能直接获取dht11的数据。不过今天这个工作我们已经完成,用户仅需编写几行代码就可以获取传感器数据了。
   我们封装后的类库如下:    
public sealed class dht11
   {
       public dht11(dht11.timer timer, dht11.channels channel);
       public bool read(out float temperature, out float humidity);
       public static bool readdata(out float temperature, out float humidity);
       public enum channels
       {
           ch1 = 0,
           ch2 = 1,
           ch3 = 2,
           ch4 = 3,
       }
       public enum timer
       {
           t2 = 1,
           t3 = 2,
           t4 = 3,
           t5 = 4,
       }
    }
   t2、t3、t4、t5四个时钟的四个通道都可以连接dht11模块,进行数据采集,其和pin脚的对应关系如下:    

通道1
通道2
通道3
通道4
timer2
pa0
pa1
pa2
pa3
timer3
pa6
pa7
pb0
pb1
timer4
pb6
pb7*
pb8*
pb9
timer5
pa0
pa1
pa2
pa3
注:以上信息,可以通过查原理图获知,其中带“*”的管脚实际测试未能成功获取数据。
设备接线,我们的示例程序选择的是timer3的第三通道,所以我们连接的pin脚是pb0
示例代码如下:
public static void main()
     {
           //pb0
           dht11 dht11 = new dht11(dht11.timer.t3, dht11.channels.ch3);
           float temperature;
           float humidity;      
           while (true)
           {
               dht11.read(out temperature, out humidity);
               debug.print(str(temperature,2) + + str(humidity,2));

               thread.sleep(100);
           }
}
值得一提的是,.net micro framework的浮点数转换字符串函数存在bug,在某些mcu的.net micro framework平台上进行这个转换操作会出错,目前发现stm32f103和atmel 9260芯片上都有这个bug。由于和平台相关,bug较难消除,所以我提供了一个简单的浮点数转字符串的函数。
     public static string str(double f,int n)
     {
           if (n  8) return ;
           bool sign = (f
           if (sign) f = -f;                            
           string f1 = ((uint)f).tostring();
           string f2 = ((uint)(f * system.math.pow(10,n) -((uint)f) * system.math.pow(10,n))).tostring();
           return (sign ? - : ) + f1 + . + 00000000.substring(0,n-f2.length) + f2;
}
程序运行后,在vs2008开发环境中,我们已经看到,温湿度数据已经成功采集。
    注:本文示例,需要红牛开发板固件在 v1.1.1以上
本文源码:
[URL=http://www.sky-walker.com.cn/yefan/mfv40/sourcecode/dht11test.rar]
http://www.sky-walker.com.cn/yefan/mfv40/sourcecode/dht11test.rar
[/URL]
mf快速参考:
.net micro framework 快速入门
mf中文讨论组:
[URL=http://space.cnblogs.com/group/mfsoft/]
http://space.cnblogs.com/group/mfsoft/
[/URL]
【低价开发板】
[URL=http://item.taobao.com/item.htm?id=7117999726]
http://item.taobao.com/item.htm?id=7117999726
[/URL]

参加了博客大赛,请大家投上一票!您的支持,将是我最大的动力,谢谢!
http://2010blog.51cto.com/1635641

----------------------------------------------
此篇文章从博客转发
原文地址: Http://blog.gkong.com/more.asp?id=130274&Name=yefanqiu
工控学堂推荐视频:

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

46.8003