Madf писал(а):
Да, есть ограничение на длину СМС, причем если это по латински, если по русски пытаться пихать, то длина знаков резко сокращается из-за кодировки.
Если вам нужно устройством уметь собирать длинные СМС отосланные другим устройством, то протокол обмена можете сами придумать.
А вообще вот:
http://electronix.ru/forum/lofiversion/ ... 90245.htmlВ общем, прежде чем играться с кодом, попробуйте в обычном терминале, командами получить требуемый результат.
в том то и дело что в терминале я получил требуемый результат и разрешение gprsSerial.print("AT+CMGF=1\r"); у меня прописано
Так же смс у меня латиницей пересылается...Так вот получается когда я посылаю смс
qwerty...qwewewrewrsdfsdfdf (64 символа) то в терминал приходит заголовок + текст в виде
+CMT: "+79999999999","NAME","16/01/28,00:36:38+24"
qwerty...qwewewrewrsdfsdfdf
Если же я пытаюсь послать смс латиницей состоящую больше чем из 64 символов - aaaaaaaa....aaaaaaaaaa (например 120-140, где в остатке на одно сообщение еще 20 остается)
то терминал у меня все получает, именно тестируя этот код
Код:
if (gprsSerial.available()) // if date is comming from softwareserial port ==> data is comming from gprs shield
{
while (gprsSerial.available()) // reading data into char array
{
bufGsm[countBufGsm++] = gprsSerial.read(); // writing data into array
if (countBufGsm == 64)
{
break;
}
}
Serial.write(buffer, count);
clearBufferArray(); // call clearBufferArray function to clear the storaged data from the array
countBufGsm = 0; // set counter of while loop to zero
}
Но мне нужно собирать строку а не выводить все в терминал - поэтому я и спрашиваю, кким образом мне собрать всю строку вида???
+CMT: "+79999999999","NAME","16/01/28,00:36:38+24"
qwerty...qwewewrewrsdfsdfdf (160 символов)
Добавлено спустя 7 минут 52 секунды:Myp писал(а):
KorPaEv писал(а):
стандартная единичная 160 символьная смс
а что подразумевается под 160 символами?
всего в смс 160 символов, но из них только 153 символа это полезная нагрузка, остальное это заголовок.
тоесть если ты попытаешься отправить смску с 160 буквами то отправится составная смска, 153 символа + 7 символов.
сим900 умеет принимать смс в разных режимах, в одном из них как раз умеет склеивать длинные смс.
тока вероятно надо определиться что конкретно будет использоваться, ато наскока я знаю "длинные" смс могут быть разные и сим900 будет ждать не такое "длинное" смс которое ты отправил.
7 символов я так полагаю это информация инициализации??
AT+CMGF=1
AT+IFC=1
....
Тут вы правы - когда в терминал вывожу инфу и пытаюсь строку собрать у меня получается следующая штука - Например шлю смс 150 символов - в терминале вижу
Код:
char bufGsm[64]; // buffer array for data recieve over serial port
String inputGsmStr = ""; //входящая строка с gsm модема
int countBufGsm = 0;
void Manage()
{
if (gprsSerial.available()) // if date is comming from softwareserial port ==> data is comming from gprs shield
{
while (gprsSerial.available()) // reading data into char array
{
bufGsm[countBufGsm++] = gprsSerial.read(); // writing data into array
if (countBufGsm == 64)
{
break;
}
}
inputGsmStr += bufGsm;
Serial.print(inputGsmStr);
clearBufferArray(); // call clearBufferArray function to clear the storaged data from the array
countBufGsm = 0; // set counter of while loop to zero
}
}
void clearBufferArray() // function to clear buffer array
{
for (int i = 0; i < countBufGsm; i++)
{
bufGsm[i] = NULL;
}
}
Получаю в Serial.print(inputGsmStr);
AT+CMGF=1
ОК
AT+IFC=1
ОК
....
+CMT: "+79999999999",
AT+CMGF=1
ОК
AT+IFC=1
ОК
....
+CMT: "+79999999999","NAME","16/01/28,00:36:38+24"
aaaaaaa
AT+CMGF=1
ОК
AT+IFC=1
ОК
+CMT: "+79999999999","NAME","16/01/28,00:36:38+24"
aaaaaaa...aaaaaaaaaaaaa (И уже на 3м шаге вся смс)
ПОЭТОМУ СПРАШИВАЮ КАК МНЕ ПОЛУЧИТЬ ОКОНЧАТЕЛЬНУЮ ПОЛНУЮ СТРОКУ ВИДА, чтобы далее запустить эту функцию
+CMT: "+79999999999","NAME","16/01/28,00:36:38+24"
aaaaaaa...aaaaaaaaaaaaa (ВСЯ СМС)
Код:
if (isStringMessage) {
//если текущая строка - SMS-сообщение,
//отреагируем на него соответствующим образом
if (!currStr.compareTo("Green on")) {
digitalWrite(greenPin, HIGH);
} else if (!currStr.compareTo("Green off")) {
digitalWrite(greenPin, LOW);
} else if (!currStr.compareTo("Yellow on")) {
digitalWrite(yellowPin, HIGH);
} else if (!currStr.compareTo("Yellow off")) {
digitalWrite(yellowPin, LOW);
}
isStringMessage = false;
} else {
if (currStr.startsWith("+CMT")) {
//если текущая строка начинается с "+CMT",
//то следующая строка является сообщением
isStringMessage = true;
}
}
currStr = "";