GSM модем AT команда в терминале выполняется, программно через Arduino нет...
- Войдите на сайт для отправки комментариев
Сб, 25/01/2014 - 16:34
Коллеги, помогите пожалуйста, я начинающий. Уже сутки без сна, как пытаюсь поймать СМС, сейчас такая проблемка.
Выполняю такой код:
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(); (у меня она срабатывает раз в пару секунд, никаких задержек не включено.
Всем спасибо за участие, вопрос решился.
Было бы полезно поделиться с форумчанами решением Вашей проблемы.
На 100% не известно, в чем была причина. Сначала бросил этот код и сделал через готовую библиотеку, но там возникла другая проблема, при наличии метода sendSMS плата во время прошивки зависала и не хотела прошиваться (в то время как стандартные примерs прошивались). После того, как отношения с библиотекой не сложились, снова вернулся к AT командам, написал простой скетч с нуля, установил заводские настройки на шилде и все заработало.
В общем, что-то накуролесил либо с шилдом, пока пытался его завести, либо со скетчем.
Нашел, ошибка в коде. Метод currSymb = gsm.read() , если порт ничего не возвращает, возвращает символ -1 , мой скетч неправильно обрабатывал эту ситуацию. А по проблему с медленной работой исправляет возврат к заводским настройкам.