我很难从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()之后尝试了只是阅读和打印;线,当我将我到达的十进制字符串转换为char与任何在线转换器时,结果是相同的。
你们有没有看到我做错了什么?
谢谢, Juan Docal
答案 0 :(得分:1)
那么,对于那些遇到相同问题或相关问题的人,我的解决方案是将所有响应保存在String变量中,然后在“mySerial”变量不再可用时继续处理
String contactString = "";
if(mySerial.available()){
contactString += (char) mySerial.read();
}
else{
if(contactString != ""){
//Process response
}
contactString = "";
}
我正在处理mySerial.available()中的所有数据,不知怎的,我正在截断响应......