Шилд Sim 900 не воспринимает команды смс
- Войдите на сайт для отправки комментариев
Пнд, 22/02/2016 - 11:07
Шилд такой.
шилд отправляет смс на заданный номер по команде ардуино. Но НЕ управляет ардуино при получении команды по смс. Например не включает светодиоды при получении соответствующего смс. У кого нибудь может была проблема с таким шилдом? При получении команды смс почему то на время гаснет светодиод статус (указан стрелкой на фото). Питание шилда в норме от акб шуруповерта. Код стандартный управления светодиодами с амперки
//для зелёного светодиода будем использовать второй цифровой вход, //а для жёлтого - третий 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); } }Есть у кого мысли что можно попробовать?
строка 31 прекращает выполнение кода ниже:)
char currSymb; объяви за пределами loop.
char currSymb; объяви за пределами loop.
точно, не увидел "!"
Хотя дело не в char currSymb.....
Я бы еще вместо .compareTo() использовал .indexOf()
Я так понял это происходит в случае отсутствия данных в сериал порту там ведь if (!Serial.available()) перед этим стоит.
Пока пост писал ответили уже. Попробую .indexOf ()
Заменил .compareTo() на indexOf() не помогло (
Возможно причина в том, что +CMT всего лишь уведомление о приеме СМС, а не само СМС
Спасибо за попытки помощи! Разобрался. Попробовал подключить через программный сериал с библиотекой, переставив при этом перемычки на шилде и заработало!! Два дня бился. Блин контакт что-ли плохой на пинах хардового сериала.
Бывает, завал уровней http://arduino.ru/forum/apparatnye-voprosy/arduino-uno-ne-rabotaet-rx-tx-ch340g-podklyuchenie-m590-reshenie
Slider, спасибо полезная инфа. Посмотрел, тоже 1 кОм, но лень , оставлю на софтсериале.