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.
Спасибо большое!
заработало как положено?
Примерно такая же беда в своем скетче