Arduino SIM900接到电话

时间:2017-12-16 11:20:37

标签: 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\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'
}

2 个答案:

答案 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;);