Шилд Sim 900 не воспринимает команды смс

MaksVV
Offline
Зарегистрирован: 06.08.2015

 Шилд такой. шилд отправляет смс на заданный номер по команде ардуино. Но НЕ управляет ардуино при получении команды по смс. Например не включает светодиоды при получении соответствующего смс. У кого нибудь может была проблема с таким шилдом? При получении команды смс почему то на время гаснет светодиод статус (указан стрелкой на фото). Питание шилда в норме от акб шуруповерта. Код стандартный управления светодиодами с амперки

MaksVV
Offline
Зарегистрирован: 06.08.2015

 
//для зелёного светодиода будем использовать второй цифровой вход,
//а для жёлтого - третий
int greenPin = 2;
int yellowPin = 3;
 
void setup()
{
    Serial.begin(19200);
    pinMode(greenPin, OUTPUT);
    pinMode(yellowPin, OUTPUT);
 
    // Настраиваем приём сообщений с других устройств
    // Между командами даём время на их обработку
    Serial.print("AT+CMGF=1\r");
    delay(300);
    Serial.print("AT+IFC=1, 1\r");
    delay(300);
    Serial.print("AT+CPBS=\"SM\"\r");
    delay(300);
    Serial.print("AT+CNMI=1,2,2,1,0\r");
    delay(500);
}
 
String currStr = "";
// Переменная принимает значение True, если текущая строка является сообщением
boolean isStringMessage = false;
 
void loop()
{
    if (!Serial.available())
        return;
 
    char currSymb = Serial.read();    
    if ('\r' == currSymb) {
        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 = "";
    } else if ('\n' != currSymb) {
        currStr += String(currSymb);
    }
}

Есть у кого мысли что можно попробовать?

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

строка 31 прекращает выполнение кода ниже:)

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Valera19701 пишет:
строка 31 прекращает выполнение кода ниже:)
Это нормально.

char currSymb; объяви за пределами loop.

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

Andy пишет:

Valera19701 пишет:
строка 31 прекращает выполнение кода ниже:)
Это нормально.

char currSymb; объяви за пределами loop.

точно, не увидел "!"

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Хотя дело не в char currSymb.....

Я бы еще вместо .compareTo() использовал .indexOf()

MaksVV
Offline
Зарегистрирован: 06.08.2015

Я так понял это происходит в случае отсутствия данных в сериал порту там ведь  if (!Serial.available()) перед этим стоит. 

MaksVV
Offline
Зарегистрирован: 06.08.2015

Пока пост писал ответили уже. Попробую .indexOf ()

MaksVV
Offline
Зарегистрирован: 06.08.2015

Заменил .compareTo() на indexOf() не помогло (

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Возможно причина в том, что +CMT всего лишь уведомление о приеме СМС, а не само СМС

Цитата:
при приеме SMS модуль сообщит об этом, выдав в терминал сообщение «+CMTI: "SM",3». Где 3 означает номер пришедшего сообщения.

 Для прочтения СМС можно использовать команду AT+CMGR=3,0 (3-номер сообщения, которое хотим прочитать, 0-изменить статус сообщения на прочитанный)
MaksVV
Offline
Зарегистрирован: 06.08.2015

Спасибо за попытки помощи! Разобрался. Попробовал подключить через программный сериал с библиотекой, переставив при этом перемычки на шилде и заработало!! Два дня бился. Блин контакт что-ли плохой на пинах хардового сериала.

slider
Offline
Зарегистрирован: 17.06.2014

MaksVV пишет:
Спасибо за попытки помощи! Разобрался. Попробовал подключить через программный сериал с библиотекой, переставив при этом перемычки на шилде и заработало!! Два дня бился. Блин контакт что-ли плохой на пинах хардового сериала.

Бывает, завал уровней http://arduino.ru/forum/apparatnye-voprosy/arduino-uno-ne-rabotaet-rx-tx-ch340g-podklyuchenie-m590-reshenie

MaksVV
Offline
Зарегистрирован: 06.08.2015

Slider, спасибо полезная инфа. Посмотрел, тоже 1 кОм, но лень , оставлю на софтсериале.