【问题标题】:Arduino SIM900 receive a phone callArduino SIM900 接听电话
【发布时间】:2017-12-16 11:20:36
【问题描述】:

我创建了一个可以发送和接收短信/语音电话的 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'
}

【问题讨论】:

  • 我更新了我的消息并添加了我的 get_call 代码
  • 运行此草图时会得到什么。不起作用不会提供有关情况的太多信息。
  • 我什么都没有... com3 接到电话时不通知。
  • 没有人可以帮助我吗?
  • 我的对你有用吗?它适用于我。

标签: arduino sim900


【解决方案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\r\n");

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

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

N.B : 响铃 4 到 5 次后会自动接听电话。

【讨论】:

  • 条件 if(incoming_char==252) 对我不起作用...但是如果我删除 if 条件并发送调用代码 SIM900.println("ATA\r\n");接听我的电话
  • @sazearte 无论如何都做得很好。因为我以前没有见过这样的尝试。带来新事物是物联网的成功之道。
  • 所以它适合你。好的,我很高兴听到这个消息。如果它对您有帮助并且您认为它应该对有类似疑问的其他人有所帮助,请接受并投票赞成
【解决方案2】:

使用命令“ATA”接听电话。在我的项目中,我将此命令保留在 void 循环中。因此,每当有来电时,它会自动接听。您可以在您的功能中保持相同。要断开呼叫,请使用“ATH”。 在您的代码中添加: SIM900.println("ATA");

【讨论】:

  • 我使用 ata 命令 SIM900.print("AT+ATA\r\n");也许我使用不正确?为什么我的函数 void Get_Call() 不起作用?什么是错误?
  • @AakhilShaik 他已经明确表示,它没有奏效。他想解决有关函数(get_call)的问题。
  • 代替 SIM900.print("AT+ATA\r\n"); / 使用 SIM900.println("ATA");在你的功能中。它对我有用。
  • 我查看“响铃”消息,但我如何才能接听这个电话? SIM900.println("ATA");不给我打电话
  • 只有在打开串口监视器时才调用 Get_Call() 函数。所以插入 Get_Call();在第二个 if 即 if (SIM900.available()>0) .
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多