gprsTest.isCallActive(PHONE_NUMBER)
即使手机正在响铃,也始终返回0。Acording到GPRS_Shield_Arduino.cpp从这个库返回0就绪,2未知,3振铃,4对正在进行的呼叫。我究竟做错了什么?AT commnads在这里。
#include <GPRS_Shield_Arduino.h>
#include <SoftwareSerial.h>
#include <Wire.h>
#define PIN_TX 7
#define PIN_RX 8
#define BAUDRATE 9600
#define PHONE_NUMBER "003xxxxxxxxxx"
#define MESSAGE "Temp is high"
GPRS gprsTest(PIN_TX, PIN_RX, BAUDRATE); //RX,TX,BaudRate
void setup() {
Serial.begin(9600);
// code
}
void loop() {
// ..code..
if (temp>35) {
call_number();
}
// ..code..
}
void call_number() {
Serial.println(gprsTest.isCallActive(PHONE_NUMBER));// return 0 that is ok
Serial.println("Start to call...");
gprsTest.callUp(PHONE_NUMBER); // It calls and phone is ringing
delay(4000);
Serial.println(gprsTest.isCallActive(PHONE_NUMBER)); // It return again 0 when phone is ringing
}
编辑1:在Ouss4回答后,他说gprsTest.isCallActive(PHONE_NUMBER)
返回0或1。如何修改该库或构建自己的函数以检查调用是否处于活动状态(正在响铃)?
编辑2:我更改为
char number[15] = "00306912345678";
char numberToCallActive[15] = "00306912345678";
...
setup(){
...
...
}
void call_number(){
Serial.println(F("Before call"));
Serial.println(gprsTest.isCallActive(numberToCallActive)); // return 0 , I uncomment Serial.print on cpp to print gprsBuffer
Serial.println(F("start to call ... "));
gprsTest.callUp(number);
Serial.println(F("SUCCESS"));
Serial.println(F("When phone is ringing"));
Serial.println(gprsTest.isCallActive(numberToCallActive)); return 0 , I uncomment Serial.print on cpp to print gprsBuffer
Serial.println(F("Again when phone is ringing"));
Serial.println(gprsTest.isCallActive(numberToCallActive));return 0 , I uncomment Serial.print on cpp to print gprsBuffer
Serial.print("\n");
}
输出:
Before call
Buffer isCallActive 1: AT+CPAS
+CPAS: 0
OK
0
start to call ...
SUCCESS
When phone is ringing
Buffer isCallActive 1: ATD00306912345678;
AT+CPAS
0
Again when phone is ringing
Buffer isCallActive 1:
0
好吧,如果您看一下该isCallActive()
函数的代码,就会发现它返回的是布尔值(0或1)而不是2、3、4。
根据呼叫状态,实际上返回这些数字的是AT命令AT+CPAS
。而且库并未考虑的所有返回值AT+CPAS
。
isCallActive()
1
如果已振铃,则返回时,将返回。
您可以自己编写并解析返回值。
仔细阅读代码后,我发现我实际上误认为函数的返回。我编辑了答案,1
如果电话响了,该功能应该返回。
但是,您在如何调用该函数方面遇到了严重的问题。
该函数也会尝试获取该数字并将其存储在send(isCallActive(char *number)
)的参数中,但是您正在发送字符串文字,然后该函数尝试对其进行修改,然后尝试修改字符串文字会导致未定义的行为。
这时候,你叫什么发生isCallActive
与PHONE_NUMBER
尝试正确调用它。
那应该是这样的:
#define MAX_LEN_NUMBER 10 // or whatever the max number is.
....
char numberToCallActive[MAX_LEN_NUMBER] = "";
void setup()
{
....
}
void loop()
{
...
isCallActive(numberToCallActive);
....
}
然后,您可以使用此变量来检查实际响铃的号码是否是您呼叫的号码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句