csnnan 發表於 2016-4-4 11:26:04

有人用過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);
}
不知是頻率對不上,還是還有其他問題?
請各大大提供寶貴經驗,感謝。

超新手 發表於 2016-4-4 13:05:12

1.你線路是怎麼接的?
2.改成你貼的程式後,會印出那些數字?

csnnan 發表於 2016-4-7 00:22:13

本帖最後由 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:08:09

本帖最後由 超新手 於 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:30:32

本帖最後由 csnnan 於 2016-4-7 11:33 編輯

感謝,超大...
不過用廠商第一個程式改成你建議的寫法,還是不行...
只要把
#include <SD.h>
SD.begin(4);

加到相對應的位置,就可以了!!有圖為證,真傷腦經@#$##而且每行前面170|0|4|0|109|110|255|就是每次輸出的那一組數據
看起來就很正常...

超新手 發表於 2016-4-7 12:12:03

最上面的宣告錯了
int incomeByte;
應該是
int incomeByte;

csnnan 發表於 2016-4-7 14:48:22

讚!!!太強了,改了int incomeByte;就一切正常,太感謝了
不過為何加了sd.begin也就可以正常,實在很詭異
不過真正問題出在array的宣告.........再次感謝超大.....
頁: [1]
查看完整版本: 有人用過Sharp GP2Y1051A 空氣質量傳感器三代