在上一篇《
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