Arduino SIM900 получает телефонный звонок
Я создал программу Arduino, которую можно отправлять и принимать SMS/ голосовые звонки. Но я не знаю, как получить телефонный звонок.
Все работает кроме 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 ответа
Я нашел проблему с вашим кодом. Он находится в 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");
}
Приведенного выше кода достаточно для этого.
NB. После 4-5 звонков он будет автоматически отвечать на звонок.
Используйте команду "ATA", чтобы ответить на звонок. В моем проекте я держал эту команду в пустом цикле. Поэтому при поступлении входящего звонка он автоматически отвечает. Вы можете оставить то же самое в своей функции. Для отключения вызова используйте "АТХ". В вашем коде добавьте: SIM900.println("ATA");