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(); の直後に読み取りと印刷を試みました。行、そしてそこにある10進文字列をオンラインコンバーターで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 に答える