Skip to content

Instantly share code, notes, and snippets.

@xvoland
Created April 30, 2017 21:25
Show Gist options
  • Save xvoland/3269768238cfd91e9f9ba16b19513339 to your computer and use it in GitHub Desktop.
Save xvoland/3269768238cfd91e9f9ba16b19513339 to your computer and use it in GitHub Desktop.
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // pins connect номера дискретных входов-выходов контроллера в качестве RX, TX
int ch = 0;
String val = "";
#define MASTER "+3XXXXXXXXXX" // phone number / укажите телефон хозяина
void setup()
{
Serial.begin(9600); //подключаем порт компьютера
Serial.println("GSM Neoway M590 example");
mySerial.begin(19200); //подключаем порт модема на скорости по умолчанию (можно менять AT-командой)
mySerial.println("ATI"); //вывести в терминал иноформацию о модеме
delay(100);
mySerial.println("AT+CSQ"); //вывести в терминал уровень сигнала (если 99, то связи нет)
delay(100);
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()
{
if (mySerial.available()) { //если есть данные от GSM модуля
delay(200); //выждем, чтобы строка успела попасть в порт целиком раньше чем будет считана
while (mySerial.available()) { //сохраняем входную строку в переменную val
ch = mySerial.read();
val += char(ch);
delay(10);
}
Serial.println(val); // дублируем сообщение в терминал
//----------------------- detect of SMS comming
//определение факта приема СМС и сравнение номера(ов) с заданным(и)
if (val.indexOf("+CMT") > -1) { //если обнаружен СМС (для определения звонка вместо "+CMT" вписать "RING", трубку он не берет, но реагировать на факт звонка можно)
if (val.indexOf(MASTER) > -1) { //если СМС от хозяина
Serial.println("--- MASTER SMS DETECTED ---");
} else {
Serial.println("NO MASTER SMS");
}
//----------------------- search special word
// поиск кодового слова в СМС (вообще эту часть надо поместить внутрь предыдущей, но если использовать кодовое слово не совпадающее с сообщениями модема, то не обязательно)
if (val.indexOf("sendme") > -1) { // если обнаружено кодовое слово
Serial.println("send you ok"); // сообщаем об этом в терминал (если нужно)
sms("yes sir!", MASTER); // отвечаем смской
} else { // если другое слово или вообще пустое сообщение
Serial.println("no send you");
sms("no sir!", MASTER);
}
val = "";
}
}
}
void sms(String text, String phone) //процедура отправки СМС
{
Serial.println("SMS send started");
mySerial.println("AT+CMGS=\"" + phone + "\"");
delay(500);
mySerial.print(text);
delay(500);
mySerial.print((char)26);
delay(500);
Serial.println("SMS send complete");
delay(2000);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment