2012-08-06 60 views
0

我有連接到我的Arduino的,其輸出大量的數據,我想過濾的GPS單元。如何處理奇怪的字符在Arduino的代碼

下面是輸出的一個片段:

$ÇÐÇÇÁ,175341.458,3355.7870,呵呵,01852.4251,A,1,03,5.5,-32.8,W,32.8,在0000 ,, * 57 $ÇÐÇÓA,ON,2,31,32,20 ,,,,,,,,,, 5.6,5.5,1.0 * 30 $ÇÐÒÍÃ,175341,458,ON,3355.7870,呵呵,01852.4251,A,0.17,223.13, 060812 ,, * 1C $ÇÐGÇÁ,175342.458,3355.7871,呵呵,01852.4251,A,1,03,5.5,-32.8,W,32.8,在0000 ,, * 55 $GÐÇÓÁ,ON,2,31,32, 20 ,,,,,,,,,, 5.5,5.5,1.0 * $ 33 ÇÐÒÍC,175342,458,在,3355.7871,呵呵,01852.4251,A,0.22,4.85,060812 ,, 10 * $ÇÐÇÇÁ,175343.458,3355.7872 ,S,01852.4251,A,1,03,5。 5,-32.8,在32.8,在0000 ,, * 57

這是通過以下方法閱讀:

char GPSread() 
{ 
    byte val = 0; 
    while (digitalRead(GPSrx)); 
    //wait for start bit 
    if (digitalRead(GPSrx) == LOW) 
    { 
    delayMicroseconds(halfBit4800Delay); 
    for (int offset = 0; offset < 8; offset++) 
    { 
     delayMicroseconds(bit4800Delay); 
     val |= digitalRead(GPSrx) << offset; 
    } 
    //wait for stop bit + extra 
    delayMicroseconds(bit4800Delay); 
    delayMicroseconds(bit4800Delay); 
    return val; 
    } 
} 

我的目標

我試圖篩選這個數據以獲得只與$ÇÐÇÇÁ開始使用數據在該線的線。我是新來使用字符串作爲char[]工作。

我嘗試

那麼我目前正試圖讀入這些值char[],然後當我得到一個匹配$ÇÐÇÇÁ我知道我有這條線。但我發現這裏面讓我堅持:

char dataformat [12] = "$ÇÐÇÇÁ"; 
Serial.println(dataformat [0]); 
Serial.println(dataformat [1]); 
Serial.println(dataformat [2]); 
Serial.println(dataformat [3]); 
Serial.println(dataformat [4]); 
Serial.println(dataformat [5]); 

輸出作爲

$

這是不一樣的我插在初始化的字符dataformat[]。我知道這是一個編碼的事情,但不知道如何去做。

問題

我怎麼能過濾此數據只獲得我想要的線路?

+0

嘗試使用if(isAlphanum(mychar)){...}來過濾字符,或者if(strncmp(「MYSTRING」,myString「,5)== 0){...}」來檢查在一行的開頭有一個特定的五個字符 – paulsm4 2012-08-06 19:20:51

+0

@ paulsm4但是如果我檢查它是否是字母數字,它會有什麼幫助 – LouwHopley 2012-08-06 19:25:07

回答

0

把你當前正在使用的數據格式字符但Serial.print 16個比特()預計8位字符。

打印在六十進制輸出,看您收到的確切的二進制數據,並將其複製的數據格式。

例如是否正在接收FF4C1245120c你將它寫這樣的:

炭DATAFORMAT [6] = {0xFF時,0x4C,0×12,×45,×12,0x0C};

這將繞過任何編碼問題。

+0

這沒有幫助我試着得到特殊字符的十六進制值然後用它來存儲在數據格式中,但它仍然在某處轉換並且被鎖定 – LouwHopley 2012-08-07 12:33:10