Определение номера входящего звонка.
- Войдите на сайт для отправки комментариев
Пт, 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 подходящий кусок в скетче имеется.