Wil*_*ill 1 c++ string arduino
我正在研究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");
}
Run Code Online (Sandbox Code Playgroud)
模式"GPGGA"即将出现但子字符串未返回true.
我的Serial的输出如下:
$GPGGA,053540.000,3804.1237,N,07615.5232,W,1,7,1.39,117.5,M,-33$GPGGA,053And we're done
Run Code Online (Sandbox Code Playgroud)
因此buf
在字符串中显然有'GPGGA'.再次显示'GPGGA'的最后一点是在字符串中打印字符0-10.为什么我的if
陈述没有归还?
buf.substring(1)
返回从第一个位置开始并一直持续到字符串结尾的子字符串.这将从一开始GPGGA
,但不会相等 GPGGA
.
如果你知道你比较的字符串长度是5个字符,你可以使用
if (buf.substring(1,1+5) == "GPGGA")
/* ... */
Run Code Online (Sandbox Code Playgroud)
还要注意,它不是substring()
预期返回true 的函数,而是比较运算符==
.