Arduino SIM900接到电话
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Arduino SIM900接到电话相关的知识,希望对你有一定的参考价值。
我创建了一个可以发送和接收短信/语音呼叫的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
");
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
"); //accept call
SIM900.print("AT+CLIP=1
"); //view phone number
while(Serial.read() != '1') {
delay(100);
}
SIM900.println("ATH"); //exit call when send in com '1'
}
答案
我发现你的代码存在问题。它驻留在Get_Call中。问题在于以下两行代码:
char incoming_char=0;
incoming_char=SIM900.read();
理解SIM900.read()返回整数值或其字符值不等于'R'的事实。
所以你需要将incoming_char
更改为int变量和if条件。
代码:
int incoming_char=0;
incoming_char=SIM900.read();
if(incoming_char==252)
{
SIM900.println("ATA
");
delay(5000000);
SIM900.println("ATH");
}
上面给出的代码足以做到这一点。
N.B:4到5次响铃后会自动参加通话。
另一答案
使用命令“ATA”接听电话。在我的项目中,我将此命令保留在void循环中。因此,只要有来电,它就会自动回答。你可以在你的功能中保持不变。要断开呼叫,请使用“ATH”。在您的代码中添加:SIM900.println(“ATA”);
以上是关于Arduino SIM900接到电话的主要内容,如果未能解决你的问题,请参考以下文章
如何使用Arduino和SIM900A GPRS / GSM模块将数据发送到Web服务器