2015-08-19 169 views
0

我想與sim900一起工作,我正在嘗試做的事情是:1-讀取串行端口,2-將所有內容輸入到字符串中,3-搜索該字符串中的參數,4-清理字符串。代碼非常簡單,但我無法理解我做錯了什麼。 如果有人做出類似的事情,或者知道如何做,我會優雅的。 , 非常感謝你 何塞·路易斯·Arduino.Read串行,創建字符串,搜索到字符串,乾淨字符串

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

你不應該使用==比較C/C++字符串自認爲比較指針。更好的選擇是strcmp甚至更​​好strncmp,檢查this reference

回到你的代碼,嘗試這樣的事情:

if (strncmp(haystack.substring(i,needle.length()+i), needle, needle.length()) == 0) { 
    foundpos = 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(存在於字符串中)?

+0

伴侶!感謝幫助我!我有改變代碼一點點 –

+0

void loop() { // if(Serial1.available()){Serial.write(Serial1.read()); } // Sim900 if(Serial.available()){Serial1.write(Serial.read()); } // pc leido = LeerSerial(); Serial.println(leido); Serial.println(leido.indexOf(「Ready」)); (「準備好」)!= -1){0} {0} } delay(1000); ()){} –

+0

String LeerSerial(){ while(Serial1.available()){c1c = Serial1.read(); leido + = c; } return leido; } –