arduino與傳感器

這幾天一口氣解決了多個傳感器與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(); 就完事了,很方便吧   呵呵

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