首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arduino SIM900接到电话

Arduino SIM900接到电话
EN

Stack Overflow用户
提问于 2017-12-16 19:20:37
回答 2查看 2.7K关注 0票数 0

我创建了一个Arduino程序,可以发送和接收SMS/语音呼叫。但是我不知道怎么接电话。

除了Get_Call()函数之外,其他函数都可以正常工作。我希望这个函数接收一个电话呼叫,并使用一个串行命令停止这个呼叫,就像我的Send_Call函数一样。

我还没有发现程序如何使用AT命令接收电话呼叫。

这是我的代码:

代码语言:javascript
复制
#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()上试过了

代码语言:javascript
复制
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'
}
EN

回答 2

Stack Overflow用户

发布于 2017-12-21 03:27:26

我发现了你代码的问题。它驻留在Get_Call中。问题出在以下两行代码中:

代码语言:javascript
复制
char incoming_char=0;
incoming_char=SIM900.read();

了解SIM900.read()返回整数值或其字符值不等于'R‘的事实。

因此,您需要将incoming_char更改为int变量,同时还需要更改if条件。

代码:

代码语言:javascript
复制
 int incoming_char=0;
  incoming_char=SIM900.read();
  if(incoming_char==252)
  {
      SIM900.println("ATA\r\n");

      delay(5000000);
      SIM900.println("ATH");
  }

上面给出的代码足以做到这一点。

注意:它将在4到5次振铃后自动接听通话。

票数 1
EN

Stack Overflow用户

发布于 2017-12-16 22:42:46

使用命令"ATA“应答呼叫。在我的项目中,我将这个命令保存在void loop中。因此,只要有来电,它就会自动应答。你可以在你的函数中保持相同。要断开呼叫,请使用"ATH“。在您的代码中添加: SIM900.println("ATA");

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47845094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档