0

我正在尝试使用 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;
    }
4

2 回答 2

0

您不应该使用==C/C++ 中的比较字符串,因为它比较指针。更好的选择是strcmp甚至更好strncmp,请查看此参考

回到你的代码,尝试这样的事情:

if (strncmp(haystack.substring(i,needle.length()+i), needle, needle.length()) == 0) {
  foundpos = 1;
}
于 2015-08-19T12:44:33.227 回答
0

你可以通过简单地使用String 的 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(存在于字符串中)?

于 2015-08-19T13:18:46.170 回答