0

我无法从 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 时,结果是相同的。

你们中有人看到我做错了吗?

谢谢,胡安医生

4

1 回答 1

1

好吧,对于那些有同样问题或相关问题的人,我的解决方案是将所有响应保存在字符串变量中,然后在“mySerial”变量不再可用时对其进行处理

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

我正在处理 mySerial.available() 中的所有数据,不知何故我截断了响应......

于 2013-04-18T15:33:18.740 回答