Ошибка AT%13% с защитой GSM/GPRS

Я пытался управлять реле с помощью экрана GSM для проекта Arduino. У меня не было никакого успеха ни с программным серийным номером, ни с библиотекой GSM. Я объявил переменную GSM в режиме отладки, и она выдает ошибку AT%13%. Используя Software Serial, он зависает на SIM900.read(). SIM-карта подключается к сети, я это вижу на плате - светодиод мигает каждые 3 секунды и подает мне сигналы о входящих звонках и смс.

Я не могу сказать, связана ли ошибка с SIM-картой, подключением к плате Arduino, источником питания (12 В) или чем-то совершенно другим. Вот два примера кода, которые я использую с разными библиотеками.

Кто-нибудь еще получает эту ошибку? Как лучше всего избавиться от этого?

Заранее спасибо за любую помощь!

SoftwareSerial.h

#include <SoftwareSerial.h> 
char inchar; // Будет удерживать входящий символ от шилда GSM
SoftwareSerial SIM900(7, 8);

int Relay1 = A2;
int Relay2 = A3;

void setup()
{
  Serial.begin(19200);
  //Настраиваем контакты управления реле
  pinMode(Relay1, OUTPUT);
  digitalWrite(Relay1, HIGH);
  // пробуждаем GSM шилд
  SIM900.begin(19200);
  delay(10000);  // дать время для входа в сеть.
  SIM900.print("AT+CMGF=1\r");  // установить режим SMS на текст
  delay(100);
  SIM900.print("AT+CNMI=2,2,0,0,0\r"); 
  // вывод содержимого нового СМС при получении на последовательный выход GSM-шилда
  delay(100);
  Serial.println("Ready...");
  }

void loop() 
{

  //Если с сотового модуля приходит персонаж...
  if(SIM900.available() >0)
  {
    inchar=SIM900.read();
    Serial.println(inchar);
    if (inchar=='#')
    {...}
    SIM900.println("AT+CMGD=1,20"); // удалить все смс
  }
}

GSM.h — в данном случае я даже не прошел мимо команды .begin(). Этот код взят из примера на странице http://arduino.cc/en/Tutorial/GSMExamplesReceiveSMS

.
#include <GSM.h>

// PIN-код для SIM-карты
#define PINNUMBER ""

// инициализируем экземпляры библиотеки
GSM gsmAccess(true);
GSM_SMS sms;
GSM3_NetworkStatus_t   gsmStatus;
// Массив для хранения номера, с которого получено SMS
char senderNumber[20];

void setup()
{
  // инициализируем последовательную связь и ждем открытия порта:
  Serial.begin(9600);
  while (!Serial) {
    ; // ждем подключения последовательного порта. Нужен только для Леонардо
  }

  Serial.println("SMS Messages Receiver");
  char code = 'X';
  Serial.flush();
  gsmStatus = gsmAccess.begin(PINNUMBER,false,false);

  int retrycount = 60;
  while (gsmStatus != GSM_READY && retrycount-- > 0) {
    delay(1000);  // меньшее значение задержки может привести к нестабильному состоянию
    theGSM3ShieldV1ModemCore.manageReceivedData();
    gsmStatus = gsmAccess.getStatus();
  }

  if (gsmStatus != GSM_READY) {
    Serial.println("\n[ERR]: GSM connection failed\n");
    Serial.flush();
    gsmAccess.shutdown();
    delay(250);
    digitalWrite(3,LOW);
  }

  Serial.println(" [DONE]");

  // состояние соединения
  boolean notConnected = true;
  // Запускаем GSM соединение
  while (notConnected)
  {
    if (gsmAccess.begin(PINNUMBER) == GSM_READY)
  {
      notConnected = false;
  }
    else
    {
      Serial.println("\nNot connected");
      delay(1000);
    }
  }
  Serial.println("GSM initialized");
  Serial.println("Waiting for messages");
}

, 👍0

Обсуждение

Кажется, вы используете разные скорости передачи данных в каждом примере. Какой правильный?, @Nick Gammon

Вы получаете ошибку AT%10%, если вы меняете \rs на \ns?, @Gerben

Извините за путаницу со скоростью передачи данных. На самом деле они не имеют значения, поскольку оба верны, коды взяты из двух разных примеров. К сожалению, мне не удалось решить эту проблему с помощью GSM.h. Я остановился на SoftwareSerial.h, но нашел надежное воспроизводимое решение проблемы. Во-первых, сейчас я использую SIM900.print("AT+CNMI=1,2,0,0,0\r"); ` чтобы инициализировать мой режим SMS, кажется, что он каждый раз включается правильно. Во-вторых, после read() с SIM-карты я очищаю содержимое с помощью SIM900.flush(), что, кажется, предотвращает появление фантомных сообщений., @Andrew


2 ответа


1

Проверьте скорость передачи данных. Они кажутся разными. Это вызовет проблемы.

,

Это два разных кода, которые не предназначены для совместной работы. Правда, скорости передачи для верха и низа не совпадают, но это не решает проблемы., @Andrew


1

Я использовал Mega 2560, подключенный к GSM-шилду следующим образом:

  • GSM TX --- контакт 10 на Mega
  • GSM RX --- контакт 3 на Mega

  • Заземление – Заземление

,