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+sim900发送短信例程代码

arduino 控制sim900A发送短信

如何使用Arduino和SIM900A GPRS / GSM模块将数据发送到Web服务器

如何使用Arduino和SIM900A GPRS / GSM模块将数据发送到Web服务器

Arduino中的字符串提取问题

sim800和sim900的区别