Rainbow開發(fā)包中已經(jīng)封裝了DTH11溫濕度傳感器,按照我的想法,同類型的傳感器有了一種就可以了,本不想做DS18B20的封裝,但是前兩天有個(gè)朋友讓我給他做個(gè)項(xiàng)目,需要測(cè)液體的溫度,用DHT11個(gè)頭太大,主要用于測(cè)室溫,而DS18B20有用于測(cè)量液體溫度的封裝,非常方便使用。迫于無奈,今天就花了半天時(shí)間做了個(gè)小小的封裝,在Rainbow開發(fā)板上通過了測(cè)試。
使用DS18B20非常簡(jiǎn)單,和DHT11差不多,按照下列步驟:
1、定義DS18B20對(duì)象,設(shè)定DS18B20的DQ數(shù)據(jù)線所使用的GPIO,如:DS18B20 ds(PC1);
2、調(diào)用read()方法進(jìn)行溫度采集,如果返回DS18B20::OK,表示采集成功,其它值表示失敗
3、采集成功之后就可以使用對(duì)象的getCelsius()和getFahrenheit()分別獲取到攝氏溫度和華氏溫度
我這次試驗(yàn)選用了PC3與DS18B20的DQ管腳相連,這個(gè)管腳是用于DHT11數(shù)據(jù)采集,帶有一個(gè)4.7K上拉電阻,電路原理圖和實(shí)際接線圖如下:
在軟件包的“Projects\DS18B20”文件夾包含了本文的完整工程,可以直接編譯、燒寫和調(diào)試。來看看main.cpp的代碼:
#include "WProgram.h"
#include "DS18B20.h"
//接到DHT11_DATA_PIN,通過4.7K電阻上拉
DS18B20 ds(DHT11_DATA_PIN);
void setup()
{
//啟用默認(rèn)串口,波特率9600
Serial.start();
}
void loop()
{
//數(shù)據(jù)采集成功
if(ds.read() == DS18B20::OK)
{
Serial.print("Celsius:");
Serial.println(ds.getCelsius());
Serial.print("Fahrenheit:");
Serial.println(ds.getFahrenheit());
delay(5000);
}
}
int main(void)
{
//初始化開發(fā)板
boardInit();
setup();
while(1) loop();
}
程序非常簡(jiǎn)單,就不再啰嗦,將USART3和USB-TTL模塊連接,在串口調(diào)試工具中可以看到運(yùn)行效果: