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


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

            }

         }

        T2T3T4T5四个时钟的四个通道都可以连接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平台上进行这个转换操作会出错,目前发现STM32F103Atmel 9260芯片上都有这个BUG。由于和平台相关,BUG较难消除,所以我提供了一个简单的浮点数转字符串的函数。

          public static string STR(double f,int n)

          {

                if (n < 1 || n > 8) return "";

                bool sign = (f < 0);

                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以上

    本文源码:http://www.sky-walker.com.cn/yefan/MFV40/SourceCode/DHT11Test.rar

    MF快速参考: .NET Micro Framework 快速入门

    MF中文讨论组:http://space.cnblogs.com/group/MFSoft/

    【低价开发板】http://item.taobao.com/item.htm?id=7117999726

     

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

  • 相关阅读:
    软工写文档熟练使用word很重要——自动生成编号
    UML——类图
    软件开发模型
    UML基础(终极总结)
    想买一款笔记本戴尔的InspironTM 6400
    ASP.NET 2.0 Enter Key Default Submit Button
    使用.net备份和还原数据库
    GridView导出Excel研究
    使用c#建立虚拟目录
    OpacityMask
  • 原文地址:https://www.cnblogs.com/yefanqiu/p/1897385.html
Copyright © 2020-2023  润新知