Neoway 590 (без остановки смс)
- Войдите на сайт для отправки комментариев
Пнд, 30/11/2015 - 05:15
Здравствуйте! Имеется дуино мини, gsm neoway 590, ds18b20. По смс запросу передается температура. При приеме неправильной смс команды - ответ отсылается единожды. При приеме правильной команды запроса - смс с температурой сыплются бесконечно))) Не могу понять, в чем прокол. Подскажите, пожалуйста!
#include <SoftwareSerial.h> SoftwareSerial mySerial(2, 3); // RX, TX int ch = 0; String val = ""; #define MASTER "+79999999999" //укажите телефон хозяина #include <OneWire.h> OneWire ds(4); void setup() { Serial.begin(9600); //подключаем порт компьютера Serial.println("GSM Neoway M590 example"); mySerial.begin(19200); //подключаем порт модема (при других скоростях не отвечает) mySerial.println("ATI"); //вывести в терминал иноформацию о модеме mySerial.println("AT+CLIP=1"); //включаем АОН delay(100); mySerial.println("AT+CMGF=1"); //режим кодировки СМС - обычный (для англ.) delay(100); mySerial.println("AT+CSCS=\"GSM\""); //режим кодировки текста delay(100); mySerial.println("AT+CNMI=2,2"); } void loop() { byte data[2]; ds.reset(); ds.write(0xCC); ds.write(0x44); delay(750); ds.reset(); ds.write(0xCC); ds.write(0xBE); data[0] = ds.read(); data[1] = ds.read(); int Temp = (data[1] << 8) + data[0]; Temp = Temp >> 4; Serial.println(Temp); if (mySerial.available()) { //есть данные от GSM модуля delay(200); //выждем, чтобы строка успела попасть в порт целиком раньше чем будет считана while (mySerial.available()) { //сохраняем входную строку в переменную val ch = mySerial.read(); val += char(ch); delay(10); } Serial.println(val); // дублируем сообщение в терминал //----------------------- определение факта приема СМС и сравнение номера(ов) с заданным(и) if (val.indexOf("+CMT") > -1) { //если обнаружен СМС (для определения звонка вместо "+CMT" вписать "RING", трубку он не берет, но реагировать на факт звонка можно) if (val.indexOf(MASTER) > -1) { //если СМС от хозяина Serial.println("--- MASTER SMS DETECTED ---"); } else { Serial.println("NO MASTER SMS"); } //----------------------- поиск кодового слова в СМС (вообще эту часть надо поместить внутрь предыдущей, но если использовать кодовое слово не совпадающее с сообщениями модема, то не обязательно) if (val.indexOf("temp") > -1) { // если обнаружено кодовое слово Serial.println("send you ok"); // сообщаем об этом в терминал (если нужно) sms("temperatura ", MASTER, String(Temp)); // отвечаем смской } else { Serial.println("no send you"); sms("wrong ", MASTER, "command"); if (val.indexOf("temp") > -1) { // если обнаружено кодовое слово Serial.println("send you ok"); // сообщаем об этом в терминал (если нужно) sms("temperatura ", MASTER, String(Temp)); // отвечаем смской } else { Serial.println("no send you"); sms("wrong ", MASTER, "command"); } val = ""; } } } } void sms(String text, String phone, String Temp) { Serial.println("SMS send started"); mySerial.println("AT+CMGS=\"" + phone + "\""); delay(500); mySerial.print(text); delay(500); mySerial.print(Temp); delay(500); mySerial.print((char)26); delay(500); Serial.println("SMS send complete"); delay(2000); mySerial.println("AT+CMGD=1"); //стираем память смс delay(100); }
1. строку 73 спустите ниже , под 74.
2. непонятно зачем дублируются блоки кода начинающиеся в строках 58 и 66. Похоже, это предоставило вам возможность думать, что исполняется блок 66.
Спасибо большое!
заработало как положено?
Примерно такая же беда в своем скетче