有人用過Sharp GP2Y1051A 空氣質量傳感器三代
說是第三代,說是較穩定,但是用了網路上找得到的程式,監測數值run不出來http://twarm.com/commerce/product_info.php?products_id=15197&sid=a46911a6cd8da9be06151dccd58fbe88
若改成以下程式,簡單一點,有在serial port顯示數值,但看起來還是不完整void loop(){
data=Serial.read();
Serial.println(data);
}
不知是頻率對不上,還是還有其他問題?
請各大大提供寶貴經驗,感謝。 1.你線路是怎麼接的?
2.改成你貼的程式後,會印出那些數字? 本帖最後由 csnnan 於 2016-4-7 00:31 編輯
接法就照http://twarm.com/commerce/produc ... 9be06151dccd58fbe88,
直接將傳感器和arduino對接
若用我改的,就會出現
170
0
11
0
等數字
但用廠商提供的第一個程式,就一片空白
另外我測試了廠商提供第二個程式加sd卡的
可以正常顯示,並且正常記錄在sd卡內的檔案
對照兩個程式,直接把加sd卡的改成第一個程式的功能
也不行!!如果一行一行刪除修改,
發現SD.begin(4)沒刪掉就都還正常,刪掉就不能顯示了!
滿奇怪的,真搞不懂,提供程式碼如下int incomeByte;
int data;
int z=0;
int sum,count;
unsigned long starttime;
float average_pm2d5,sum_2s;
#include <SD.h>
File myFile;
void setup()
{
Serial.begin(2400);
pinMode(10, OUTPUT);
SD.begin(4);
starttime=millis();
}
void loop()
{
while (Serial.available()>0){
data=Serial.read();
if(data == 170){
z=0;
incomeByte=data;
}
else{
z++;
incomeByte=data;
}
if(z==6)
{
sum=incomeByte+ incomeByte+ incomeByte + incomeByte;
if(incomeByte==sum && incomeByte==255 )
{
float vo=(incomeByte*256.0+incomeByte)/1024.00*5.000;
float c=vo*700;
sum_2s=sum_2s+c;
count++;
if(abs(millis()-starttime)>2000){
average_pm2d5=(sum_2s/count)*1.00;
Serial.print("PM2.5_Average = ");
Serial.println(average_pm2d5,2);
starttime=millis();
sum_2s=0;
count=0;
}
}
else{
z=0;
Serial.flush();
data='/0';
for(int m=0;m<7;m++){
incomeByte=0;
}
}
z=0;
}
}
}就是第15行刪掉,輸出就一片空白,真搞不懂為何會如此? 本帖最後由 超新手 於 2016-4-7 08:12 編輯
有這種事? 你又沒接 SD Card
1) 你給的數據太少
至少要6筆以上才有辦法分折
越多越好, 少說也貼個 18 筆來看看
2) 用第一個程式. 你把以下這行
sum=incomeByte+ incomeByte+ incomeByte + incomeByte;
改成
sum=(incomeByte+ incomeByte+ incomeByte + incomeByte)&0xff;
試看看 本帖最後由 csnnan 於 2016-4-7 11:33 編輯
感謝,超大...
不過用廠商第一個程式改成你建議的寫法,還是不行...
只要把
#include <SD.h>
SD.begin(4);
加到相對應的位置,就可以了!!有圖為證,真傷腦經@#$##而且每行前面170|0|4|0|109|110|255|就是每次輸出的那一組數據
看起來就很正常... 最上面的宣告錯了
int incomeByte;
應該是
int incomeByte; 讚!!!太強了,改了int incomeByte;就一切正常,太感謝了
不過為何加了sd.begin也就可以正常,實在很詭異
不過真正問題出在array的宣告.........再次感謝超大.....
頁:
[1]