SIM900 получение СМС в режиме GPRS

Нет ответов
yloos
Offline
Зарегистрирован: 28.01.2017

Доброго дня!

такая ситуация -

к ардуино Mega2560 подключен SIM900.

работает в режимах приема звонка, приема СМС И отправки данных на сервер.

проблема -

если не включен режим GPRS, то СМС принимается отлично, считываю строку, в которой есть номер телефона и сам текст СМС. его парсю, и все в порядке.

пример строки

,,+CMT: "+7911111111","","17/01/21,13:25:09+12",,wsk1,,

НО если включен режим GPRS, то строка принимается обрезанной

,,+HTTPACTION:0,200,19,,,,+CMT: "+79111111111","","17/01/21,13:

переменная заведомо длинее 190 символов.



вероятно я не до конца считываю поток с модуля. или не верно? прошу помощи, а то уже давно бьюсь.

аналогичные примеры на форумах смотрел, но не нашел решения проблемы



код считывания с модуля прилагаю.

буду рад услышать конструктивную помощь и направление, куда рыть...

 

char msg[190] = "";
GsmAvailable(); // проверим порт модуля

void GsmAvailable() { //
if (gsmSerial.available()) { // если идет поток с SIM,
while (gsmSerial.available()) {
char buf = gsmSerial.read();
if ('\r' == buf) // если конец инфы с модуля
buf = ',' ; //Добавл
if ('\n' == buf) // если конец инфы с модуля
buf = ',' ; //Добавл 


msg[i++] = buf;
}
//закрываем массив
// msg[i++] = '\0';
}
Serial.print("soobsch GPRS 2 - ");
Serial.println(msg); 
Serial.println(i); 
}


if (i > 0) // определяем тип сообщения с модуля и запускаем соответствующую обработку
GsmMes(); // парсю код
i = 0;


// этой процедурой подключаю HTTP
////////Инициализировать HTTP
void P_initialized_Http() {
init_gsm(); // сброс модуля
stop_http(); // //остановить HTTP !!!!!!!!????
if (!SendAT("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"", "OK")) //тип подключения - GPRS
return ;
if (!SendAT("AT+SAPBR=3,1,\"APN\",\"internet.beeline.ru\"", "OK"))
return;
if (!SendAT("AT+SAPBR=3,1,\"USER\",\"beeline\"", "OK"))
return;
if (!SendAT("AT+SAPBR=3,1,\"PWD\",\"beeline\"", "OK"))
return ;
if (!SendAT("AT+SAPBR=1,1", "OK")) //Reopen bearer //Открыть несущую (Carrier)
{
delay(300);
SendAT("AT+SAPBR=0,1", "OK"); //close bearer
delay(300);
if (!SendAT("AT+SAPBR=1,1", "OK"))
return;
}
delay(300);
if (!SendAT("AT+HTTPINIT", "OK")) //Инициализировать HTTP
return;
if (!SendAT("AT+HTTPPARA=\"CID\",1", "OK")) //Carrier ID для использования.
return;
initialized_Http = 1;
// NextMillisOut = millis() + PeriodNextMillisOut;
}