【发布时间】:2016-09-23 10:59:25
【问题描述】:
我使用 SIM800l 通过AT commands 与 arduino UNO 进行通话。通过使用这个library,我使用gprsTest.callUp(number) 函数进行调用。问题是它返回true,即使数字错误或没有信用。
GPRS_Shield_Arduino.cpp library 的这部分代码很清楚为什么会发生这种情况。它不检查ATDnumberhere; 的返回
bool GPRS::callUp(char *number)
{
//char cmd[24];
if(!sim900_check_with_cmd("AT+COLP=1\r\n","OK\r\n",CMD)) {
return false;
}
delay(1000);
//HACERR quitar SPRINTF para ahorar memoria ???
//sprintf(cmd,"ATD%s;\r\n", number);
//sim900_send_cmd(cmd);
sim900_send_cmd("ATD");
sim900_send_cmd(number);
sim900_send_cmd(";\r\n");
return true;
}
ATDnumberhere;对软件串口通信的返回是:
如果数字错误
ERROR
如果没有信用
`MO CONNECTED //instant response
+COLP: "003069XXXXXXXX",129,"",0,"" // after 3 sec
OK`
如果是来电却无人接听
MO RING //instant response, it is ringing
NO ANSWER // after some sec
如果是来电就挂断
MO RING //instant response
NO CARRIER // after some sec
如果接收方没有载波
ATD6985952400;
NO CARRIER
如果是来电,接听并挂断
MO RING
MO CONNECTED
+COLP: "69XXXXXXXX",129,"",0,""
OK
NO CARRIER
问题是如何通过此函数gprsTest.callUp(number) 为每种情况使用不同的返回值,或者至少在响铃时如何返回true?
【问题讨论】:
标签: c++ arduino at-command