2013-04-17 63 views
0

我有麻煩從SIM900模塊獲得正確的響應,如果我使用代碼,因爲它在它的例子中工作得很好。Arduino + SIM900模塊 - 沒有正確地得到命令響應

這個命令:

void GetContacts(){ 
    mySerial.print("AT+CPBF=\"Mailbox\""); 
    delay(100); 
    mySerial.println(); 
} 

,並與該打印代碼:

if (mySerial.available()){ 
    Serial.write(mySerial.read()); 
} 

我得到:

AT+CPBF="Mailbox" 

+CPBF: 1,"+584125089112",145,"Mailbox3" 

+CPBF: 2,"+584264273127",145,"Mailbox1" 

+CPBF: 3,"+584147373665",145,"Mailbox2" 

OK 

這是完美的,但如果我嘗試讀取輸出然後像這樣打印:

if (mySerial.available()){ 
    int intValue = mySerial.read(); 

    String stringOne; 
    stringOne = String(intValue, HEX); //int to HEX 

    char charConversion; 
    charConversion = hexNibbleToChar(stringOne[0]) * 16 + hexNibbleToChar(stringOne[1]); //HEX to Char 
    contactString += charConversion; 

    Serial.println(contactString); 
} 

char hexNibbleToChar(char nibble){ 
    if (nibble >= '0' && nibble <= '9') 
    return nibble - '0'; 
    else if (nibble >= 'a' && nibble <= 'f') 
    return 10 + nibble - 'a'; 
    else 
    return 10 + nibble - 'A'; 
} 

我得到:

AT+CPBF="Mailbox" 

+CPBF: 1,"+584125089112",145,"Mailbox3" 

+CPBF: 2,"+58426 

突然停止那裏,我不知道爲什麼,我已經試過剛過INT的intValue = mySerial.read()讀取和打印權;行,當我把那裏的十進制字符串轉換成字符時,任何在線轉換器的結果都是一樣的。

你們有沒有看到我做錯了什麼?

感謝, 胡安Docal

回答

1

那麼,對於那些有相關的同樣的問題什麼的,我的解決方案是保存在一個字符串中所有響應變量,然後proccess它當「mySerial」變量WASN 「T提供了

String contactString = ""; 
if(mySerial.available()){ 
    contactString += (char) mySerial.read(); 
} 
else{ 
    if(contactString != ""){ 
    //Process response 
    } 
    contactString = ""; 
} 

我等待處理所有內mySerial.available()的數據,不知何故,我截斷響應...