【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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章