2012-11-27 160 views
1

我工作的一個Arduino和String.substring似乎並不正確地工作,所以我想知道我可能是做錯了....String.substring不返回true

我的功能如下:

boolean processSerial() 
{ 
    String buf; 
    int iter = 0; 
    char thisChar; 

    while(iter < 1000){ 
    if (Serial.available()) { 
     #if ARDUINO >= 100 //For Arduino v1.0+ 
     { 
     thisChar = Serial.read(); 
     buf += thisChar; 
     //if(DEBUG){Serial.print(thisChar);} 
     } 
     #else //For Arduino v0023 or earlier 
     thisChar = Serial.read(); 
     #endif 
    } 
    iter++; 
    } 
    Serial.print(buf); 
    Serial.print(buf.substring(0,10)); 

    if(buf.substring(1) == "GPGGA"){ 
     Serial.println("FOUND IT!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); 
     } 
     Serial.println("And we're done"); 

} 

模式「GPGGA」即將到來,但子字符串未返回true。

從我的串行輸出是如下:

$GPGGA,053540.000,3804.1237,N,07615.5232,W,1,7,1.39,117.5,M,-33$GPGGA,053And we're done 

因此buf清楚字符串中具有 'GPGGA'。顯示'GPGGA'的最後一點是字符串中字符0-10的打印。爲什麼我的if聲明不能返回true?

回答

5

buf.substring(1)返回從位置1開始並一直延續到字符串末尾的子字符串。這將從GPGGA開始,但它不會等於GPGGA

如果你知道你比較的長度爲5個字符的字符串,你可以使用

if (buf.substring(1,1+5) == "GPGGA") 
    /* ... */ 

另外請注意,這不是substring()功能,預計將返回true,但比較操作==

+0

嗯,那麼如何在'前10個字符'內搜索該模式? – WildBill

+0

此外,您的聲明與本文檔衝突。不知道爲什麼他們錯了... http://arduino.cc/en/Tutorial/StringSubstring – WildBill

+0

啊,我想我現在知道如何去做。 (1,5)應該工作。 – WildBill