2015-11-04 653 views
0

我在我的程序中比較字符串時遇到問題。我收到的串行數據,並將其保存爲一個字符串:Arduino字符串比較問題

void serialEvent() { 
    if(!stringComplete){ 
     while (Serial.available()) { 
       // get the new byte: 
       char inChar = (char)Serial.read(); 
       // add it to the inputString: 
       inputString += inChar; 
       // if the incoming character is a newline, set a flag 
       // so the main loop can do something about it: 
       if (inChar == '\n') { 
       stringComplete = true; 
       Serial.println("COMPLETE"); 

} 

我然後做一個對是從的serialEvent功能存儲的字符串比較:

void setCMD(String a){ 
     if(a == "01*00"){ 
      busACTIVE=0; 
      // clear the string: 
      inputString = ""; 
      stringComplete = false; 
      } 
     else if(a.equals("01*01")){ 
       busACTIVE=1; 
      // clear the string: 
      inputString = ""; 
      stringComplete = false; 

} 我有幾個else if語句然後在最後一個else語句:

else{ 
    Serial.println("Command not Found"); 
    Serial.println(a); 
    // clear the string: 
    inputString = ""; 
    stringComplete = false; 
    } 

我試過==運算符和equals(),都不會比較正確。下面是一個串行輸出: Serial Output

正如你可以看到我比較報表的一個尋找01 * 01和,這也是你在串行輸出窗口看到,if語句不等同於真實的。任何人都可以幫助找出爲什麼這不起作用。由於

+0

忘記在setCMD函數中添加String a作爲setCMD(inputString)在主循環中調用; – PL76

+0

添加語言標記 – ergonaut

+2

您將'\ n'添加到inputString中,以便測試失敗 –

回答

0

嘗試編輯本:

inputString += inChar; 
// if the incoming character is a newline, set a flag 
// so the main loop can do something about it: 
if (inChar == '\n') { 
    stringComplete = true; 
    Serial.println("COMPLETE"); 
} 

到這一點:

// if the incoming character is a newline, set a flag 
// so the main loop can do something about it: 
if (inChar == '\n') { 
    stringComplete = true; 
    Serial.println("COMPLETE"); 
} 
else 
    inputString += inChar; 

的原因是,如果你是比較"01*00""01*00\n",當然,比較失敗。

無論如何,我會避免使用可變大小的緩衝區。出於性能原因,我更喜歡使用固定大小的緩衝區。還因爲微控制器......微!不要浪費他們的稀缺資源malloc s和free s ...

+0

我試過了您編輯但它不起作用。我將\ n添加到比較字符串中,並且它工作正常。也感謝您的建議。我對編程並不陌生,所以我很欣賞你添加的提示。 – PL76

+0

您是否也像我一樣刪除了'inputString + = inChar;'行?原因......這是唯一可能的錯誤;) – frarugi87