1

Arduinoで作業していますが、String.substringが正しく動作していないようです。そのため、何が間違っているのでしょうか。

私の機能は次のとおりです。

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を返さないのはなぜですか?

4

1 に答える 1

5

buf.substring(1)位置1から始まり、文字列の最後まで続く部分文字列を返します。これはで始まりますが、とは等しくGPGGAなりません。 GPGGA

比較する文字列の長さが5文字であることがわかっている場合は、次を使用できます。

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

substring()また、trueを返すことが期待されるのは関数ではなく、比較演算子であることに注意してください==

于 2012-11-27T05:43:26.340 に答える