Определение номера входящего звонка.
- Войдите на сайт для отправки комментариев
Пт, 09/01/2015 - 18:12
Добрый вечер, прошу подсказать. Оборудование UNO+SIM900. Пишу скетч без библиотеки GSM.
Смысл скетча следующий: 1. Принять звонок, 2. Определить номер, 3. Сбросить вызов.
Проблема на чтении данных номера с SIM900. Не в тот формат читаю? Прошу напрвитиь на путь истинный.
#include <SoftwareSerial.h>
//заводим Serial-соединение с GPRS-Shield на 7 и 8 цифровых входах
SoftwareSerial gprsSerial(7, 8);
void setup()
{
Serial.begin (9600);
// GPRS Shield общается по умолчанию на скорости 19200 бод
gprsSerial.begin(19200);
}
//в строке curStr будем хранить текущую строку, которую передает нам плата
String currStr = "";
int updateTime = 0;
void loop()
{
touch();
if (!gprsSerial.available())
return;
// Считываем очередной символ с платы
char currSymb = gprsSerial.read();
if ('\r' == currSymb) {
// Получен символ перевода строки, это значит, что текущее
// сообщение от платы завершено и мы можем на него отреагировать.
// Если текущая строка - это RING, то значит, нам кто-то звонит
if (!currStr.compareTo("RING")) {
//кокетничаем 3 секунды, чтобы дать услышать звонящему гудок
delay(3000);
//посылаем команду на поднятие трубки
gprsSerial.println("AT+CLCC");
delay (100);
char number=gprsSerial.read();
gprsSerial.println("AT+CHUP");
delay (100);
Serial.println (number);
}
currStr = "";
} else if (currSymb != '\n') {
// Дополняем текущую команду новым сиволом
// При этом игнорируем второй символ в последовательности переноса
// строки: \r\n
currStr += String(currSymb);
}
}
/*
* Функция провоцирует поддержание коммуникации с платой даже если
* та была перезагружена без перезагрузки Arduino
*/
void touch()
{
if (millis() >= updateTime) {
gprsSerial.println("AT");
updateTime += 5000;
}
}
Если у Вас включен AT+CLIP=1, то номер звонящего будет в строке, следующей за RING.
Примерно так:
"AT+CLIP=1
OK
type the AT command in hyper terminal press return you should get ok then ring the number and you should see RING
then the next line should read
+CLIP: "NUMBER ""
Вот здесь https://github.com/Makeroni/Arduino-SIM900/blob/master/alarm.ino подходящий кусок в скетче имеется.