我创建了一个可以发送和接收短信/语音呼叫的Arduino程序。 但我不知道如何接听电话。
除Get_Call()
函数外,一切正常。我希望此功能接收电话并使用像Send_Call
功能这样的串行命令停止此呼叫。
我还没有发现程序如何通过AT命令接听电话。
这是我的代码:
#include <SoftwareSerial.h>
SoftwareSerial SIM900(7, 8);
char message=0;
void setup() {
SIM900.begin(19200);
delay(25000);
Serial.begin(19200);
Serial.println("OK");
digitalWrite(9, HIGH);
delay(1000);
}
void Send_Call() {
SIM900.println("ATD 0608446677;");
delay(100);
SIM900.println();
while(Serial.read() != '1') {
delay(100);
}
SIM900.println("ATH");
delay(1000);
}
void Send_SMS() {
SIM900.print("AT+CMGF=1\r");
delay(100);
SIM900.println("AT+CMGS=\"0608446677\"");
delay(100);
SIM900.println("test sms");
delay(100);
SIM900.println((char)26);
delay(100);
SIM900.println();
delay(5000);
Serial.println("SMS sent successfully");
}
void Get_SMS() {
SIM900.println("AT+CNMI=2,2,0,0,0");
delay(1000);
}
void Get_Call() {
}
void loop() {
if (Serial.available()>0) {
if(Serial.read() == 'p') {
Send_Call();
}
if(Serial.read() == 's') {
Send_SMS();
}
Get_SMS();
Get_Call();
}
if (SIM900.available()>0)
Serial.write(SIM900.read());
}
我为Get_Call()
尝试了这个:
void Get_Call() {
SIM900.print("AT+ATA\r\n"); //accept call
SIM900.print("AT+CLIP=1\r\n"); //view phone number
while(Serial.read() != '1') {
delay(100);
}
SIM900.println("ATH"); //exit call when send in com '1'
}
答案 0 :(得分:1)
我发现你的代码存在问题。它驻留在Get_Call中。问题在于以下两行代码:
char incoming_char=0;
incoming_char=SIM900.read();
了解SIM900.read()返回整数值或其字符值不等于&#39; R&#39;的事实。
所以你需要将incoming_char
更改为int变量和if条件。
代码:
int incoming_char=0;
incoming_char=SIM900.read();
if(incoming_char==252)
{
SIM900.println("ATA\r\n");
delay(5000000);
SIM900.println("ATH");
}
上面给出的代码足以做到这一点。
N.B:4到5次响铃后,它会自动参加通话。
答案 1 :(得分:0)
使用命令&#34; ATA&#34;接听电话。在我的项目中,我将此命令保留在void循环中。因此,只要有来电,它就会自动回答。你可以在你的功能中保持不变。要断开呼叫,请使用&#34; ATH&#34;。 在您的代码中添加:SIM900.println(&#34; ATA&#34;);