我正在尝试使用sim900,我正在尝试做的是:1-读取串口,2-将所有内容输入字符串,3-在该字符串中搜索参数,4-清除字符串。 代码非常简单,但我无法理解我做错了什么。 如果有人做了类似的事情,或者知道怎么做,我会优雅。 非常感谢你 何塞路易斯
String leido = " ";
void setup(){ // the Serial1 baud rate
Serial.begin(9600);
Serial1.begin(9600);
}
String leido = " ";
void setup(){
// the Serial1 baud rate
Serial.begin(9600);
Serial1.begin(9600);
}
void loop()
{
//if (Serial1.available()) { Serial.write(Serial1.read()); } // Sim900
if (Serial.available()) { Serial1.write(Serial.read()); } // pc
leido = LeerSerial();
Serial.println(leido);
if (find_text("READY",leido)==1){leido = " ";}
}
String LeerSerial(){
char character;
while(Serial1.available()) {
character = Serial1.read();
leido.concat(character);
delay (10); }
if (leido != "") { Serial1.println(leido);return leido; }
}
int find_text(String needle, String haystack) {
int foundpos = -1;
for (int i = 0; (i < haystack.length() - needle.length()); i++) {
if (haystack.substring(i,needle.length()+i) == needle) {
foundpos = 1;
}
}
return foundpos;
}
答案 0 :(得分:0)
你不应该使用==
来比较C / C ++中的字符串,因为它会比较指针。更好的选择是strcmp
甚至更好strncmp
,请检查this reference。
回到你的代码,尝试这样的事情:
if (strncmp(haystack.substring(i,needle.length()+i), needle, needle.length()) == 0) {
foundpos = 1;
}
答案 1 :(得分:0)
只需使用String's indexOf() ?:
即可逃脱String leido = " ";
void setup() {
// the Serial1 baud rate
Serial.begin(9600);
Serial1.begin(9600);
}
void loop()
{
//if (Serial1.available()) { Serial.write(Serial1.read()); } // Sim900
if (Serial.available()) {
Serial1.write(Serial.read()); // pc
}
leido = LeerSerial();
Serial.println(leido);
if (leido.indexOf("READY") == 1) {
leido = " ";
}
}
String LeerSerial() {
char character;
while (Serial1.available()) {
character = Serial1.read();
leido.concat(character);
delay (10);
}
if (leido != "") {
Serial1.println(leido);
return leido;
}
}
请注意,这假设“READY”始终位于索引1处。 也许值得检查indexOf(“READY”)是否大于-1(存在于字符串中)?