Created
April 30, 2017 21:25
-
-
Save xvoland/3269768238cfd91e9f9ba16b19513339 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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