GSM модем AT команда в терминале выполняется, программно через Arduino нет...

kostikmgtu
Offline
Зарегистрирован: 25.01.2014

Коллеги, помогите пожалуйста, я начинающий. Уже сутки без сна, как пытаюсь поймать СМС, сейчас такая проблемка.

Выполняю такой код:

void GSM_setup()

{ 
GSM.print("AT+CMGF=1\r");

delay(300);

GSM.print("AT+IFC=1, 1\r");
delay(300);
GSM.print("AT+CPBS=\"SM\"\r");
delay(300);
GSM.print("AT+CNMI=1,2,2,1,0\r");
}
 
В мониторе порта получаю:
AT+CMGF=1
OK
AT+IFC=1, 1
OK
AT+CNMI=1
OK
AT+CPBS="SM"
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 
и так далее, бесконечно повторяющаяся буква "А"
Те же самые команды, посылаемые из терминала, работают корректно, модем на последней команде возвращает ОК. Пробовал переставить команды местами, в итоге то же самое на последней команде, из чего делаю вывод, что модем все команды отрабатывает корректно, а какая-то проблема в самой программе или плате.
Плата Mega 2560
GSM Shield подключен на 50, 51 первый пины.
 
И еще попутно, кто занет: почему иак медленно выполняется команда чтения GSM.read();  (у меня она срабатывает раз в пару секунд, никаких задержек не включено.
 
kostikmgtu
Offline
Зарегистрирован: 25.01.2014
Добавлю, символы в монитор передаются так:
void loop()
{
 
  if (!GSM.available())
    return;
 
  char currSymb = GSM.read();  
  Serial.print(currSymb);
}
kostikmgtu
Offline
Зарегистрирован: 25.01.2014

Всем спасибо за участие, вопрос решился.

gena
Offline
Зарегистрирован: 04.11.2012

  Было бы полезно поделиться с форумчанами решением Вашей проблемы.

kostikmgtu
Offline
Зарегистрирован: 25.01.2014

На 100% не известно, в чем была причина. Сначала бросил этот код и сделал через готовую библиотеку,  но там возникла другая проблема, при наличии метода sendSMS плата во время прошивки зависала и не хотела прошиваться (в то время как стандартные примерs прошивались). После того, как отношения с библиотекой не сложились, снова вернулся к AT командам, написал простой скетч с нуля, установил заводские настройки на шилде и все заработало. 

В общем, что-то накуролесил либо с шилдом, пока пытался его завести, либо со скетчем.

kostikmgtu
Offline
Зарегистрирован: 25.01.2014

Нашел, ошибка в коде. Метод currSymb = gsm.read() , если порт ничего не возвращает, возвращает символ -1 , мой скетч неправильно обрабатывал эту ситуацию. А по проблему с медленной работой исправляет возврат к заводским настройкам.