如何解析Arduino中AT命令的响应?

时间:2015-02-23 20:47:03

标签: arduino sms gsm at-command

我有Arduino GSM屏蔽,我有一个名为SimpleGSM的课程来发送短信。 SimpleGSM类继承SoftwareSerial。

我有以下方法:

bool
SimpleGSM::sendSMS (const String phoneNumber, const String message)
{
  const byte CONTROL_Z_HEX_CODE = 0x1A;

  const unsigned long SERIAL_DELAY_TIME = 500;

  this->flush();

  this->print(F("AT+CMGS=\""));

  this->print(phoneNumber);

  this->print(F("\"\r"));

  delay(SERIAL_DELAY_TIME);

  this->flushInput();

  this->print(message);

  this->write(CONTROL_Z_HEX_CODE);

  delay(SERIAL_DELAY_TIME);

  this->flushInput();
}

上述方法成功发送了SMS但我没有检查AT命令的响应。

我还有其他方法可以禁用ECHO并将调制解调器设置为SMS文本模式:

bool
SimpleGSM::setEcho (const bool state)
{
  this->flush();

  this->print(F("ATE"));

  this->print(state);

  this->print(F("\r"));

  return this->find(OK_RESPONSE_FORMAT);
}

bool
SimpleGSM::setSMSMode (const byte mode)
{
  this->flush();

  this->print(F("AT+CMGF="));

  this->print(mode);

  this->print(F("\r"));

  return this->find(OK_RESPONSE_FORMAT);
}

以上两种方法成功处理了AT命令的响应。

我的问题是我想处理sendSMS方法的AT命令的响应:

bool
SimpleGSM::sendSMS (const String phoneNumber, const String message)
{
  const byte CONTROL_Z_HEX_CODE = 0x1A;

  this->flush();

  this->print(F("AT+CMGS=\""));

  this->print(phoneNumber);

  this->print(F("\"\r"));

  if (!this->find("\r\n> "))
  {
    return false;
  }

  this->print(message);

  this->write(CONTROL_Z_HEX_CODE);

  return this->find(OK_RESPONSE_FORMAT);
}

然而,由于某些原因,这不起作用。 'this-> find(“\ r \ n>”)'始终返回false。

请同时考虑OK_RESPONSE_FORMAT:

char * SimpleGSM::OK_RESPONSE_FORMAT = "\r\nOK\r\n";

1 个答案:

答案 0 :(得分:0)

AT命令响应通常由模块通过相同的连接发送。即,如果您以串行方式连接模块,则发送到传输引脚,并从接收引脚读取(tx与rx)。