這幾天一口氣解決了多個傳感器與arduino的連接於訪問。
dht11溫溼度傳感器,超聲波、火焰、環境光線、人體熱釋電這幾個。
溫溼度傳感器是從機器人基地購買的,因爲他們提供了積木式的鏈接針腳和連接線,只要對應插好就行,十分方便,相關代碼也在前篇文章介紹的有,直接複製就能用。
因爲火焰和環境光傳感器能輸出0~255的值,我把它們接到模擬口上面了,以便實時發送數據出來。人體感應的傳感器由於只輸出高低電平,所以接到了數字口。
對於這三個傳感器的數據讀取,我採用了統一的函數,因爲他們的讀取方式一樣,直接read輸入口的針腳就行。
函數如下:
int GetData(int pinnum,String pmod){
int datastr;
if(pmod=="analog"){
datastr=analogRead(pinnum);
}
else
{
datastr=digitalRead(pinnum);
}
return datastr;
}
其中 函數括號裏 pinnum是要輸入針腳號碼,pinmod是輸入數字口還是模擬口,模擬口就寫 analog,數字口就寫digital。
先定義好每個傳感器的針腳號碼,在setup裏定義好輸出,然後在loop裏需要讀出數據的地方使用該函數。
比如:
int lightpin=1;//環境光線腳 analog
int anmpin=50;//人體接近腳 digital
int firepin=3;//火焰腳 analog
String OutStr;
void setup(){
Serial.begin(9600);
pinMode(anmpin,INPUT);
pinMode(firepin,INPUT);
pinMode(lightpin,INPUT);
}
void loop(){
OutStr =GetData(anmpin,"digital");
Serial.print(OutStr);
OutStr =GetData(firepin,"analog");
Serial.print(OutStr);
OutStr =GetData(lightpin,"analog");
Serial.print(OutStr);
}
這樣便能方便的輸出需要的數據了,對於接了多個類似只負責輸出數據的傳感器的arduino很適用。
關於超聲波傳感器,我也弄了個函數
int GetCSB(){
digitalWrite(csboutputPin, LOW); // 使發出發出超聲波信號接口低電平2μs
delayMicroseconds(2);
digitalWrite(csboutputPin, HIGH); // 使發出發出超聲波信號接口高電平10μs,這裏是至少10μs
delayMicroseconds(10);
digitalWrite(csboutputPin, LOW); // 保持發出超聲波信號接口低電平
int distance = pulseIn(csbinputPin, HIGH); // 讀出脈衝時間
distance= distance * 0.017; // 將脈衝時間轉化爲距離(單位:釐米)
return distance; //輸出距離值
}
要注意的是,我適用的傳感器是4個針腳,2個分別接vcc和gnd,另外2個接數字口,分別負責電平信號的輸入與輸出。
要讀出數據的話 只要寫 int s=GetCSB(); 就完事了,很方便吧 呵呵