2014-03-29 114 views
0

我使用串口將GP-635T GPS模塊連接到我的Arduino UNO(GPS TX-> UNO RX [引腳0])。GP-635T GPS模塊丟棄數據

然後,我只是讀取傳入的數據字節,將它們添加到一個字符串,因爲它們被讀取,當我到達一個換行符時(13),我只是打印完整的字符串數據並重置數據字符串以便下一次運行。

代碼:

void setup() 
{ 
    Serial.begin(9600); 
    Serial.println("Initialized Serial port.."); 
} 

String data = ""; 

void loop() 
{ 
    while(Serial.available()) 
    { 
    char gpsByte = Serial.read();// Read a byte from the GPS 
    data += gpsByte; 
    if(gpsByte == 13){ 
     Serial.print(data); 
     data = ""; 
    } 
    } 
    delay(100); 
} 

此代碼的工作,因爲它是。但這裏的問題是我從中得到的數據。

該模塊使用NMEA-0183標準以1Hz打印出多個數據線。我不知道它是如何決定打印什麼的,因爲數據對於(幾乎)完整數據集的超過5個「打印」不一致。

例:

$GPGGA,213948.00,,,,,0,00,99.99,,,,,,*63 
$GPGSA,A30        <--- A30? 
$GPGSV,1,1,01,29,,,30*70 
$GPGLL,,,,,213948.00,V,N*4F 
$GPRMC,213949.00,V,,,,,,,290314,,,N*74 
$GPVTG,,,,,,,,,N*30 
$GPGGA,213949.00,,,,,0,00,99.99,,,,,,*62 
$GPGSA,A,1,,,,PGSV,1,1,01,29,,,30*70  <--- PGSV? 
$GPGLL,,,,,213949.00,V,N*4E 
$GPRMC,213950.00,V,,,,,,,290314,,,N*7C 
$GPVTG,,,,,,,,,N*30 
$GPGGA,213950.00,,,,,0,00,99.99,,,,,,*6A 

...

$GPGGA,214045SA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30 
$GPGSV,1,1,01,29,,,30*70$GPRMC,214046.00,V,,,,,,,290314,,,N*75 <--- Missing linebreak? 
$GPVTG,,,,,,,,,N*30 
$G00,99.99,,,,,,*63          <--- $G00?? 
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30 
$GPGSV,1,1,02,20,,,27,29,,,30*74 
$GPGLL,$GPRMC,214047.00,V,,,,,,,290314,,,N*74 <--- Missing data? 
$GPVTG,,,,,,,,,N*30 
$GPGGA,214047.00,,,,,0,00,99.99,,,,,,*62 
$,99.99*30         <--- Alot of missing data 

我想你明白了吧,我沒有什麼,但連接到Arduino的GPS。 我試過用一些無線模塊無線發送數據,沒有任何變化。 我已經嘗試過使用AltSoftSerial和SoftwareSerial,但是我用後者得到了messier數據。 我已經嘗試了不同的波特率,沒有運氣。

有沒有人有任何想法,爲什麼會發生這種情況?該模塊是全新的,我不知道它爲什麼會這樣。

注意:我的家裏沒有一個非常好的GPS信號給我的模塊,我嘗試着去外面看,看看我是否可以從大約3顆衛星上得到一個信號,但是沒有,不改變輸出。

回答

0

這是一個非常奇怪的問題,當我將延遲從100ms縮短到10ms時,問題確實消失了。 它可能不得不對緩衝區做些什麼,也許它只是在我開始讀取字節之前溢出。

但是,如果其他人有這個相同的問題,縮短循環延遲,你應該沒問題!