Contr1
ControllerSetting1
EEPROMMemoryTreeRoot1
EEPROMMemoryChipTreeRoot1197524063
Tags1
Inputs1
Outputs1
Variables1
UserBlocks1
Communication1
-60@-63
LibraryRoot
LibraryGroup-Оформление
LibraryGroup-Базовые элементы
LibraryGroup-Триггеры
LibraryGroup-Таймеры
0@0
343
-80@-160
225
354
0@0
Groupinput
1
UserBlockLibraryRootNode
LibraryGroup-Блоки
LibraryGroup-Gsm
LibraryGroup-GSM_NEW 0.5.1b
LibraryGroup-GSM_NEW 0.6.1b
LibraryGroup-GSM_NEW 0.6b
0@-840
3
7
a9b49f52-7d3f-43a1-a34f-f01a1364a1a1
GSM модуль
2
4
150@70
170@70 corner: 280.0d@90
150@70 corner: 300.0d@90
175.0d@84.5d
GSM_SoftwareSerial
265e34be-0250-4ced-adfe-dc7ded9b1dc8
GSM_SoftwareSerial
Автор Слимпер
Работает только вместе с блоком GSM_Основной
Предназначен для перевода работы модуля GSM на порт SoftwareSerial
Кроме добавления этого блока необходимо в блоке GSM_Основной в параметре SERIAL_M прописать Serial_S
Параметры
RX, TX - номера пинов для подключения модуля при варианте SoftwareSerial, при использование аппаратных портов, значение роли не играет.
Ограничения при использовании SoftwareSerial
На платах Arduino Mega и Mega2560 некоторые выводы не поддерживают прерывания, возникающие при изменении уровня сигнала. В силу этого, на данных платах в качестве вывода RX могут использоваться только следующие выводы: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69).
На Arduino Leonardo некоторые выводы не поддерживают прерывания, возникающие при изменении уровня сигнала. Поэтому, на этой плате в качестве вывода RX могут использоваться только следующие выводы: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).
1006
RX
11
f55b25c3-4009-4624-b781-3402fd6f79e7
c5840656-6b2d-46f0-ae27-ac6a937eb8e8
TX
10
790ba25a-2b70-47ba-83e5-9472fb5438d6
989fc788-fdf9-48c4-b2bd-3dea4d4707b3
#include
<SoftwareSerial.h>
Serial_S
( RX , TX );
SoftwareSerial
110.0d
5
540@50
560@50 corner: 640@110
540@50 corner: 660@110
562.5d@64.5d
8
185
140@170
160@170 corner: 358.0d@390
140@170 corner: 378.0d@390
219.0d@185.0d
9
0@190
20@190 corner: 102.0d@210
0@190 corner: 122.0d@210
24@204.5d
122.0d@200
9.0d
74.0d
Отправка СМС
88a0c79c-64c7-49c8-8854-5d56d9bfde48
0@200
20@200
0.0d
102.0d@200
122.0d@200 corner: 122.0d@200
GSM_In_sms
140@200
160@200
In
733dcb6e-5b41-4cff-a699-c4c746c81d4c
25470667-0e8f-4848-9ae5-899d155b1a91
173dd596-248e-436d-8841-20975237a0db
if ( In == true)
{ // ключ нажат - вывод подтянут к высокому уровню сигнала
delay(100); // задержка для устранения дребезга контактов ключа
runnin = !runnin; // инвертирование переменной running
digitalWrite(LEDpin, runnin) ; // индикация светодиодом
}
314
pinMode(LEDpin, OUTPUT);
pinMode(switchPin, INPUT);
digitalWrite(switchPin, HIGH); // включить подтягивающий резистор
127
светодиод подключен к выводу 5
LEDpin
= 13;
int
ключ подключен к выводу 13, другой вывод подключен к земле
switchPin
= 2;
int
runnin
= false;
boolean
runnin1
= false;
boolean
e28b2991-30d8-41e9-87dd-641dccb0757a
140@190 corner: 160@210
6
0@210
20@210 corner: 123.0d@230
0@210 corner: 143.0d@230
24@224.5d
123.0d@210 corner: 143.0d@230
143.0d@220
95.0d
Номер мобильного
eee8f876-d261-417d-a49c-f24dd259fac3
admin
0@220
20@220
123.0d@220
140@220 corner: 140@220
GSM_Phone
140@220
160@220
Phone
adc49d19-4ee9-4037-9446-147f6c73ae10
2a0a1b31-924c-4588-b575-eeb9a9e99cf9
55e0ac92-10eb-433c-90d9-23f4b60c9a5e
Последняя разработка
if ( In == true)
{
digitalWrite(LED, HIGH) ;
Serial.print("AT+CMGS=\"");
Serial.print( Phone );
Serial.println("\"");
}
else {
digitalWrite(LED, LOW) ;
}
169
Serial.begin(9600);
pinMode(LED, OUTPUT);
44
LED
= 13;
int
ae3d23c4-4c67-497d-8c24-175c9c4f37af
140@210 corner: 160@230
18
0@230
20@230 corner: 107.0d@250
0@230 corner: 127.0d@250
24@244.5d
127.0d@240
79.0d
СМС на мобилу
13
a453471d-f5f3-4e51-a1b2-e1645ecbcf16
admin
0@240
20@240
107.0d@240
127.0d@240 corner: 127.0d@240
GSM_text
140@240
160@240
SIM 900
text
f0527995-7b55-4ee5-b390-efa6adaba935
08bc550c-64e3-4e3a-b14a-1e378cb3e358
a6ea1548-470b-4d48-bbd1-1e8cb1b2c223
SIM 900 Serial1
if ( In == true)
{
Serial1.print("AT + CMGS = \"");
delay(300);
Serial1.print( Phone );
delay(300);
Serial1.println("\"");
delay(300);
// Serial1.println( Text sms );
delay(300);
Serial1.println((char)26);
delay(300);
Serial1.println();
delay(300);
}
else {
digitalWrite(LED, LOW) ; // контрольный светодиод убрать
}
328
Serial1.begin(9600);
pinMode(LED, OUTPUT); //контрольный светодиод убрать
// настройка шилда
Serial1.print("AT+CMGF=1\r"); // устанавливает текстовый режим смс-сообщения
delay(300);
Serial1.print("AT+CLIP=1\r"); // устанавливает программный контроль потоком передачи данных
delay(300);
Serial1.print("AT+CSCS=\"GSM\"\r");
delay(300);
Serial1.println("AT+CNMI=1,2,2,1,0\r"); // Настройка вывода смс в консоль.
delay(500);
Serial1.print("ATS0=2\r"); // поднимать трубку после второго звонка
delay(500);
Serial1.print("AT+CMGD=1,4\r"); // Стираем Смс
delay(500);
// настройка шилда
672
контрольный светодиод убрать
LED
= 13;
int
fae71e77-4801-4518-a803-bb358809b408
140@230 corner: 160@250
GSM_Reject_call
140@260
160@260
m590 mega2560
In_sms
Reject_call
a131b89a-32b1-43b7-abc8-c9d1701fd391
Сброс звонка
7760b87d-d2b8-4192-a97f-ac059fd205a2
Net
a2d42309-5a06-48f2-a27d-221976f445c9
Подключен к сети
6875df1a-317b-40a9-ba3b-0920a48b80a1
dBm
87a64b62-2488-4116-b3c6-2229454e6d59
Уровень сигнала
375cee25-509e-4be0-882b-7192829c4f30
m590 mega2560 115200
отправка смс из строк 1-2-3
Намер телефона клиента
строка смс 1
text 1
394e2336-a382-47e0-bf1b-a826009b105f
строка смс 2
154f7805-6f31-49e3-b0a5-5185f3a7442e
text2
66a95e0d-5da0-4709-bb47-63019c1c9f0c
строка смс 3
578b7f00-0b31-4f34-b0b8-6950a45ed8ee
out
985669be-77bd-4edb-b9e4-5f276bb35f47
a9235eff-09cd-457f-b991-5f1e731f173e
9bc60d94-25b8-4547-afc9-f1e77fc816cf
// Отправляем смс
if ( In == true)
{
Serial1.print("AT + CMGS = \"");
delay(300);
Serial1.print( Phone );
delay(300);
Serial1.println("\"");
delay(300);
Serial1.println( text );
delay(300);
Serial1.println((char)26);
delay(300);
Serial1.println();
delay(300);
}
else {
digitalWrite(LED, LOW) ; // контрольный светодиод убрать
}
// Отправляем смс
// Принимаем смс
// if (Serial1.available() > 0)
// {
//
// out = Serial.read();
// }
470
контрольный светодиод убрать
LED
= 13;
int
3ce7ef08-920f-4bca-bde6-b62a8aca2d77
получено из смс
test
ea76600c-405e-417c-840d-75e17db13ddf
e8c13239-ab3d-4370-ab0e-600a2f38547a
22a40700-ca43-4380-9aca-cc7d793d3c10
SIM 900 Serial1 v1
// Отправляем смс
if ( In == true)
{
Serial1.print("AT + CMGS = \"");
delay(300);
Serial1.print( Phone );
delay(300);
Serial1.println("\"");
delay(300);
Serial1.println( text );
delay(300);
Serial1.println((char)26);
delay(300);
Serial1.println();
delay(300);
}
else {
}
// Отправляем смс
// Принимаем смс
if (!Serial1.available())
return;
char currSymb = Serial1.read();
test = currStr;
if ('\r' == currSymb) {
if (isStringMessage) {
// если текущая строка – сообщение, то…
out = currStr;
isStringMessage = false;
}
else {
if (currStr.startsWith("+CMT")) {
// если текущая строка начинается с "+CMT", то следующая сообщение
isStringMessage = true;
}
}
currStr = "";
} else if ('\n' != currSymb) {
currStr += String(currSymb);
}
810
pinMode(greenPin, OUTPUT);
pinMode(yellowPin, OUTPUT);
Serial1.begin(9600);
delay(3000);
// настройка шилда
Serial1.print("AT+CMGF=1\r"); // устанавливает текстовый режим смс-сообщения
delay(300);
Serial1.print("AT+CLIP=1\r"); // устанавливает программный контроль потоком передачи данных
delay(300);
Serial1.print("AT+CSCS=\"GSM\"\r");
delay(300);
Serial1.println("AT+CNMI=1,2,2,1,0\r"); // Настройка вывода смс в консоль.
delay(500);
Serial1.print("AT+IFC=1, 1\r"); //установка программного контроля потоком передачи данных
delay(300);
Serial1.print("ATS0=2\r"); // поднимать трубку после второго звонка
delay(500);
Serial1.print("AT+CMGD=1,4\r"); // Стираем Смс
delay(500);
// настройка шилда
813
для зеленого
greenPin
= 13;
int
для желтого светодиода
yellowPin
= 3;
int
если эта строка сообщение, то переменная примет значение True
currStr
= "";
String
isStringMessage
= false;
boolean
af20e311-815a-4313-ae83-81277007e616
SIM 900 Serial1 v2 test
// Отправляем смс
if ( In == true)
{
Serial1.print("AT + CMGS = \"");
delay(300);
Serial1.print( Phone );
delay(300);
Serial1.println("\"");
delay(300);
Serial1.println( text );
delay(300);
Serial1.println((char)26);
delay(300);
Serial1.println();
delay(300);
}
// Принимаем смс
if (!Serial1.available())
return;
char currSymb = Serial1.read();
if ('\r' == currSymb) {
if (isStringMessage) {
// если текущая строка – сообщение, то…
out = currStr;
isStringMessage = false; }
else {
if (currStr.startsWith("+CMT")) {
// если текущая строка начинается с "+CMT", то следующая сообщение
isStringMessage = true;
}
}
currStr = "";
} else if ('\n' != currSymb) {
currStr += String(currSymb);
}
754
Serial1.begin(9600);
delay(3000);
// настройка шилда
Serial1.print("AT+CMGF=1\r"); // устанавливает текстовый режим смс-сообщения
delay(300);
Serial1.print("AT+CLIP=1\r"); // устанавливает программный контроль потоком передачи данных
delay(300);
Serial1.print("AT+CSCS=\"GSM\"\r");
delay(300);
Serial1.println("AT+CNMI=1,2,2,1,0\r"); // Настройка вывода смс в консоль.
delay(500);
Serial1.print("AT+IFC=1, 1\r"); //установка программного контроля потоком передачи данных
delay(300);
Serial1.print("ATS0=2\r"); // поднимать трубку после второго звонка
delay(500);
Serial1.print("AT+CMGD=1,4\r"); // Стираем Смс
delay(500);
// настройка шилда
755
currStr
= "";
String
если эта строка сообщение, то переменная примет значение True
isStringMessage
= false;
boolean
text1
text2
text3
f2dcb62c-36ba-43e9-a876-19b570640a37
7d7b74cf-5c22-43e5-9aa9-be63b7eb8dc8
text4
f83142ba-6044-4479-a24d-2af24eb3d911
8dc3e42d-ca04-4258-a7ec-6fc6426a1bfe
text5
d2fa00a5-3627-4623-9df4-349bbf8ce582
7e75afa8-3398-4753-94f0-06f29a691a0f
text6
86a0d736-b9be-4159-8362-a2a3981e0e8e
5839b677-8b33-49cd-a54c-d33b1665fa34
text7
781f5089-d490-4569-ab92-98e80f51cbd9
7162c89a-e215-4e58-9bf5-4db5b9161900
Call
out_sms
300f1901-b539-4081-8262-df47b88dd60b
m590 mega2560 115200
скорость 115200
RX3 (15) в TX модема
TX3 (14) в RX модема
инфо http://flprog.ru/forum/18-642-2
94
if ( In_sms == true)
{
Serial3.print("AT + CMGS = \"");
delay(300);
Serial3.print( Phone );
delay(300);
Serial3.println("\"");
delay(300);
Serial3.println( text );
delay(1000);
Serial3.println( "\n" );
delay(300);
Serial3.println( text1 );
delay(1000);
Serial3.println( "\n" );
delay(300);
Serial3.println( text2 );
delay(1000);
Serial3.println( "\n" );
delay(300);
Serial3.println( text3 );
delay(1000);
Serial3.println( "\n" );
delay(300);
Serial3.println( text4 );
delay(1000);
Serial3.println( "\n" );
delay(300);
Serial3.println( text5 );
delay(1000);
Serial3.println( "\n" );
delay(300);
Serial3.println( text6 );
delay(1000);
Serial3.println( "\n" );
delay(300);
Serial3.println( text7 );
delay(1000);
Serial3.println((char)26);
delay(300);
Serial3.println();
delay(300);
}
if (!Serial3.available());
char currSymb = Serial3.read();
if ('\r' == currSymb) {
Call = currStr;
if (isStringMessage) {
out_sms = currStr;
isStringMessage = false; }
else {
if (currStr.startsWith("+CMT")) {
isStringMessage = true;
}
}
currStr = "";
} else if ('\n' != currSymb) {
currStr += String(currSymb);
}
1206
Serial3.begin(115200);
delay(20000);
Serial3.println("AT+CMGF=1\r");
delay(200);
Serial3.println("AT+CSCS=\"GSM\"\r");
delay(200);
Serial3.println("AT+CNMI=2,2\r");
delay(200);
Serial3.println("AT+CLIP=1\r");
delay(200);
220
currStr
= "";
String
isStringMessage
= false;
boolean
726d0829-22b4-4a18-ab02-10747e6080ea
84e909e3-5164-4e1f-bf01-5944fef622ee
b669819f-f009-4898-af17-a684f491f9ab
c7beb266-fe66-4df8-8a9a-85cc88f49dfa
1e18c0e3-6ef3-4dfb-803f-7ca7306262e0
text8
d6e7d474-7b13-47dd-9c76-8c5331d9b584
cdfecbcb-d30e-4b2a-a99a-b0901c5e5737
b414533e-70e8-440b-861f-5f82caf80eef
if ( In_sms == true)
{
Serial3.print("AT+CMGS=\"+");
delay(50);
Serial3.print(Phone);
delay(50);
Serial3.println("\"");
delay(50);
Serial3.println();
delay(50);
Serial3.println(text);
delay(50);
Serial3.println("\n");
delay(50);
Serial3.println(text1);
delay(50);
Serial3.println("\n");
delay(50);
Serial3.println(text2);
delay(50);
Serial3.println("\n");
delay(50);
Serial3.println(text3);
delay(50);
Serial3.println("\n");
delay(50);
Serial3.println(text4);
delay(50);
Serial3.println("\n");
delay(50);
Serial3.println(text5);
delay(50);
Serial3.println("\n");
delay(50);
Serial3.println(text6);
delay(50);
Serial3.println("\n");
delay(50);
Serial3.println(text7);
delay(50);
Serial3.println("\n");
delay(50);
Serial3.println(text8);
delay(50);
Serial3.println((char)26);
delay(50);
Serial3.println();
}
if (!Serial3.available());
char currSymb = Serial3.read();
if ('\r' == currSymb) {
Call = currStr;
if (isStringMessage) {
out_sms = currStr;
isStringMessage = false; }
else {
if (currStr.startsWith("+CMT")) {
isStringMessage = true;
}
}
currStr = "";
} else if ('\n' != currSymb) {
currStr += String(currSymb);
}
1156
Serial3.begin(115200);
delay(3000);
Serial3.println("AT+CMGF=1\r");
delay(50);
Serial3.println("AT+CSCS=\"GSM\"\r");
delay(50);
Serial3.println("AT+CNMI=2,2,0,0,0\r");
delay(50);
Serial3.println("AT+CLIP=1\r");
210
5a439fd2-7f2c-4639-b0e0-ffabbd6ea9c6
sms
78a799b0-71f7-4661-9d8a-d80ade578c5b
2b6a3685-b885-4e3a-9883-9a011aa7c5c3
ce94cb6c-3b56-40eb-bcf2-b1d9c2acf222
if ( In_sms == true)
{
Serial3.print("AT+CMGS=\"");
delay(50);
Serial3.print(Phone);
delay(50);
Serial3.println("\"");
delay(50);
Serial3.println();
delay(50);
Serial3.println(text);
delay(50);
Serial3.println("\n");
delay(50);
Serial3.println(text1);
delay(50);
Serial3.println("\n");
delay(50);
Serial3.println(text2);
delay(50);
Serial3.println("\n");
delay(50);
Serial3.println(text3);
delay(50);
Serial3.println("\n");
delay(50);
Serial3.println(text4);
delay(50);
Serial3.println("\n");
delay(50);
Serial3.println(text5);
delay(50);
Serial3.println("\n");
delay(50);
Serial3.println(text6);
delay(50);
Serial3.println("\n");
delay(50);
Serial3.println(text7);
delay(50);
Serial3.println("\n");
delay(50);
Serial3.println(text8);
delay(50);
Serial3.println((char)26);
delay(50);
Serial3.println();
}
if (!Serial3.available());
char currSymb = Serial3.read();
if ('\r' == currSymb) {
Call = currStr;
if (isStringMessage) {
out_sms = currStr;
isStringMessage = false;
sms =true; }
else {
if (currStr.startsWith("+CMT")) {
isStringMessage = true;
}
}
currStr = "";
} else if ('\n' != currSymb) {
currStr += String(currSymb);
sms = false;
}
1142
delay(2000);
Serial3.begin(115200);
delay(50);
Serial3.println("AT+CMGF=1\r");
delay(50);
Serial3.println("AT+CSCS=\"GSM\"\r");
delay(50);
Serial3.println("AT+CNMI=2,2,0,0,0\r");
delay(50);
Serial3.println("AT+CLIP=1\r");
delay(50);
232
Received_SMS
18039b27-cb01-4ce5-bd77-e8455fb0e496
Получена СМС
Текст СМС
T_Nomer
Номер с которого пришло СМС
Sent_SMS
1174c3e1-c5ae-46ca-bc4e-f32953816209
Отправлена СМС
d535058c-83fc-4da3-ae1a-7c562d9e8eae
ERROR
90a1f2ef-7628-4a3b-9476-873b328f1edf
Ошибка отправка СМС
2575f78c-25fc-401a-9ceb-eade206ea0e7
5534ccac-65c1-4b31-8bb9-483c15f3bd04
скорость 115200
RX3 (15) в TX модема
TX3 (14) в RX модема
инфо http://flprog.ru/forum/18-642-2
speed- скорость порта 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 бит/сек
ERROR :
0- норма;
1- неверный номер отправления;
2 - Ошибка при отрпвлении
3- Нет ответа от модуля при отправки сообщения
302
speed
115200
Скорость порта, см описание
f32f9e34-ce80-45b3-9050-077e33f7d03a
689d6ab0-dd41-41ef-920f-f8dd0336a9f8
DELL_SMS
Отчистка СМС
07cee270-f81f-488c-8574-bd5b26a650b5
b4aada34-d9f0-46b3-81af-c42ebc3b551d
Received_SMS =0;
Sent_SMS =0;
if ( In_sms ) { if (_trgrt1I) { _trgrt1 = 0;} else {_trgrt1 = 1; _trgrt1I = 1;} } else {_trgrt1 = 0; _trgrt1I = 0;};
if ( _trgrt1 && !Triger_)
{
if ( Phone.length() > 4) { Triger_=1; count_=0;}
else { ERROR =1; Triger_=0;}
}
if(Triger_)
{
if (return==1) {Triger_=0; ERROR =0; return=0; Sent_SMS =1;}
else if (return==2){Triger_=0; ERROR =2; return=0;}
if( millis() >=time1) {
time1 =millis() + 100;
switch ( count_ ) {
case 0:
Serial3.print("AT+CMGF=1\r");
break;
case 1:
Serial3.println("AT+CMGS=\"+ Phone +\"");
break;
case 2:
Serial3.println(text);
break;
case 3:
Serial3.println(text1);
break;
case 4:
Serial3.println(text2);
break;
case 5:
Serial3.println(text3);
break;
case 6:
Serial3.println(text4);
break;
case 7:
Serial3.println(text5);
break;
case 8:
Serial3.println(text6);
break;
case 9:
Serial3.println(text7);
break;
case 10:
Serial3.println(text8);
break;
case 11:
Serial3.println((char)26);
break;
case 12:
time1 =time1 + 4900;
break;
default:
Triger_=0;
ERROR =3;
}
count_++;
}
}
while(Serial3.available())
{
ch = Serial3.read();
if(ch == '\r') continue;
if(ch == '\n') { GotLineFromNeoway(line); line = ""; }
else
line += ch;
}
1364
delay(2000);
Serial3.begin( speed );
delay(50);
Serial3.println("AT+CMGF=1");
delay(50);
Serial3.println("AT+CSCS=\"GSM\"");
delay(50);
Serial3.println("AT+CNMI=2,2,0,0,0");
delay(50);
Serial3.println("AT+CLIP=1");
delay(50);
isStringMessage
= false;
boolean
Ответ модема на команду 1-OK 2-ERROR
return
=0;
byte
line
;
String
ch
;
char
time1
=0;
unsigned long
Triger_
= 0;
bool
count_
=0;
int
_trgrt1
= 0;
bool
_trgrt1I
= 0;
bool
ошибки 0-норма 1- неверный номер
err
=0;
byte
if (isStringMessage)
{
out_sms = line; //выводим текст сообщения
Received_SMS =true; // Импульс приход сообщения
isStringMessage = false;
}
if (line.startsWith(F("+CMT"))) // пришло СМС
{
//Получение номер телефона отправителя
int t1=line.indexOf("\"+");
T_Nomer=line.substring(t1+1,t1+13);
isStringMessage = true;
}
if (line == F("ERROR")) // ошибка
return=2;
if(line == F("OK")) // всё ок
return=1;
// Получили строку ответа от Neoway. Любые ответы приходят в виде
// либо одной, либо нескольких строк, так что единица, которой мы должны
// оперировать - именно строка
589
void
GotLineFromNeoway
const String&
line
Text_sms
Ошибка
Call
1bddc233-0f62-460d-8695-120adebe04e8
Входящий вызов
bae63d59-68bd-4419-acb3-1c4808c819e6
51d90042-7a76-4e4d-aff5-88f543961e95
m590 mega2560_Т2
инфо http://flprog.ru/forum/18-642-2
RX3 (15) в TX модема
TX3 (14) в RX модема
speed- скорость порта 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 бит/сек
Входы
In_sms- отправляет СМС по переднему фронту, если блок не занят предыдущей операцией
Phone - номер телефона на который будет отправляется СМС в формате +7хххххххххх
text - данные которые будут отправлены в СМС
Выходы
Received_SMS - импульс в один программный цикл, при получении СМС
Sent_SMS - импульс в один программный цикл, при удачной оправки СМС
Text_sms - Строка содержащая текст СМС
T_Nomer - Строка содержащая номер отправителя СМС
ERROR : Код ошибки, появляется только на 1 програмный цикл
0- норма;
1 - Ошибка в ответ на команду
2 - Нет ответа от модуля при отправки команды
3 - недопустимый номер для отправки СМС
796
16e12fff-4256-4d68-b8a2-5a4d17930a64
Time_wait
2000
Время ожидание ответа модуля, мс
b83e41f8-5061-49f7-8ae0-d3fa683da2b0
1236d93b-73c6-4e26-a38c-fca5f3630a9d
Time_Net
30000
Период проверки связи с сетью, мс
19320255-4a11-446a-8be1-c2e745fb9fb1
03376554-1469-40d2-af28-6c264ae6c7e2
Received_SMS =0; //Сброс статутса СМС Принята
Sent_SMS =0; //Сброс статуса СМС Отправлена
ERROR =0; //Сбром ошибки
while(Serial3.available()) //Получаем данные с модема
{
ch = Serial3.read();
if(ch == '\r') continue;
if(ch == '\n') { GotLineFromNeoway(line); line = ""; }
else line += ch;
}
//---Отправка СМС--
if ( In_sms ) { if (_trgrt1I) { _trgrt1 = 0;} else {_trgrt1 = 1; _trgrt1I = 1;} } else {_trgrt1 = 0; _trgrt1I = 0;};
if (_trgrt1 ) s_sms=1;
if ( s_sms && !busy) //можно ли отправлять СМС
{
s_sms=0;
if ( Phone.length() > 4) { Triger_=1; busy=1;} //проверка корректности номера
else(ERROR =3;)
}
if(Triger_)
{
if (sms_sent()){ Triger_=0; busy=0; }
}
//Авто проверка связи
if( (Time_Net >0)&&!busy)
{
if((millis()-time_n)> Time_Net){time_n=millis(); busy=1; Net_T=1;}
}
if(Net_T)
{
if (net_status()){ Net_T=0; busy=0; }
}
//Обработка входящего вызова
if (isRing) {busy=1; Call =1;}
if ( Reject_call ) { if (_trgrt2I) { _trgrt2 = 0;} else {_trgrt2 = 1; _trgrt2I = 1;} } else {_trgrt2 = 0; _trgrt2I = 0;};
if(Call) {if (incoming_call()){ Call =0; busy=0; }}
if(Call&&_trgrt2) {AT("ATH");}
1134
delay(2000); //пауза на включение модуля
Serial3.begin( speed );
delay(50);
Serial3.println("AT+CMGF=1");
delay(50);
Serial3.println("AT+CSCS=\"GSM\"");
delay(50);
Serial3.println("AT+CNMI=2,2,0,0,0");
delay(50);
Serial3.println("AT+CLIP=1");
delay(50);
254
isStringMessage
= false;
bool
final
=0;
bool
ожидание ответа от модуля
wait
=0;
bool
Ответ модема на команду 1-OK 2-ERROR
M_return
=0;
byte
line
;
String
Ответ модуля на команду
reply
;
String
ch
;
char
Время посылки команды
time1
=0;
unsigned long
Время последнего опроса связи с сетью.
time_n
=0;
unsigned long
Triger_
= 0;
bool
count_
=0;
int
_trgrt1
= 0;
bool
_trgrt1I
= 0;
bool
_trgrt2
= 0;
bool
_trgrt2I
= 0;
bool
Net_T
=0;
bool
isRing
=0;
bool
s_sms
=0;
bool
идет запрос, запрет других операций.
busy
=0;
bool
M_return=3;
if (isStringMessage)
{
Text_sms = line; //выводим текст сообщения
Received_SMS =true; // Импульс приход сообщения
isStringMessage = false;
}
if (line.startsWith(F("+CMT"))) // пришло СМС
{
//Получение номер телефона отправителя
int t1=line.indexOf("\"+");
int t2=line.indexOf("\"",(t1+1));
if((t1>0)&&(t2>0)) T_Nomer=line.substring(t1+1,t2);
else T_Nomer="";
isStringMessage = true;
}
if (line == F("RING")) isRing=1; //Всходящий звонок
if (line == F("ERROR")) // ошибка
M_return=2;
if(line == F("OK")) // всё ок
M_return=1;
if(M_return==3)reply=line;
// Получили строку ответа от Neoway. Любые ответы приходят в виде
// либо одной, либо нескольких строк, так что единица, которой мы должны
// оперировать - именно строка
// F("") -Хранить строку в Флеш памяти
bool st=0;
byte ret;
switch ( count_ ) {
case 0:
ret=AT("AT+CMGF=1\r",1);
if(ret==1) count_++;
else if(ret==2) st=1;
break;
case 1:
ret=AT("AT+CMGS=\""+ Phone +"\"\r" + text + (char)26, 2);
if(ret==1) count_++;
else if(ret==2) st=1;
break;
default:
Sent_SMS =1;
st=1;
}
if (st)count_=0;
return st;
315
bool
sms_sent
byte ret=0;
if(wait)
{
switch (M_return) {
case 1:
M_return=0;
ret=1;
break;
case 2:
M_return=0;
ERROR =1;
ret=2;
break;
case 3:
M_return=0;
ret=3;
break;
}
if(millis()>time1){ERROR=2; ret=2;}
}
else
{
time1 =millis() + Time_wait;
wait=1;
if(tip==1) Serial3.print(text);
else if(tip==2) Serial3.println(text);
}
}
return ret;
368
byte
AT
String
text
byte
tip
bool st=0;
byte ret;
switch ( count_ ) {
case 0:
ret=AT("AT+CREG?",2);
if(ret==1) count_++;
else if(ret==2) st=1;
else if(ret==3)
{
if (reply == F("+CREG: 0,1")) Net =1;
else Net =0;
}
break;
case 1:
ret=AT("AT+CSQ", 2);
if(ret==1) count_++;
else if(ret==2) st=1;
else if(ret==3)
{
if (reply.startsWith(F("+CSQ:"))
{
int t1=line.indexOf(":");
if(t1>-1) dBm =( ( (line.substring(t1+1,t1+3) ).toInt())*(2) );
if(dBm>0) dBm=-120; //нет сети
}
break;
default:
st=1;
}
if (st)count_=0;
return st;
544
bool
net_status
bool st=0;
switch (M_return) {
case 1:
M_return=0;
st=1;
break;
case 2:
M_return=0;
ERROR =1;
st=1;
break;
case 3:
M_return=0;
if (reply.startsWith(F("+CLIP:"))
{
int t1=line.indexOf("\"7");
int t2=line.indexOf("\"",(t1+1));
if((t1>0)&&(t2>0)) T_Nomer=line.substring(t1+1,t2);
else T_Nomer="";
}
if (reply == F("NO CARRIER")) st=1;
}
if(ret==1) count_++;
else if(ret==2)
else if(ret==3)
{
if (reply == F("+CREG: 0,1")) Net =1;
else Net =0;
}
break;
case 1:
ret=AT("AT+CSQ", 2);
if(ret==1) count_++;
else if(ret==2) st=1;
else if(ret==3)
{
if (reply.startsWith(F("+CSQ:"))
{
int t1=line.indexOf(":");
if(t1>-1) dBm =( ( (line.substring(t1+1,t1+3) ).toInt())*(2) );
if(dBm>0) dBm=-120; //нет сети
}
break;
default:
st=1;
}
return st;
if(millis()>time1){ERROR=2; ret=2;}
}
else
884
bool
incoming_call
4429c943-1cc9-4540-bda4-c520defcda3d
140@250 corner: 160@270
GSM_start
51.0d
358.0d@200
378.0d@200
Get_Balance
933e1a73-f90e-4922-a024-e7f8ae08cff2
Запрос баланса
0e66f15d-c493-46f9-9441-ebf06db3217a
Error_Code
bc84d102-ca7a-4b18-9805-5166f55a9107
Number_calls
bb5716b0-2334-4309-9215-72ead220c33b
Номер текущего гудка
213e77f7-84ed-4fe6-899e-b01d1d0eb571
202aced0-0626-4389-b3d2-41e2fc6408a1
инфо http://flprog.ru/forum/18-642-2
RX3 (15) в TX модема
TX3 (14) в RX модема
Параметры
speed- скорость порта 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 бит/сек
Time_wait - время ожидание ответа (в мс), в случаи его превышения Error_Code=2
Time_Net - Период опроса модуля на связь с сетью, мс 0-опрос отключен.
Входы
In_sms- отправляет СМС по переднему фронту, если блок не занят предыдущей операцией
Phone - номер телефона на который будет отправляется СМС в формате +7хххххххххх
text - данные которые будут отправлены в СМС
Reject_call - по переднему фронту сбрасывает входящий вызов (отбой)
Выходы
Net - регистрация :1 - модуль зарегистрирован в домашней сети, 0-нет
dBm - уровень сигнал (-120 уровень не известен)
Received_SMS - импульс в один программный цикл, при получении СМС
Sent_SMS - импульс в один программный цикл, при удачной оправки СМС
Text_sms - Строка содержащая текст СМС
T_Nomer - Строка содержащая номер отправителя СМС (входящего вызова, при входящем вызове номер без +)
Call - пока идет входящий вызов 1 на выходе
Error_Code : Код ошибки, появляется только на 1 программный цикл
0- норма;
1 - Ошибка в ответ на команду
2 - Нет ответа от модуля при отправки команды
3 - недопустимый номер для отправки СМС
1245
69fc39f5-2c9b-4937-8e5b-fdf42810d8a1
20000
89378369-f9fc-4a14-816f-f17193042731
60000
delay(5000);//тест удалить
Received_SMS =0; //Сброс статутса СМС Принята
Sent_SMS =0; //Сброс статуса СМС Отправлена
Error_Code =0; //Сбром ошибки
reply=""; //Сброс содержимого прошлого ответа модуля
while(Serial3.available()) //Получаем данные с модема
{
ch = Serial3.read();
if(ch == '\r') continue;
if(ch == '\n') { GotLineFromNeoway(); line = ""; }
else line += ch;
}
if (Call&&(team_room!=1) )
{
team_room==1;
count_=0; wait=0; //Сброс состояний обработки других функций
Number_calls=0; //сброс числа гудков
}
if ( In_sms ) { if (_trgrt1I) { _trgrt1 = 0;} else {_trgrt1 = 1; _trgrt1I = 1;} } else {_trgrt1 = 0; _trgrt1I = 0;}; //импульс на отправку смс
if (_trgrt1 ) s_sms=1;
if ( s_sms && (team_room==0) ) // начинать ли оптраву смс
{
s_sms=0;
if ( Phone.length() > 4) {team_room=2;} //проверка корректности номера
else Error_Code =3;
}
if ((Time_Net >0)&&(team_room==0)) //проверять ли статутс сети
{
if((millis()-time_n)> Time_Net){time_n=millis(); team_room=3;}
}
if ( Reject_call ) { if (_trgrt2I) { _trgrt2 = 0;} else {_trgrt2 = 1; _trgrt2I = 1;} } else {_trgrt2 = 0; _trgrt2I = 0;}; //импульс на сброс вызова
switch ( team_room ) {
case 1:
if(_trgrt2) Call_T=1;
if(Call_T&&AT_Command("ATH0",2)){Call_T=0; final =1; Call=0; }
break;
case 2:
if (sms_sent()){ final =1; } // отправка сообщения
break;
case 3:
if (net_status()){ final =1;}// проверка связи с сетью
break;
if (final)team_room=0; //должно быть последним
1482
delay(2000); //пауза на включение модуля
Serial3.begin( speed );
delay(50);
Serial3.println("AT+CMGF=1");
delay(50);
Serial3.println("AT+CSCS=\"GSM\"");
delay(50);
Serial3.println("AT+CNMI=2,2,0,0,0");
delay(50);
Serial3.println("AT+CLIP=1");
delay(50);
Serial3.println("ATE0");
delay(50);
290
isStringMessage
= false;
bool
final
=0;
bool
ожидание ответа от модуля
wait
=0;
bool
Ответ модема на команду 1-OK 2-ERROR
M_return
=0;
byte
Номер исполняемой команды
team_room
=0;
byte
line
;
String
Ответ модуля на команду
reply
;
String
ch
;
char
Время посылки команды
time1
=0;
unsigned long
Время последнего опроса связи с сетью.
time_n
=0;
unsigned long
Triger_
= 0;
bool
count_
=0;
int
_trgrt1
= 0;
bool
_trgrt1I
= 0;
bool
_trgrt2
= 0;
bool
_trgrt2I
= 0;
bool
Call_T
=0;
bool
Net_T
=0;
bool
isRing
=0;
bool
s_sms
=0;
bool
идет запрос, запрет других операций.
busy
=0;
bool
Serial.println(line); //!!!!!!! Убрать
//Обработка СМС
if (isStringMessage)
{
Text_sms = line; //выводим текст сообщения
Received_SMS =true; // Импульс приход сообщения
isStringMessage = false;
}
if (line.startsWith(F("+CMT"))) // пришло СМС
{
//Получение номер телефона отправителя
int t1=line.indexOf("\"+");
int t2=line.indexOf("\"",(t1+1));
if((t1>0)&&(t2>0)) T_Nomer=line.substring(t1+1,t2);
else T_Nomer="";
isStringMessage = true;
}
//______
// Обработка входящих вызовов
if (line == F("RING")){ Call =1; Number_calls ++;}//Всходящий звонок
if (Call==1)
{
if (line.startsWith(F("+CLIP"))) //Определение номера звонящего
{
int t1=line.indexOf("\"7");
int t2=line.indexOf("\"",(t1+1));
if((t1>0)&&(t2>0)) T_Nomer=line.substring(t1+1,t2);
else T_Nomer="";
}
if (line == F("NO CARRIER")) { Call=0;}
}
//____
reply=line;
// Получили строку ответа от Neoway. Любые ответы приходят в виде
// либо одной, либо нескольких строк, так что единица, которой мы должны
// оперировать - именно строка
// F("") -Хранить строку в Флеш памяти
1086
void
GotLineFromNeoway
bool st=0;
byte ret=0;
switch ( count_ ) {
case 0:
ret=AT_Command("AT+CMGF=1\r",1);
if(ret==1) count_++;
else if(ret==2) st=1;
break;
case 1:
ret=AT_Command("AT+CMGS=\""+ Phone +"\"\r" + text + (char)26, 2);
if(ret==1) {Sent_SMS =1; st=1;}
else if(ret==2) st=1;
break;
}
if (st){count_=0; }
return st;
317
// tip 1- без \r и \n
// tip 2- с \r и \n
byte ret=0;
if(wait)
{
if(reply == F("OK"))
{ ret=1; wait=0; }
else if(reply == F("ERROR"))
{ Error_Code =1; ret=2; wait=0; }
if(millis()>time1)
{Error_Code=2; ret=2; wait=0;}
}
else
{
time1 =millis() + Time_wait;
wait=1;
if(tip==1) Serial3.print(text_com);
else if(tip==2) Serial3.println(text_com);
}
return ret;
380
byte
AT_Command
String
text_com
byte
tip
bool st=0;
byte ret=0;
switch ( count_ ) {
case 0:
ret=AT_Command("AT+CREG?",2);
if(ret==1) count_++;
else if(ret==2) st=1;
else if(ret==3)
{
if (reply == F("+CREG: 0,1")) Net =1;
else Net =0;
reply=""; wait=0;
}
break;
case 1:
ret=AT_Command("AT+CSQ", 2);
if(ret==1) count_++;
else if(ret==2) st=1;
else if(ret==3)
{
if (reply.startsWith(F("+CSQ:")))
{
int t1=reply.indexOf(": ");
if(t1>-1) dBm =(( ( (reply.substring(t1+2,t1+4) ).toInt())*(2) )-(113));
if(dBm>0) dBm=-120; //нет сети
reply=""; wait=0;
}
}
break;
case 2:
st=1;
break;
}
if (st)count_=0;
return st;
642
// tip 1- без \r и \n
// tip 2- с \r и \n
byte ret=0;
if(wait)
{
if(reply.startsWith(response_com))
{ret=3;}
else if(reply == F("ERROR"))
{ Error_Code =1; ret=2; wait=0; }
else if(reply == F("OK"))
{ ret=1; wait=0; }
if(millis()>time1)
{Error_Code=2; ret=2; wait=0;}
}
else
{
time1 =millis() + Time_wait;
wait=1;
if(tip==1) Serial3.print(text_com);
else if(tip==2) Serial3.println(text_com);
}
return ret;
434
byte
AT_Command
String
text_com
byte
tip
String
response_com
Balance
0a59f7bd-e80f-4fab-863f-b25df021e23a
Баланс на Sim
bb2c1ffd-ef1d-4a59-90f6-ca709fa9e70a
f2a4bf19-ff62-4760-8e07-c9e05d8fc91c
инфо http://flprog.ru/forum/18-642-2
RX3 (15) в TX модема
TX3 (14) в RX модема
Параметры
speed- скорость порта 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 бит/сек
Time_wait - время ожидание ответа (в мс), в случаи его превышения Error_Code=2
Time_Net - Период опроса модуля на связь с сетью, мс 0-опрос отключен.
Входы
In_sms- отправляет СМС по переднему фронту, если блок не занят предыдущей операцией
Phone - номер телефона на который будет отправляется СМС в формате +7хххххххххх
text - данные которые будут отправлены в СМС
Reject_call - по переднему фронту сбрасывает входящий вызов (отбой)
Get_Balance - по переднему фронту отправляется запрос на балланс
Выходы
Net - регистрация :1 - модуль зарегистрирован в домашней сети, 0-нет
dBm - уровень сигнал (-120 уровень не известен)
Received_SMS - импульс в один программный цикл, при получении СМС
Sent_SMS - импульс в один программный цикл, при удачной оправки СМС
Text_sms - Строка содержащая текст СМС
T_Nomer - Строка содержащая номер отправителя СМС (входящего вызова, при входящем вызове номер без +)
Call - пока идет входящий вызов 1 на выходе
Balance - остаток средств м
Error_Code : Код ошибки, появляется только на 1 программный цикл
0- норма;
1 - Ошибка в ответ на команду
2 - Нет ответа от модуля при отправки команды
3 - Неверный ответ
10 - недопустимый номер для отправки СМС
1360
delay(500);//Тест удалить
Received_SMS =0; //Сброс статутса СМС Принята
Sent_SMS =0; //Сброс статуса СМС Отправлена
Error_Code =0; //Сбром ошибки
reply=""; //Сброс содержимого прошлого ответа модуля
while(Serial3.available()) //Получаем данные с модема
{
ch = Serial3.read();
if(ch == '\r') continue;
if(ch == '\n') { GotLineFromNeoway(); line = ""; }
else line += ch;
}
if (Call&&(team_room!=1) )
{
team_room=1;
count_=0; //Сброс состояний обработки других функций
Number_calls=0; //сброс числа гудков
}
if ( In_sms ) { if (_trgrt1I) { _trgrt1 = 0;} else {_trgrt1 = 1; _trgrt1I = 1;} } else {_trgrt1 = 0; _trgrt1I = 0;}; //импульс на отправку смс
if (_trgrt1 ) s_sms=1;
if ( s_sms && (team_room==0) ) // начинать ли отправу смс
{
s_sms=0;
if ( Phone.length() > 4) {team_room=2;} //проверка корректности номера
else Error_Code =10;
}
if ((Time_Net >0)&&(team_room==0)) //проверять ли статутс сети
{
if((millis()-time_n)> Time_Net){time_n=millis(); team_room=3;}
}
if ( Reject_call ) { if (_trgrt2I) { _trgrt2 = 0;} else {_trgrt2 = 1; _trgrt2I = 1;} } else {_trgrt2 = 0; _trgrt2I = 0;}; //импульс на сброс вызова
//Запрос баланса
if ( Get_Balance ) { if (_trgrt3I) { _trgrt3 = 0;} else {_trgrt3 = 1; _trgrt3I = 1;} } else {_trgrt3 = 0; _trgrt3I = 0;};
if (_trgrt3 ) Bal_T=1;
if ( Bal_T && (team_room==0) ) // начинать запрос баланса
{Bal_T=0; team_room=4;}
switch ( team_room ) {
case 1:
if(_trgrt2) {Call_T=1; AT_Command("ATH0",2);}
if(Call_T&& (AT_Answer("")==1) ){Call=0; }
if (!Call) {Call_T=0; final =1;}
break;
case 2:
if (sms_sent()){ final =1; } // отправка сообщения
break;
case 3:
if (net_status()){ final =1;}// проверка связи с сетью
break;
case 4:
if ( balance_S() ){ final =1;}// запрос баланса
break;
}
if (final){team_room=0; final=0;} //должно быть последним
1837
Buffer
[5] ;
String
index_buffer
=0;
byte
isStringMessage
= false;
bool
final
=0;
bool
Номер исполняемой команды
team_room
=0;
byte
line
;
String
Ответ модуля на команду
reply
;
String
ch
;
char
Время посылки команды
time1
=0;
unsigned long
Время последнего опроса связи с сетью.
time_n
=0;
unsigned long
Triger_
= 0;
bool
count_
=0;
int
_trgrt1
= 0;
bool
_trgrt1I
= 0;
bool
_trgrt2
= 0;
bool
_trgrt2I
= 0;
bool
_trgrt3
= 0;
bool
_trgrt3I
= 0;
bool
Call_T
=0;
bool
Net_T
=0;
bool
s_sms
=0;
bool
Bal_T
=0;
bool
bool isRing=0;
bool busy=0; //идет запрос, запрет других операций.
bool wait=0; //ожидание ответа от модуля
byte M_return=0; // Ответ модема на команду 1-OK 2-ERROR
if (line.length()>0)
{
Buffer[index_buffer]=line;
if(index_buffer<3) index_buffer++;
}
//Обработка входящих СМС
if (isStringMessage)
{
Text_sms = line; //выводим текст сообщения
Received_SMS =true; // Импульс приход сообщения
isStringMessage = false;
}
if (line.startsWith(F("+CMT"))) // пришло СМС
{
//Получение номер телефона отправителя
int t1=line.indexOf("\"+");
int t2=line.indexOf("\"",(t1+1));
if((t1>0)&&(t2>0)) T_Nomer=line.substring(t1+1,t2);
else T_Nomer="";
isStringMessage = true;
}
//______
// Обработка входящих вызовов
if (line == F("RING")){ Call =1; Number_calls ++;}//Всходящий звонок
if (Call==1)
{
if (line.startsWith(F("+CLIP"))) //Определение номера звонящего
{
int t1=line.indexOf("\"7");
int t2=line.indexOf("\"",(t1+1));
if((t1>0)&&(t2>0)) T_Nomer=line.substring(t1+1,t2);
else T_Nomer="";
}
if (line == F("NO CARRIER")) { Call=0; }
}
//____
// Получили строку ответа от Neoway. Любые ответы приходят в виде
// либо одной, либо нескольких строк, так что единица, которой мы должны
// оперировать - именно строка
// F("") -Хранить строку в Флеш памяти
1135
// tip 1- без \r и \n
// tip 2- с \r и \n
time1 =millis() + Time_wait;
if(tip==1) Serial3.print(text_com);
else if(tip==2) Serial3.println(text_com);
154
void
AT_Command
String
text_com
byte
tip
byte ret=0;
bool ok_=0;
bool ok_2=0;
if (index_buffer>0)
{
for (int i =(index_buffer-1); i >=0 ; i--)
{
if(Buffer[i] == F("ERROR")){ret=2; Error_Code =1; break;}
if(Buffer[i] == F("OK")){ ok_=1; continue; }
if (response_com.length()>0)
{ if(Buffer[i].startsWith(response_com)){ok_2=1; reply=Buffer[i];} }
}
}
if(ok_)ret=1;
if (response_com.length()>0 && !ok_2 ) {ret=2; Error_Code =3;}
if(millis()>time1)
{Error_Code=2; ret=2; }
return ret;
463
byte
AT_Answer
String
response_com
bool st=0;
byte ret=0;
switch ( count_ ) {
case 0:
AT_Command("AT+CREG?",2);
count_++;
break;
case 1:
ret=AT_Answer("+CREG");
if(ret==1)
{
count_++;
if (reply == F("+CREG: 0,1"))Net =1;
else Net =0;
}
else if(ret==2) st=1;
break;
case 2:
AT_Command("AT+CSQ" ,2 ) ;
count_++;
break;
case 3:
ret=AT_Answer("+CSQ");
if(ret==1)
{
st=1;
int t1=reply.indexOf(": ");
if(t1>-1) dBm =(( ( (reply.substring(t1+2,t1+4) ).toInt())*(2) )-(113));
if( dBmt >0) dBm =-120; //нет сети
}
else if(ret==2) st=1;
break;
}
if (st)count_=0;
return st;
592
bool
net_status
bool st=0;
byte ret=0;
switch ( count_ ) {
case 0:
AT_Command("AT+CMGF=1",2);
count_++;
break;
case 1:
ret=AT_Answer("");
if(ret==1) {count_++;}
else if(ret==2) st=1;
break;
case 2:
AT_Command("AT+CMGS=\""+ Phone +"\"\r",1 );
AT_Command( text+(char)26 ,2 );
count_++;
break;
case 3:
ret=AT_Answer("");
if(ret==1) {Sent_SMS =1; st=1;}
else if(ret==2) st=1;
break;
}
if (st){count_=0; }
return st;
424
bool
sms_sent
bool st=0;
byte ret=0;
switch ( count_ ) {
case 0:
AT_Command("ATD#100#",2 ) ;
count_++;
break;
case 1:
ret=AT_Answer("+CUSD");
if(ret==1)
{
st=1;
int t1=reply.indexOf(":",reply.indexOf("\""));
iif(t1>-1)nt t2=reply.indexOf(",",t1);
if(t1>-1&&t2>-1) Balance = (reply.substring(t2+1,t3+3)).toFloat();
}
else if(ret==2) st=1;
break;
}
if (st)count_=0;
return st;
400
bool
balance_S
Get_USSD
USSD_CODE
38590813-5522-4717-89bf-668832b33791
b8c6eec4-ddb3-416b-a9f6-6735425c4160
Operator
24231129-7540-4a4c-b6e4-3dc2fb895ab3
Оператор связи
5cc973ee-0b24-4273-8534-db222aa743e3
09e5b079-047f-4218-b4e0-5b53c5622692
m590 mega2560_ТN4
инфо http://flprog.ru/forum/18-642-2
RX3 (15) в TX модема
TX3 (14) в RX модема
Параметры
speed- скорость порта 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 бит/сек
Time_wait - время ожидание ответа (в мс), в случаи его превышения Error_Code=2
Time_Net - Период опроса модуля на связь с сетью, мс 0-опрос отключен.
Входы
In_sms- отправляет СМС по переднему фронту, если блок не занят предыдущей операцией
Phone - номер телефона на который будет отправляется СМС в формате +7хххххххххх
text - данные которые будут отправлены в СМС
Reject_call - по переднему фронту сбрасывает входящий вызов (отбой)
Get_Balance - по переднему фронту отправляется запрос на балланс номера
Выходы
Net - регистрация :1 - модуль зарегистрирован в домашней сети, 0-нет
dBm - уровень сигнал (-120 уровень не известен)
Received_SMS - импульс в один программный цикл, при получении СМС
Sent_SMS - импульс в один программный цикл, при удачной оправки СМС
Text_sms - Строка содержащая текст СМС
T_Nomer - Строка содержащая номер отправителя СМС (входящего вызова, при входящем вызове номер без +)
Call - пока идет входящий вызов 1 на выходе
Number_calls - номер текущего гудка, сбрасывается поле заервшение текущего и постепления нового звонка.
Balance - остаток средств на номере
Error_Code : Код ошибки, появляется только на 1 программный цикл
0- норма;
1 - Ошибка в ответ на команду
2 - Нет ответа от модуля при отправки команды
3 - Неверный ответ
4 - модуль не готов
5 - нет регистрации в сети
10 - недопустимый номер для отправки СМС
1526
return_AT_2=0;
Received_SMS =0; //Сброс статутса СМС Принята
Sent_SMS =0; //Сброс статуса СМС Отправлена
//Error_Code =0; //Сброc ошибки
reply=""; //Сброс содержимого прошлого ответа модуля
T_millis =millis();
if (Serial3.available()||wait_Serial){
if (!wait_Serial){wait_Serial=1; time_Serial=T_millis+200;}
if (T_millis >time_Serial)//ожидаем полного получения команды
{wait_Serial=0;
while(Serial3.available()) //Получаем данные с модема
{ch = Serial3.read();
if(ch == '\r') continue;
if(ch == '\n') { GotLineFromNeoway(); line = ""; }
else line += ch;}
}
}
if (wait)//ожиание ответа на команду
{
if(line.length()>0){if(line ==response_com) wait=0; response_com="";}
if(T_millis>time1) {Error_Code=2; err=1;}}
if(err){
err=0;
if (team_room==3)
{switch ( count_ ){
case 1:
Net =0;
break;
case 3:
dBm =-120; //нет сети
break;
case 5:
Operator="";
break;}
}
wait=0; count_=0; team_room=0; response_com="";}
if (Call&&(team_room!=1) )
{
team_room=1;
count_=0; //Сброс состояний обработки других функций
Number_calls=1; //сброс числа гудков
}
if ( In_sms ) { if (_trgrt1I) { _trgrt1 = 0;} else {_trgrt1 = 1; _trgrt1I = 1;} } else {_trgrt1 = 0; _trgrt1I = 0;}; //импульс на отправку смс
if (_trgrt1 ) s_sms=1;
if ( s_sms && (team_room==0) ) // начинать ли отправу смс
{
s_sms=0;
if ( Phone.length() > 4) {team_room=2;} //проверка корректности номера
else Error_Code =10;
}
if ((Time_Net >0)&&(team_room==0)) //проверять ли статутс сети
{
if((T_millis-time_n)> Time_Net){time_n=T_millis; team_room=3;}
}
if ( Reject_call ) { if (_trgrt2I) { _trgrt2 = 0;} else {_trgrt2 = 1; _trgrt2I = 1;} } else {_trgrt2 = 0; _trgrt2I = 0;}; //импульс на сброс вызова
//Запрос баланса
if ( Get_Balance ) { if (_trgrt3I) { _trgrt3 = 0;} else {_trgrt3 = 1; _trgrt3I = 1;} } else {_trgrt3 = 0; _trgrt3I = 0;};
if (_trgrt3 ) Bal_T=1;
if ( Bal_T && (team_room==0) ) // начинать запрос баланса
{Bal_T=0; team_room=4;}
switch ( team_room ) {
case 1:
if(_trgrt2) {Call_T=1; AT_Command("ATH0",2);}
if(Call_T&& return_AT_2 ){Call=0; count_=0; }
if (!Call) {Call_T=0; final =1; T_Nomer ="";}
break;
case 2:
if (!wait){ if (sms_sent()){ final =1; }} // отправка сообщения
break;
case 3:
if (!wait){if (net_status()){ final =1;}}// проверка связи с сетью
break;
case 4:
if (!wait){if ( balance_S() ){ final =1;}}// запрос баланса
break;
}
if (final){team_room=0; final=0;} //должно быть последним
2482
ttttt
=1;
bool
isStringMessage
= false;
bool
final
=0;
bool
wait
=0;
bool
err
=0;
bool
return_AT_2
=0;
bool
_trgrt1
= 0;
bool
_trgrt1I
= 0;
bool
_trgrt2
= 0;
bool
_trgrt2I
= 0;
bool
_trgrt3
= 0;
bool
_trgrt3I
= 0;
bool
Call_T
=0;
bool
Net_T
=0;
bool
s_sms
=0;
bool
Bal_T
=0;
bool
Triger_
= 0;
bool
wait_Serial
=0;
bool
ch
;
char
Номер исполняемой команды
team_room
=0;
byte
count_
=0;
int
Время посылки команды
time1
=0;
unsigned long
Время посылки команды
T_millis
=0;
unsigned long
Время ожидания приема команды
time_Serial
=0;
unsigned long
Время последнего опроса связи с сетью.
time_n
=0;
unsigned long
line
;
String
Ответ модуля на команду
reply
;
String
ожидаемый ответ
response_com
="";
String
if (line.length()>0)
{
if(line == F("ERROR")){ Error_Code =1; err=1; }
else if(line == F("OK")){ return_AT_2=1; wait=0; response_com=""; }
else if (response_com.length()>0){
if(line.startsWith(response_com)){reply=line;}
else {Error_Code =3; err=1;} }
//Обработка входящих СМС
if (isStringMessage)
{
Text_sms = line; //выводим текст сообщения
Received_SMS =true; // Импульс приход сообщения
isStringMessage = false;
}
if (line.startsWith(F("+CMT"))) // пришло СМС
{
//Получение номер телефона отправителя
T_Nomer = substring_commas(line) ;
isStringMessage = true;
}
//______
// Обработка входящих вызовов
if (Call)
{
if (line.startsWith(F("+CLIP"))) //Определение номера звонящего
{
T_Nomer = substring_commas(line) ;
}
if (line == F("NO CARRIER")) { Call=0; }
}
if (line == F("RING")){ Call=1; Number_calls ++; wait=0;}//Всходящий звонок
//____
}
// Получили строку ответа от Neoway. Любые ответы приходят в виде
// либо одной, либо нескольких строк, так что единица, которой мы должны
// оперировать - именно строка
// F("") -Хранить строку в Флеш памяти
1129
// tip 1- без \r и \n
// tip 2- с \r и \n
wait=1;
count_++;
time1 =T_millis + Time_wait;
if(tip==1) Serial3.print(text_com);
else if(tip==2){ Serial3.println(text_com); }
else if(tip==3){
Serial3.print(text_com);
Serial3.println((char)26);
}
251
bool st=0;
switch ( count_ ) {
case 0:
AT_Command("AT+CREG?",2);
response_com=F("+CREG");
break;
case 1:
if(return_AT_2)
{if (reply == F("+CREG: 0,1"))Net =1;
else Net =0;
count_++;}
break;
case 2:
AT_Command("AT+CSQ" ,2 ) ;
response_com=F("+CSQ");
break;
case 3:
if(return_AT_2)
{
int t1=reply.indexOf(": ");
if(t1>-1) dBm =(( ( (reply.substring(t1+2,t1+4) ).toInt())*(2) )-(113));
if( dBm >0) dBm =-120; //нет сети
}
break;
case 4:
AT_Command("AT+COPS?" ,2 ) ;
response_com=F("+COPS");
break;
case 5:
if(return_AT_2)
{
Operator = substring_commas(reply) ;
count_=0;
st=1;
Error_Code =0; //Сброc ошибки
}
break;
}
return st;
694
bool st=0;
switch ( count_ ) {
case 0:
AT_Command("AT+CMGF=1",2);
break;
case 1:
AT_Command("AT+CMGS=\""+ Phone +"\"\r",1 );
response_com=F("> ");
break;
case 2:
AT_Command( text ,3 );
break;
case 3:
count_=0;
st=1;
Sent_SMS =1;
Error_Code =0; //Сброc ошибки
break;
}
return st;
299
bool st=0;
switch ( count_ ) {
case 0:
AT_Command("ATD#100#",2 ) ;
response_com=F("+CUSD");
break;
case 1:
if(return_AT_2)
{
Balance = substring_commas(reply) ;
count_=0;
st=1;
}
break;
}
return st;
String test_res;
int t1=text_analyze.indexOf("\"");
int t2=text_analyze.indexOf("\"",(t1+1));
if((t1>-1)&&(t2>-1)) test_res=text_analyze.substring(t1+1,t2);
else test_res="";
return test_res;
192
String
substring_commas
String
text_analyze
bool st=0;
switch ( count_ ) {
case 0:
AT_Command("AT+CPAS",2);
response_com=F("+CPAS");
break;
case 1:
if(return_AT_2)
{
if (reply == F("+CPAS: 0"))count_++;
else {Error_Code =4; count_=0; team_room=0;}
}
break;
case 2:
AT_Command("AT+CREG?",2);
response_com=F("+CREG");
break;
case 3:
if(return_AT_2)
{
if (reply == F("+CREG: 0,1")){Net =1; count_++;}
else {Error_Code =5; Net =0; count_=0; team_room=0;}
}
break;
case 4:
AT_Command("ATE0" ,2 ) ;
break;
case 5:
AT_Command("AT+CLIP=1" ,2 ) ;
break;
case 6:
AT_Command("AT+CMGF=1" ,2 ) ;
count_++;
break;
case 7:
AT_Command("AT+CSCS=\"GSM\"" ,2 ) ;
break;
case 8:
AT_Command("AT+CNMI=2,2,0,0,0" ,2 ) ;
count_++;
break;
case 9:
count_=0;
st=1;
Error_Code =0; //Сброc ошибки
break;
}
return st;
bool
setup_comand
USSD_return
Ответ на запрос
20a0dbb2-d85e-4f1a-9a08-4e6a52f5fc92
инфо http://flprog.ru/forum/18-642-2
Настрока модуля под себя
В секции DeclareSection убрать знак комметария только в нужны строках (Убрать перед нужной строкой символы "//")
// #define SERIAL_M Serial // для работы с COM порт 0
// #define SERIAL_M Serial1 // для работы сCOM порт 1
// #define SERIAL_M Serial2 // для работы с COM порт 2
#define SERIAL_M Serial3 // для работы сCOM порт 3
// #define SERIAL_M Serial_S // для работы сCOM Software
// #include <SoftwareSerial.h> // для работы сCOM Software
// SoftwareSerial Serial_S( RX , TX ); // для работы сCOM Software
Параметры
speed- скорость порта 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 бит/сек
Time_wait - время ожидание ответа (в мс), в случаи его превышения Error_Code=2
Time_Net - Период опроса модуля на связь с сетью, мс 0-опрос отключен.
RX, TX - номера пинов для подключения модуля при варинате SoftwareSerial, при использование аппаратных портов, значение роли не играет.
Входы
In_sms- отправляет СМС по переднему фронту, если блок не занят предыдущей операцией
Phone - номер телефона на который будет отправляется СМС в формате +7хххххххххх
text - данные которые будут отправлены в СМС
Reject_call - по переднему фронту сбрасывает входящий вызов (отбой)
Get_USSD - по переднему фронту отправляется USSD запрос
USSD_CODE - код USSD запроса, пример *100#
Выходы
Net - регистрация :1 - модуль зарегистрирован в домашней сети, 0-нет
dBm - уровень сигнал (-120 уровень не известен)
Received_SMS - импульс в один программный цикл, при получении СМС
Sent_SMS - импульс в один программный цикл, при удачной оправки СМС
Text_sms - Строка содержащая текст СМС
T_Nomer - Строка содержащая номер отправителя СМС (входящего вызова, при входящем вызове номер без +)
Call - пока идет входящий вызов 1 на выходе
Number_calls - номер текущего гудка, сбрасывается поле заервшение текущего и постепления нового звонка.
USSD_return - ответ на USSD запрос
Error_Code : Код ошибки, появляется только на 1 программный цикл
0- норма;
1 - Ошибка в ответ на команду
2 - Нет ответа от модуля при отправки команды
3 - Неверный ответ
4 - модуль не готов
5 - нет регистрации в сети
10 - недопустимый номер для отправки СМС
2201
9600
RX
Номер пина, см описание
2442ead9-2f53-4a6d-8299-db1be1540ae1
6fe9eca6-8a6e-4b35-9b52-c72d1faadca0
TX
Номер пина, см описание
24d51b0e-0678-46ce-9885-8f84bb6984b4
c4f394bd-ed86-4487-bd48-4f4dadef276b
Time_USSD
Время ожидания ответа на USSD запрос, мс
4d316b51-aa14-428b-b843-eee5c7f3fb95
9db05ae9-68f2-4374-8ecb-481091b7e4d7
delay(1000);//!!!!Тест удалить!!!!
Serial.print("Start_"); //Тест
Serial.print(start); //Тест
Serial.print("_Nah_P_");// !!! ТЕст
Serial.print(team_room); //!!! ТЕст
Serial.print("_O_");// !!! ТЕст
Serial.print(wait);// !!! ТЕст
Serial.print("_S_");// !!! ТЕст
Serial.print(count_);// !!! ТЕст
Serial.print("_AT2_");// !!! ТЕст
Serial.println(return_AT_2);// !!! ТЕст
return_AT_2=0;
Received_SMS =0; //Сброс статутса СМС Принята
Sent_SMS =0; //Сброс статуса СМС Отправлена
//Error_Code =0; //Сброc ошибки
reply=""; //Сброс содержимого прошлого ответа модуля
T_millis =millis();
if (SERIAL_M.available()||wait_Serial){
if (!wait_Serial){wait_Serial=1; time_Serial=T_millis+200;}
if (T_millis >time_Serial)//ожидаем полного получения команды
{wait_Serial=0;
while(SERIAL_M.available()) //Получаем данные с модема
{ch = SERIAL_M.read();
Serial.print(ch);// !!! ТЕст
if(ch == '\r') continue;
if(ch == '\n') { GotLineFromNeoway(); line = ""; }
else line += ch;}
}
}
if (wait)//ожиание ответа на команду
{
if(line.length()>0){if(line ==response_com) wait=0; response_com="";}
if(T_millis>time1) {Error_Code=2; err=1;}}
if(err){
err=0;
if (team_room==3)
{switch ( count_ ){
case 1:
Net =0;
break;
case 3:
dBm =-120; //нет сети
break;
case 5:
Operator="";
break;}
}
wait=0; count_=0; team_room=0; response_com="";}
if (Call&&(team_room!=1) )
{
team_room=1;
count_=0; //Сброс состояний обработки других функций
Number_calls=1; //сброс числа гудков
}
if (start_N){if (!wait){if ( setup_comand() ){start_N=0; start =1;}}}// Инициализация
if (start)//Не работать пока не старт
{
if ( In_sms ) { if (_trgrt1I) { _trgrt1 = 0;} else {_trgrt1 = 1; _trgrt1I = 1;} } else {_trgrt1 = 0; _trgrt1I = 0;}; //импульс на отправку смс
if (_trgrt1 ) s_sms=1;
if ( s_sms && (team_room==0) ) // начинать ли отправу смс
{
s_sms=0;
if ( Phone.length() > 4) {team_room=2;} //проверка корректности номера
else Error_Code =10;
}
if ((Time_Net >0)&&(team_room==0)) //проверять ли статутс сети
{
if((T_millis-time_n)> Time_Net){time_n=T_millis; team_room=3;}
}
if ( Reject_call ) { if (_trgrt2I) { _trgrt2 = 0;} else {_trgrt2 = 1; _trgrt2I = 1;} } else {_trgrt2 = 0; _trgrt2I = 0;}; //импульс на сброс вызова
//Запрос баланса
if ( Get_USSD ) { if (_trgrt3I) { _trgrt3 = 0;} else {_trgrt3 = 1; _trgrt3I = 1;} } else {_trgrt3 = 0; _trgrt3I = 0;};
if (_trgrt3 ) Bal_T=1;
if ( Bal_T && (team_room==0) ) // начинать запрос баланса
{Bal_T=0; team_room=4;}
switch ( team_room ) {
case 1:
if(_trgrt2) {Call_T=1; AT_Command("ATH0",2);}
if(Call_T&& return_AT_2 ){Call=0; count_=0; }
if (!Call) {Call_T=0; final =1; T_Nomer ="";}
break;
case 2:
if (!wait){ if (sms_sent()){ final =1; }} // отправка сообщения
break;
case 3:
if (!wait){if (net_status()){ final =1;}}// проверка связи с сетью
break;
case 4:
if (!wait){if ( balance_S() ){ final =1;}}// запрос баланса
break;
}
if (final){team_room=0; final=0;} //должно быть последним
}
3046
//delay(2000); //пауза на включение модуля
SERIAL_M.begin( speed );
/*
delay(50);
SERIAL_M.println("AT+CMGF=1");
delay(50);
SERIAL_M.println("AT+CSCS=\"GSM\"");
delay(50);
SERIAL_M.println("AT+CNMI=2,2,0,0,0");
delay(50);
SERIAL_M.println("AT+CLIP=1");
delay(50);
SERIAL_M.println("ATE0");
delay(50);
*/
304
Разкоментировать нужное (Убрать перед нужной строкой символы "//")
#define SERIAL_M Serial // для работы с COM порт 0
#define SERIAL_M Serial1 // для работы сCOM порт 1
#define SERIAL_M Serial2 // для работы с COM порт 2
для работы сCOM порт 3
#define
SERIAL_M
Serial3
#define SERIAL_M Serial_S // для работы сCOM Software
#include <SoftwareSerial.h> // для работы сCOM Software
SoftwareSerial Serial_S( RX , TX ); // для работы сCOM Software
Модем прислал сообщение о том, что он стартовал
start_N
=0;
bool
Флаг того, что модуль инициализирован
start
=0;
bool
пришло сообщение
isStringMessage
= 0;
bool
закончена обработка запроса
final
=0;
bool
идет ожидание ответа на команду
wait
=0;
bool
ошибка или сброс
err
=0;
bool
пришло ожидаемый ответ на команду
return_AT_2
=0;
bool
_trgrt1
= 0;
bool
_trgrt1I
= 0;
bool
_trgrt2
= 0;
bool
_trgrt2I
= 0;
bool
_trgrt3
= 0;
bool
_trgrt3I
= 0;
bool
bool _trgrt4= 0;
bool _trgrt4I= 0;
Call_T
=0;
bool
Net_T
=0;
bool
s_sms
=0;
bool
Bal_T
=0;
bool
Triger_
= 0;
bool
wait_Serial
=0;
bool
ch
;
char
Номер исполняемой команды
team_room
=0;
byte
счетчик последовальности команд
count_
=0;
int
Время посылки команды
time1
=0;
unsigned long
Время посылки команды
T_millis
=0;
unsigned long
Время ожидания приема команды
time_Serial
=0;
unsigned long
Время последнего опроса связи с сетью.
time_n
=0;
unsigned long
сообщение от модуля
line
;
String
Ответ модуля на команду
reply
;
String
ожидаемый ответ
response_com
="";
String
Serial.print("OTVET_");//Тест
Serial.println(line); //Тест
if (line.length()>0)
{
if(line == F("ERROR")){ Error_Code =1; err=1; }
else if(line == F("OK")){ return_AT_2=1; wait=0; response_com=""; }
else if (response_com.length()>0){
if(line.startsWith(response_com)){reply=line;}
else {Error_Code =3; err=1;} }
//Обработка входящих СМС
if (isStringMessage)
{
Text_sms = line; //выводим текст сообщения
Received_SMS =true; // Импульс приход сообщения
isStringMessage = false;
}
if (line.startsWith(F("+CMT"))) // пришло СМС
{
//Получение номер телефона отправителя
T_Nomer = substring_commas(line) ;
isStringMessage = true;
}
//______
// Обработка входящих вызовов
if (Call)
{
if (line.startsWith(F("+CLIP"))) //Определение номера звонящего
{
T_Nomer = substring_commas(line) ;
}
if (line == F("NO CARRIER")) { Call=0; }
}
if (line == F("RING")){ Call=1; Number_calls ++; wait=0;}//Всходящий звонок
//____
if (line == F("+PBREADY")){ start_N=1; start=0; err=1;}//Сообщение от модуля о том что он стартовал
}
// Получили строку ответа от Neoway. Любые ответы приходят в виде
// либо одной, либо нескольких строк, так что единица, которой мы должны
// оперировать - именно строка
// F("") -Хранить строку в Флеш памяти
1292
// tip 1- без \r и \n
// tip 2- с \r и \n
Serial.print("Sapros_");//Тест
Serial.println(text_com); //Тест
wait=1;
count_++;
time1 =T_millis + Time_wait;
if(tip==1) SERIAL_M.print(text_com);
else if(tip==2){ SERIAL_M.println(text_com); }
else if(tip==3){
SERIAL_M.print(text_com);
SERIAL_M.println((char)26);
}
else if(tip==4){time1 =T_millis + Time_USSD ;
SERIAL_M.println(text_com); }
395
bool st=0;
switch ( count_ ) {
case 0:
AT_Command("AT+CREG?",2);
response_com=F("+CREG");
break;
case 1:
if(return_AT_2)
{if (reply == F("+CREG: 0,1"))Net =1;
else Net =0;
count_++;}
break;
case 2:
AT_Command("AT+CSQ" ,2 ) ;
response_com=F("+CSQ");
break;
case 3:
if(return_AT_2)
{
int t1=reply.indexOf(": ");
if(t1>-1) dBm =(( ( (reply.substring(t1+2,t1+4) ).toInt())*(2) )-(113));
if( dBm >0) dBm =-120; //нет сети
count_++;
}
break;
case 4:
AT_Command("AT+COPS?" ,2 ) ;
response_com=F("+COPS");
break;
case 5:
if(return_AT_2)
{
Operator = substring_commas(reply) ;
count_++;
}
break;
case 6:
count_=0;
st=1;
Error_Code =0; //Сброc ошибки
break;
}
return st;
733
bool st=0;
switch ( count_ ) {
case 0:
AT_Command(("AT+CUSD=1,\""+ USSD_CODE +"\",15"),4 ) ;
response_com=F("+CUSD");
break;
case 1:
if(return_AT_2)
{
USSD_return = substring_commas(reply) ;
count_=0;
st=1;
}
break;
}
return st;
250
bool st=0;
switch ( count_ ) {
case 0:
AT_Command("ATE0" ,2 ) ;
break;
case 1:
AT_Command("AT+CPAS",2);
response_com=F("+CPAS");
break;
case 2:
if(return_AT_2)
{
if (reply == F("+CPAS: 0"))count_++;
else {Error_Code =4; count_=0; team_room=0;}
}
break;
case 3:
AT_Command("AT+CREG?",2);
response_com=F("+CREG");
break;
case 4:
if(return_AT_2)
{
if (reply == F("+CREG: 0,1")){Net =1; count_++;}
else {Error_Code =5; Net =0; count_=0; team_room=0;}
}
break;
case 5:
AT_Command("AT+CLIP=1" ,2 ) ;
break;
case 6:
AT_Command("AT+CMGF=1" ,2 ) ;
count_++;
break;
case 7:
AT_Command("AT+CSCS=\"GSM\"" ,2 ) ;
break;
case 8:
AT_Command("AT+CNMI=2,2,0,0,0" ,2 ) ;
break;
case 9:
count_=0;
st=1;
Error_Code =0; //Сброc ошибки
break;
}
return st;
802
start
92ccc762-3d54-464a-8301-20848c7b9d4a
Флаг того, что модуль инициализирован
3d82746c-c501-4351-b51a-019a18253b6b
fce13b85-48cc-49c4-b122-75d2ba233b44
инфо http://flprog.ru/forum/18-642-2
Настрока модуля под себя
В секции DeclareSection убрать знак комметария только в нужны строках (Убрать перед нужной строкой символы "//")
// #define SERIAL_M Serial // для работы с COM порт 0
// #define SERIAL_M Serial1 // для работы сCOM порт 1
// #define SERIAL_M Serial2 // для работы с COM порт 2
#define SERIAL_M Serial3 // для работы сCOM порт 3
// #define SERIAL_M Serial_S // для работы сCOM Software
// #include <SoftwareSerial.h> // для работы сCOM Software
// SoftwareSerial Serial_S( RX , TX ); // для работы сCOM Software
Параметры
speed- скорость порта 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 бит/сек
Time_wait - время ожидание ответа (в мс), в случаи его превышения Error_Code=2
Time_Net - Период опроса модуля на связь с сетью, мс 0-опрос отключен.
RX, TX - номера пинов для подключения модуля при варинате SoftwareSerial, при использование аппаратных портов, значение роли не играет.
Входы
In_sms- отправляет СМС по переднему фронту, если блок не занят предыдущей операцией
Phone - номер телефона на который будет отправляется СМС в формате +7хххххххххх
text - данные которые будут отправлены в СМС
Reject_call - по переднему фронту сбрасывает входящий вызов (отбой)
Get_USSD - по переднему фронту отправляется USSD запрос
USSD_CODE - код USSD запроса, пример *100#
Выходы
Net - регистрация :1 - модуль зарегистрирован в домашней сети, 0-нет
dBm - уровень сигнал (-120 уровень не известен)
Received_SMS - импульс в один программный цикл, при получении СМС
Sent_SMS - импульс в один программный цикл, при удачной оправки СМС
Text_sms - Строка содержащая текст СМС
T_Nomer - Строка содержащая номер отправителя СМС (входящего вызова, при входящем вызове номер без +)
Call - пока идет входящий вызов 1 на выходе
Number_calls - номер текущего гудка, сбрасывается поле заервшение текущего и постепления нового звонка.
USSD_return - ответ на USSD запрос
start- статус того что модуль стартовал и успешно прошел инициализацию AT командами.
Error_Code :
0- норма;
1 - Ошибка в ответ на команду
2 - Нет ответа от модуля при отправки команды
3 - Неверный ответ
4 - модуль не готов
5 - нет регистрации в сети
10 - недопустимый номер для отправки СМС
2235
ba343838-5e80-48f7-a398-2d132942cbc1
#define
Module_Start
"+PBREADY"
Разкоментировать нужное (Убрать перед нужной строкой символы "//")
#define SERIAL_M Serial // для работы с COM порт 0
#define SERIAL_M Serial1 // для работы сCOM порт 1
#define SERIAL_M Serial2 // для работы с COM порт 2
для работы сCOM порт 3
#define
SERIAL_M
Serial3
#define SERIAL_M Serial_S // для работы сCOM Software
#include <SoftwareSerial.h> // для работы сCOM Software
SoftwareSerial Serial_S( RX , TX ); // для работы сCOM Software
Модем прислал сообщение о том, что он стартовал
start_N
=0;
bool
пришло сообщение
isStringMessage
= 0;
bool
закончена обработка запроса
final
=0;
bool
идет ожидание ответа на команду
wait
=0;
bool
ошибка или сброс
err
=0;
bool
пришло ожидаемый ответ на команду
return_AT_2
=0;
bool
_trgrt1
= 0;
bool
_trgrt1I
= 0;
bool
_trgrt2
= 0;
bool
_trgrt2I
= 0;
bool
_trgrt3
= 0;
bool
_trgrt3I
= 0;
bool
bool _trgrt4= 0;
bool _trgrt4I= 0;
Call_T
=0;
bool
Net_T
=0;
bool
s_sms
=0;
bool
Bal_T
=0;
bool
Triger_
= 0;
bool
wait_Serial
=0;
bool
ch
;
char
Номер исполняемой команды
team_room
=0;
byte
счетчик последовальности команд
count_
=0;
int
Время посылки команды
time1
=0;
unsigned long
Время посылки команды
T_millis
=0;
unsigned long
Время ожидания приема команды
time_Serial
=0;
unsigned long
Время последнего опроса связи с сетью.
time_n
=0;
unsigned long
сообщение от модуля
line
;
String
Ответ модуля на команду
reply
;
String
ожидаемый ответ
response_com
="";
String
Serial.print("OTVET_");//Тест
Serial.println(line); //Тест
if (line.length()>0)
{
if(line == F("ERROR")){ Error_Code =1; err=1; }
else if(line == F("OK")){ return_AT_2=1; wait=0; response_com=""; }
else if (response_com.length()>0){
if(line.startsWith(response_com)){reply=line;}
else {Error_Code =3; err=1;} }
//Обработка входящих СМС
if (isStringMessage)
{
Text_sms = line; //выводим текст сообщения
Received_SMS =true; // Импульс приход сообщения
isStringMessage = false;
}
if (line.startsWith(F("+CMT"))) // пришло СМС
{
//Получение номер телефона отправителя
T_Nomer = substring_commas(line) ;
isStringMessage = true;
}
//______
// Обработка входящих вызовов
if (Call)
{
if (line.startsWith(F("+CLIP"))) //Определение номера звонящего
{
T_Nomer = substring_commas(line) ;
}
if (line == F("NO CARRIER")) { Call=0; }
}
if (line == F("RING")){ Call=1; Number_calls ++; wait=0;}//Всходящий звонок
//____
if (line == F(Module_Start)){ start_N=1; start=0; err=1;}//Сообщение от модуля о том что он стартовал
}
// Получили строку ответа от Neoway. Любые ответы приходят в виде
// либо одной, либо нескольких строк, так что единица, которой мы должны
// оперировать - именно строка
// F("") -Хранить строку в Флеш памяти
1294
a95512ac-60f8-446a-87a3-63d7cc38b1c9
358.0d@190 corner: 378.0d@210
GSM_Net
48.0d
358.0d@220
378.0d@220
358.0d@210 corner: 378.0d@230
GSM_dBm
53.0d
358.0d@240
378.0d@240
358.0d@230 corner: 378.0d@250
GSM_Received_SMS
104.0d
358.0d@260
378.0d@260
358.0d@250 corner: 378.0d@270
358.0d@270 corner: 378.0d@290
390@290
410@290 corner: 513.0d@310
390@290 corner: 533.0d@310
414@304.5d
390@290 corner: 410@310
390@300
513.0d@300
533.0d@300
410@300
378.0d@300 corner: 378.0d@300
GSM_T_Nomer
76.0d
358.0d@300
378.0d@300
358.0d@290 corner: 378.0d@310
GSM_Sent_SMS
82.0d
358.0d@320
378.0d@320
358.0d@310 corner: 378.0d@330
GSM_Call
50.0d
358.0d@340
378.0d@340
358.0d@330 corner: 378.0d@350
GSM_Number_calls
96.0d
358.0d@360
378.0d@360
358.0d@350 corner: 378.0d@370
GSM_Error_Code
84.0d
358.0d@380
378.0d@380
358.0d@370 corner: 378.0d@390
378.0d@280
GSM_Основной
GSM_Text_sms
488f20c3-fd6c-4b80-8117-b241d2d0d084
GSM_Основной
инфо http://flprog.ru/forum/18-642-2
Автор Слимпер
Параметры
speed- скорость порта 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 бит/сек (при использовании Software могут быть проблемы при скоростях больше 9600, 19200)
Time_wait - время предельного ожидание ответа (в мс), т.е. по истечении которого выполнение запроса прекращается
Time_Net - Период опроса модуля на связь с сетью, мс 0-опрос отключен.
SERIAL_M - выбор порта к которому подключен модуль. Варианты Serial, Serial1, Serial2, Serial3, Serial_S - для перевода на SoftwareSerial (еще необходимо добавить блок GSM_SoftwareSerial)
Срос выходов - По завершению процедуры приема и обработки, сбрасывает выхода GSM_Text_sms, GSM_T_Nomer , GSM_Number_calls
Входы
GSM_In_sms - отправляет СМС
GSM_Phone - номер телефона на который будет отправляется СМС в формате +7хххххххххх или имя контакта из телефонной книги (только, если есть и содержит Name_Contaсt)
GSM_text - данные которые будут отправлены в СМС
GSM_Reject_call - сбрасывает входящий вызов (отбой), разрывает установлено голосовое соединение
!!!Все входы срабатывают по переднему фронту сигнала, т.е. при переходе из 0 (false) в 1 (true)
Выходы
GSM_start - статус того, что модуль стартовал и успешно прошел инициализацию AT командами.
GSM_Net – регистрация в сети : 1 - модуль зарегистрирован в домашней сети, 0-нет
GSM_dBm - уровень сигнал (-120 уровень не известен)
GSM_Received_SMS - импульс в один программный цикл, при получении СМС
GSM_Sent_SMS - импульс в один программный цикл, при удачной оправки СМС
GSM_Text_sms - Строка содержащая текст принятой СМС
GSM_T_Nomer - Строка содержащая номер отправителя СМС/звонящего или имя контакта из телефонной книги (подробнее см ниже)
GSM_Call – Входящий звонок, пока идет входящий вызов 1 на выходе
GSM_Number_calls - номер текущего гудка, сбрасывается поле поступления нового звонка.
Error_Code – Код ошибки в работе модуля, появляется после возникновение ошибки, и сбрасывается после следующей удачной операции
Часть ошибок, описаны в блоках, настройки на конкретный модуль, так как они уникальны для него
Перечень общих ошибок:
201 – Отправки СМС. Ошибка перевода формат сообщений в текстовый режим
202 - Отправки СМС. Ошибка начального этап отправки СМС
203 - Отправки СМС. Ошибка конечного этап отправки СМС
301 - Проверка связи с сетью. Ошибка команды - Проверка регистрации в сети
303 - Проверка связи с сетью. Ошибка команды - Проверка уровня сигнала
501- Исходящем вызове. Ошибка команды поднять трубку
505 - Исходящем вызове. Занят другим сеансом связи
506 - Исходящем вызове. Нет ответа
507 - Исходящем вызове. Вызов сброшен
601 - Ошибка команды - Получение имени оператора
603 - Ошибка команды - Получить текущее время
701 - Ошибка команды - Отправить USSD запрос
10005 – При исходящем вызове, или отправки СМС. Некорректный номер
10006 – При исходящем вызове, или отправки СМС. Нет в списке разрешённых номеров. При использовании телефонной книге и включении функции White_list
10100 - превышен допустимый лимит длинны ответа модуля
3085
SERIAL_M
Serial3
Выбор COM порта
6e740e32-4275-4075-a1f4-1136b9aad202
Serial_S
cd44aec4-9e95-4f84-be65-61792f4d0a55
Time_wait
Время ожидание ответа модуля, мс
22016e8b-8d2b-4fcb-85f5-5f68ed96a606
221e94a5-09ac-40a4-8cbf-1c8f417182b3
Ограничение длинны сообщений
160
Сброс при привышении, символы
b3bca61d-629f-4ece-b5f5-05b658ef9e8d
a2c907a6-9a71-4a77-965e-90d9a57b1dda
Срос выходов
Сбрасывате выхода
99b9629a-6606-4ea9-925a-359b95dd7184
a7e04f2b-3051-46e0-9db7-39c0adefeb6c
GSM_Received_SMS =0; //Сброс статутса СМС Принята
GSM_Sent_SMS =0; //Сброс статуса СМС Отправлена
if ( Срос выходов ){
if ( GSM_team_room==3 ){
GSM_Number_calls =0;
GSM_Text_sms="";
GSM_T_Nomer ="";
}
}
GSM_T_millis =millis();
while(SERIAL_M.available()) //Получаем данные с модема
{GSM_ch = SERIAL_M.read();
if(GSM_ch == '\r') continue;
if(GSM_ch == '\n') { GSM_GotLineFromNeoway(); GSM_line = ""; }
else GSM_line += GSM_ch;}
if (GSM_wait)//ожиание ответа на команду
{
if(GSM_line.length()>0){
if(GSM_line==F("> ")) {GSM_count++; GSM_wait=0;GSM_line = "";} }
if(GSM_T_millis>GSM_time) {GSM_err (2,0);}
}
if (GSM_Call&&(GSM_team_room!=1) )
{
GSM_team_room=1;
GSM_Number_calls=1; //сброс числа гудков
// GSM_resetExpectations() ;
}
if (GSM_start_N){if (!GSM_wait){if ( GSM_setup_comand() ){GSM_start_N=0; GSM_start =1; }}}// Инициализация
if (GSM_start)//Не работать пока не старт
{
//______Проверка статуса сети
if ((Time_Net >0)&&(GSM_team_room==0)) //проверять ли статутс сети
{
if((GSM_T_millis-GSM_time_n) > Time_Net){ GSM_team_room=3;}
}
//______Конец Проверка статуса сети
//______Отправка СМС
if ( GSM_In_sms && !GSM_past_SMS ) { if ( GSM_number_search()) GSM_command_SMS =1; } // поступление команды на отправу СМС. Проверка корректности номера
GSM_past_SMS= GSM_In_sms;
if ( GSM_command_SMS && (GSM_team_room==0) ) {GSM_team_room=2; GSM_command_SMS =0;} // начинать отправу СМС
//______Конец Отправка СМС
//______Команда сброс вызова или разрыв разговора
if ( GSM_Reject_call && !GSM_past_Reject_call ) { GSM_command_Reject_call =1; }
GSM_past_Reject_call=GSM_Reject_call;
//______Конец Команда сброс вызова или разрыв разговора
#ifdef GSM_INCLUSION_USSD // Обработка вызова USSD запросов
GSM_causeProcessingUSSD();
#endif
#ifdef GSM_INCLUSION_DATA_TIME //Обработка времени, даты, оператора
GSM_causeProcessingDataTime();
#endif
#ifdef GSM_INCLUSION_CALLS // исходящий вызов
if (GSM_causeProcessingCall()) {
if( GSM_number_search()){
GSM_wait=1; // ожитать
GSM_time =millis() + Time_wait; // время ожидания
SERIAL_M.println( "ATD"+ GSM_Phone_T+";" );
GSM_team_room=5;
#ifdef GSM_DEBUG // отладка
Serial.println("Command: ATD"+ GSM_Phone_T+";" );
#endif
}
}
#endif
//________ Обработка разных процессов
switch ( GSM_team_room ) {
case 0:
break;
case 1: //Обработка входящих вызовов
if (!GSM_wait){
if ( GSM_command_Reject_call ) {
if ( GSM_singleCommand(F("ATH0"), 10) ) {GSM_command_Reject_call=0; GSM_Call=0; GSM_count=0; GSM_final=1;}
}
#ifdef GSM_INCLUSION_CALLS
#ifndef GSM_TYPE_M590
if (GSM_causeProcessingTake()){ GSM_Connect=1; GSM_team_room=5;}
#endif
#endif
}
if (!GSM_Call){ GSM_final =1; GSM_T_Nomer ="";}
break;
case 2:
if (!GSM_wait){ GSM_final=GSM_sms_sent();} // отправка сообщения
break;
case 3:
if (!GSM_wait){ GSM_final=GSM_net_status();}// проверка связи с сетью
break;
case 4: //приход смс
//if (!GSM_wait){ GSM_final=1; GSM_count=0; GSM_Error_Code =0; }//
break;
#ifdef GSM_INCLUSION_CALLS
case 5: //разговор
if (!GSM_wait) {
if ( GSM_command_Reject_call ) {
if ( GSM_singleCommand(F("ATH0"), 10)) {GSM_command_Reject_call=0; GSM_Call=0; GSM_count=0; GSM_Connect=0; GSM_final=1;}
}
GSM_count=0;
}
break;
#endif
#ifdef GSM_INCLUSION_DATA_TIME
case 6: // дата время
if (!GSM_wait){if ( GSM_DataTime() ){ GSM_final =1;}}// запрос баланса
break;
#endif
#ifdef GSM_INCLUSION_USSD
case 7: // USSD
if (!GSM_wait){ GSM_final=GSM_USSD();}// запрос баланса
break;
#endif
}
//________ Конец Обработка разных процессов
if (GSM_final){GSM_team_room=0; GSM_final=0;} //должно быть последним
}
3735
SERIAL_M.begin( speed );
28
Модем прислал сообщение о том, что он стартовал
GSM_start_N
;
bool
закончена обработка запроса
GSM_final
;
bool
идет ожидание ответа на команду
GSM_wait
;
bool
GSM_past_SMS
;
bool
GSM_command_SMS
;
bool
GSM_past_Reject_call
;
bool
GSM_command_Reject_call
;
bool
bool GSM_Call_P1;
символ пришетший в ком порт
GSM_ch
;
char
счетчик ошибок
GSM_errorCounter
;
byte
GSM_numberRepeats
;
byte
byte GSM_Dial_response_code;
номер текущей функции
GSM_team_room
;
byte
счетчик последовальности команд
GSM_count
;
byte
Время посылки команды
GSM_time
;
unsigned long
Время посылки команды
GSM_T_millis
;
unsigned long
Время последнего опроса связи с сетью.
GSM_time_n
;
unsigned long
сообщение от модуля
GSM_line
;
String
Ответ модуля на команду
GSM_reply
;
String
Телефон во время подачи команд на звонок или отправку смс
GSM_Phone_T
="";
String
bool flag_=0; //Анализ телефонной книги
static bool isStringMessage;
#ifdef GSM_DEBUG
Serial.print("Message module: ");//Тест
Serial.println(GSM_line); //Тест
Serial.print("GSM_team_room: ");//Тест
Serial.println(GSM_team_room); //Тест
#endif
if (GSM_line.length()>0)
{
//Обработка входящих СМС
if (isStringMessage){
GSM_Text_sms = GSM_line ; //выводим текст сообщения
GSM_Received_SMS =true; // Импульс приход сообщения
isStringMessage=0;
return;
}
if (GSM_line.startsWith("+CMT")) // пришло СМС
{
flag_=1;
GSM_resetExpectations();
isStringMessage=1;
GSM_reply="";
}
//Конец Обработка входящих СМС
// Обработка входящих вызовов
if (GSM_Call)
{
if (GSM_line.startsWith(F("+CLIP"))) {flag_=1;GSM_reply="";}
else if (GSM_line == F("NO CARRIER")) { GSM_Call=0; }
}
if (GSM_line == F("RING")){ //Входящий звонок
if(!GSM_Call)GSM_resetExpectations();
GSM_Call=1;
GSM_Number_calls ++;
}
// ____ Обработка USSD sim800
#ifdef GSM_TYPE_SIM800
#ifdef GSM_INCLUSION_USSD
if (GSM_line.startsWith("+CUSD")) // пришел ответ по USSD
{
GSM_wait=0;
GSM_count++;
GSM_USSD_return = GSM_substring_commas(GSM_line,5) ;
}
#endif
#endif
//_______Конец обработки USSD SIM800
#ifdef GSM_INCLUSION_CALLS //Если добавлен блок работы со звонками
#ifdef GSM_INCLUSION_DTMF // Если добвален блок DTMF
if ( GSM_Connect ){ if (GSM_line.startsWith(F("+DTMF"))) {GSM_ID_DTMF(GSM_line);} }
#endif
if (GSM_team_room==5)
{
if (GSM_line == F("CONNECT"))GSM_Connect=1;
else if (GSM_line == F("BUSY")) GSM_err (505,2);
else if (GSM_line == F("NO ANSWER")) GSM_err (506,2);
else if (GSM_line == F("NO CARRIER")) {
if (GSM_Connect){GSM_Connect=0; GSM_team_room=0;}
else GSM_err (507,2);
}
}
#endif
// Конец Обработка входящих вызовов
if(GSM_line == F("ERROR")) GSM_err (1, 0);
else if(GSM_line == F("OK")){ GSM_wait=0; GSM_count++; GSM_errorCounter=0; }
else {
GSM_reply+=GSM_line;
}
if (GSM_reply.length()> Ограничение длинны сообщений ){GSM_reply=""; GSM_err (10100,2);}//Защита от переполнения строки
if (GSM_line == Module_Start){ GSM_start_N=1; GSM_start=0; GSM_err (0 , 2); }//Сообщение от модуля о том, закончил загрузку
if (flag_) //Получение номер телефона отправителя/звонящего
{
GSM_T_Nomer = GSM_substring_commas( GSM_line, 4) ;
if( GSM_T_Nomer.indexOf("+")==-1) GSM_T_Nomer=(String( "+" ))+ GSM_T_Nomer;
#ifdef TELEFONNAYA_BOOK // если используется телефооная книга
int GSM_ind_arr= GSM_StringArray( GSM_Telefon, GSM_T_Nomer );
if ( GSM_ind_arr>-1) GSM_T_Nomer = GSM_Contact [ GSM_ind_arr ];
#endif
flag_=0;
}
#ifdef TELEFONNAYA_BOOK // если используется телефооная книга
if (!GSM_start){
if ( GSM_line.startsWith("+CPBF")) // пришла запись телефонной книги
{if( GSM_index_array< GSM_Number_Contacts ){
GSM_Telefon[ GSM_index_array ] = GSM_substring_commas( GSM_line, 5);
GSM_Contact[ GSM_index_array ]= GSM_substring_commas( GSM_line, ( GSM_line.lastIndexOf(","))) ;
GSM_index_array ++;}
}
}
#endif
}
// Получили строку ответа от Neoway. Любые ответы приходят в виде
// либо одной, либо нескольких строк, так что единица, которой мы должны
// оперировать - именно строка
// F("") -Хранить строку в Флеш памяти
3288
void
GSM_GotLineFromNeoway
GSM_numberRepeats=_numRep;
GSM_reply="";//Сброс содержимого прошлого ответа модуля
GSM_wait=1; // ожитать
GSM_time =millis() + Time_wait; // время ожидания
SERIAL_M.write("AT+");
SERIAL_M.print(str);
SERIAL_M.print(str2);
SERIAL_M.write("\"\r\n");
#ifdef GSM_DEBUG // отладка
Serial.write("Command: AT+");
Serial.print(str);
Serial.print(str2);
Serial.write("\"\r\n");
#endif
391
void
GSM_AT_Command
const __FlashStringHelper*
str
String
str2
byte
_numRep
switch ( GSM_count ) {
case 0:
GSM_count ++;
break;
case 1:
GSM_AT_Command(F("CREG?") , 5); //Проверка регистрации в сети
break;
case 2:
if ( GSM_analysisResponse(F("+CREG") )){
if( ( GSM_reply.endsWith("1")) || ( GSM_reply.endsWith("5"))) { GSM_Net =1;} // 1-В домашней сети, 5- в роуминге
else { GSM_Net =0;}
}
break;
case 3: // Проверка уровня сигнала
GSM_AT_Command(F("CSQ") , 5 ) ;
break;
case 4:
if ( GSM_analysisResponse(F("+CSQ") )){ //
int t1= GSM_reply.indexOf(": ");
if(t1>-1) GSM_dBm =(( ( ( GSM_reply.substring(t1+2,t1+4) ).toInt())*(2) )-(113));
if( GSM_dBm >0) GSM_dBm =-120; //нет сети
}
break;
case 5:
GSM_count=0;
GSM_time_n=millis();// время последнего опроса
GSM_Error_Code =0; //Сброc ошибки
return 1;
break;
}
return 0;
811
bool
GSM_net_status
switch ( GSM_count ) {
case 0:
GSM_count ++;
break;
case 1:
GSM_AT_Command(F("CMGF=1"),1); // Перевод сообщенй в текстовый режим
break;
case 2:
GSM_AT_Command(F("CMGS=\""), GSM_Phone_T ,1 ); // Отправка команды на начальный этап отправки СМС
break;
case 3: // передача текста СМС и отправка сообщения
if ( GSM_errorCounter ){ GSM_err( (200+ GSM_count) , 2); break; }// выход из посылки команд если достигнуто придельное колличество ошибок
SERIAL_M.println( GSM_text +String( (char)26 ));
GSM_wait=1; // ожитать
GSM_time =millis() + Time_wait; // время ожидания
#ifdef GSM_DEBUG // отладка
Serial.println( GSM_text +String( (char)26 ));
#endif
break;
case 4:
GSM_count=0;
GSM_Sent_SMS =1;
GSM_Error_Code =0; //Сброc ошибки
return 1;
break;
}
return 0;
795
bool
GSM_sms_sent
int t1=text_analyze.indexOf("\"", position);
int t2=text_analyze.indexOf("\"",(t1+1));
if(t1>-1){
if(t2>-1) return text_analyze.substring(t1+1,t2);
else return text_analyze.substring(t1+1);}
return "";
205
String
GSM_substring_commas
String
text_analyze
int
position
if ( GSM_Phone.length() <4) {GSM_Error_Code =10005; return 0;}
GSM_Phone_T = GSM_Phone ;
#ifdef TELEFONNAYA_BOOK
int ind_arr;
ind_arr= GSM_StringArray( GSM_Contact , GSM_Phone );
if (ind_arr>-1) GSM_Phone_T = GSM_Telefon [ ind_arr ];
else if(GSM_White_list ) {GSM_Error_Code =10006; return 0;}
#endif
return 1;
bool
GSM_number_search
//сброс текущей операции
GSM_wait=0; //сброс ожидания ответа
GSM_count=0; //Сброс состояний обработки других функций
GSM_time_n=GSM_T_millis;//отсрочка проверки статуса сети
GSM_team_room=0;
193
void
GSM_resetExpectations
GSM_errorCounter++ ;
GSM_reply=""; //Сброс содержимого прошлого ответа модуля
GSM_wait =0;
if (_ret==0){
if ( GSM_errorCounter >GSM_numberRepeats){
error = GSM_team_room*100+ GSM_count;
_ret=2;}
else return;
}
if ( _ret==1) GSM_count--;
else if (_ret==2 ){
GSM_errorCounter=0;
GSM_Error_Code =error;
if (GSM_team_room==3){GSM_Net =0;GSM_dBm =-120;}
GSM_resetExpectations();
}
389
void
GSM_err
int
error
byte
_ret
#ifdef GSM_DEBUG // отладка
Serial.write("AT+ _ ");
#endif
SERIAL_M.write("AT+");
GSM_Command( str,_numRep ) ;
117
void
GSM_AT_Command
const __FlashStringHelper*
str
byte
_numRep
#ifdef GSM_DEBUG
Serial.print("Expected Answer: ");//Тест
Serial.println(response); //Тест
Serial.print("Real Answer: ");//Тест
Serial.println(GSM_reply); //Тест
#endif
if (GSM_reply.startsWith(response)){GSM_count++; return 1; }
GSM_err(0,1);
return 0;
256
bool
GSM_analysisResponse
const __FlashStringHelper*
response
switch ( GSM_count ) {
case 0:
GSM_Command(str, _numRep) ;
break;
case 1:
GSM_count=0;
GSM_Error_Code =0; //Сброc ошибки
return 1;
break;
}
return 0;
159
bool
GSM_singleCommand
const __FlashStringHelper*
str
byte
_numRep
GSM_reply=""; //Сброс содержимого прошлого ответа модуля
GSM_numberRepeats=_numRep;
GSM_wait=1; // ожитать
GSM_time =millis() + Time_wait; // время ожидания
SERIAL_M.println(str);
#ifdef GSM_DEBUG // отладка
Serial.write("Command: ");
Serial.println(str);
#endif
268
void
GSM_Command
const __FlashStringHelper*
str
byte
_numRep
198.0d
358.0d@280
14
12
470@170
490@170 corner: 570@230
470@170 corner: 590@230
492.5d@184.5d
470@190 corner: 490@210
S2
S
470@220
490@220
462.0d@223.5d
470@210 corner: 490@230
15
191
580@190
600@190 corner: 640@230
580@190 corner: 660@230
606.5d@204.5d
580@210 corner: 600@230
45
19
1370@110
1390@110 corner: 1430@250
1370@110 corner: 1450@250
1401.5d@123.5d
190
690@110
710@110 corner: 750@150
690@110 corner: 770@150
716.5d@124.5d
Q
640@100
660@100
198
690@50
710@50 corner: 750@90
690@50 corner: 770@90
716.5d@64.5d
690@70 corner: 710@90
197
770@70
790@70 corner: 846.0d@90
770@70 corner: 866.0d@90
794@84.0d
770@70 corner: 790@90
770@80
8.0d
GSM start
88f55f0a-a03f-4791-bd93-c506e8d59a0a
846.0d@80
866.0d@80
790@80
770@80 corner: 770@80
Q
750@80
770@80
750@70 corner: 770@90
690@80
I
710@80
660@80 corner: 660@140
I
690@140
710@140
690@130 corner: 710@150
750@130 corner: 770@150
770@140
Q
750@140
770@140 corner: 770@140
1370@140
1390@140
1370@130 corner: 1390@150
1370@150 corner: 1390@170
17
174
680@230
700@230 corner: 740@270
680@230 corner: 760@270
706.5d@244.5d
16
137
580@250
600@250 corner: 640.0d@270
580@250 corner: 660.0d@270
604@263.5d
640.0d@250 corner: 660.0d@270
660.0d@260
7.0d
32.0d
Avaria
4ece49bc-b304-4153-8d31-6e84568695e4
720@290
740@290
640.0d@260
83
900@290
920@290 corner: 980@330
900@290 corner: 1000@330
938.5d@303.5d
900@310 corner: 920@330
20
79
1000@290
1020@290 corner: 1060@350
1000@290 corner: 1080@350
1031.5d@303.5d
1000@310 corner: 1020@330
540@290
560@290 corner: 640@350
540@290 corner: 660@350
562.5d@304.5d
S1
540@320
560@320
540@310 corner: 560@330
0
540@340
560@340
532.0d@343.5d
540@330 corner: 560@350
640@330 corner: 660@350
660@340
Откл
-20@-30
25.0d
3@10.0d
520@260 corner: 551.0d@278.0d
left
=
640@340
660@340 corner: 660@340
1000@340
1020@340
1000@330 corner: 1020@350
21
196
1090@330
1110@330 corner: 1165.0d@350
1090@330 corner: 1185.0d@350
1114@344.5d
1090@340
47.0d
GSM stop
6cc015a9-3e1c-4a0a-ba3c-aefa331b1bdd
1095.0d@340
1115.0d@340
1110@340
1080@340 corner: 1080@340
Q
1060@340
1080@340
1060@330 corner: 1080@350
1000@320
1020@320
1000@320 corner: 1000@320
Q
980@320
1000@320
980@310 corner: 1000@330
900@320
15000
EN
920@320
660.0d@260 corner: 660.0d@320
680@260
700@260
680@250 corner: 700@270
740@250 corner: 760@270
760@260
740@260
199
760@770
780@770 corner: 820@850
760@770 corner: 840@850
791.5d@783.5d
760@800
780@800
760@790 corner: 780@810
760@810 corner: 780@830
23
182
550@560
570@560 corner: 610@600
550@560 corner: 630@600
576.5d@574.5d
22
104
430@540
450@540 corner: 530@600
430@540 corner: 550@600
452.5d@554.5d
430@570
450@570
430@560 corner: 450@580
Balans
430@590
450@590
396.0d@593.5d
430@580 corner: 450@600
530@580 corner: 550@600
550@590
530@590
550@590 corner: 550@590
I
550@590
570@590
550@580 corner: 570@600
610@580 corner: 630@600
630@590
Q
610@590
24
103
850@560
870@560 corner: 1066.0d@620
850@560 corner: 1086.0d@620
938.5d@574.5d
850@580 corner: 870@600
GSM_USSD_CODE
#100#
850@610
870@610
818.0d@613.5d
GSM_USSD
USSD_CODE
dfa966b1-659d-4f8b-afd7-b6e7882198dd
5f58ed01-46ce-4404-8b3e-553768e13e2b
USSD_Get
6afa7838-b260-48de-8aca-c73fdbbbd8f8
9ff308dc-09ab-4009-a23c-ec89d9c3cc09
USSD_return
a6882191-0f5f-4452-89d7-aa44b029ead0
34252623-c450-434a-850d-9a22ddebfb32
91f05b2d-689d-46b8-a505-423a34db6ef7
GSM_USSD
#define
GSM_USSD
past_USSD_Get
=0;
bool
command_USSD_Get
=0;
bool
//Запрос баланса
if ( USSD_Get && !past_USSD_Get ) command_USSD_Get=1;
if ( command_USSD_Get && (team_room==0) ) { command_USSD_Get =0; team_room=4;} // начинать запрос баланса
180
void
causeProcessingUSSD
850@600 corner: 870@620
25
105
1090@580
1110@580 corner: 1190@620
1090@580 corner: 1210@620
1117.5d@594.5d
1090@600 corner: 1110@620
26
106
1240@580
1260@580 corner: 1340@620
1240@580 corner: 1360@620
1265.5d@594.5d
1240@600 corner: 1260@620
27
166
1370@530
1390@530 corner: 1477.0d@570
1370@530 corner: 1497.0d@570
1394@554.5d
1370@540
1390@540
1370@530 corner: 1390@550
1370@550 corner: 1390@570
1370@560
En
1390@560
1370@220
1390@220
1360@220 corner: 1360@610
Ch Str
31.0d
1340@610
1360@610
1340@600 corner: 1360@620
1240@610
Value
1260@610
1210@540 corner: 1210@610
Q
1190@610
1210@610
1190@600 corner: 1210@620
1090@610
constant
0
toEnd
Str
1110@610
1086.0d@610 corner: 1086.0d@610
GSM_USSD_return
92.0d
1066.0d@610
1086.0d@610
1066.0d@600 corner: 1086.0d@620
850@590
GSM_USSD_Get
8ab912a8-aa9d-4ebd-ac2e-6cb83d3d187e
Автор Слимпер
Работает только вместе с блоком GSM_Основной
Параметры
Time_USSD -время предельного ожидание ответа (в мс), т.е. по истечении которого выполнение запроса прекращается
Входы
GSM_USSD_Get - Отправить USSD запрос
GSM_USSD_CODE - код USSD запроса, пример *100# (для запроса баланса лучше использовать #100#, но работает не со всеми операторами )
Выходы
GSM_USSD_return - ответ на USSD запрос (есть ограничение максимально длинны ответа в 160 символов)
Все входы срабатывают по переднему фронту сигнала, т.е. при переходе из 0 (false) в 1 (true)
574
Time_USSD
Время ожидания ответа на USSD запрос, мс
6cc36228-6c3a-4a12-a771-be5877a869ef
917ac17a-f7c9-4188-a112-b305b82135a7
#define
GSM_INCLUSION_USSD
static bool GSM_past_USSD_Get=0;
static bool GSM_command_USSD_Get=0;
//Запрос баланса
if ( GSM_USSD_Get && !GSM_past_USSD_Get ) GSM_command_USSD_Get=1;
GSM_past_USSD_Get=GSM_USSD_Get;
if ( GSM_command_USSD_Get && (GSM_team_room==0) ) { GSM_command_USSD_Get =0; GSM_team_room=7;} // начинать запрос баланса
313
void
GSM_causeProcessingUSSD
#ifdef GSM_TYPE_SIM800
switch ( GSM_count ) {
case 0:
GSM_count ++;
break;
case 1:
GSM_AT_Command(F("CUSD=1,\""), GSM_USSD_CODE , 2 ) ;
break;
case 2:
GSM_wait=1; // ожитать
GSM_time =millis() +Time_USSD; // время ожидания
break;
case 3:
GSM_count=0;
GSM_Error_Code =0; //Сброc ошибки
return 1;
break;
}
return 0;
#else
switch ( GSM_count ) {
case 0:
GSM_count ++;
break;
case 1:
GSM_AT_Command(F("CUSD=1,\""), GSM_USSD_CODE , 2 ) ;
GSM_time =millis() +Time_USSD; // время ожидания
break;
case 2:
if ( GSM_analysisResponse(F("+CUSD") ) ) GSM_USSD_return = GSM_substring_commas(GSM_reply,5) ;
break;
case 3:
GSM_count=0;
GSM_Error_Code =0; //Сброc ошибки
return 1;
break;
}
return 0;
#endif
732
bool
GSM_USSD
196.0d
870@590
630@590 corner: 630@840
760@840
780@840
760@830 corner: 780@850
34
108
1180@810
1200@810 corner: 1287.0d@850
1180@810 corner: 1307.0d@850
1204@834.5d
33
172
1060@710
1080@710 corner: 1120@830
1060@710 corner: 1140@830
1085.0d@723.5d
29
173
970@730
990@730 corner: 1035.0d@750
970@730 corner: 1055.0d@750
994@744.5d
1035.0d@730 corner: 1055.0d@750
1055.0d@740
37.0d
avaria_
490bd970-4c46-429f-bf5d-db301cba0a38
970@740
990@740
1035.0d@740
1055.0d@740 corner: 1055.0d@740
1
1060@740
1080@740
1060@730 corner: 1080@750
30
123
970@750
990@750 corner: 1029.0d@770
970@750 corner: 1049.0d@770
994@763.5d
1029.0d@750 corner: 1049.0d@770
1049.0d@760
Status
1a713c6d-4337-45f6-9718-b17a105604f3
970@760
990@760
1029.0d@760
1049.0d@760 corner: 1049.0d@760
2
1060@760
1080@760
1060@750 corner: 1080@770
3
Temp:
1060@780
1080@780
1026.0d@784.5d
1060@770 corner: 1080@790
32
99
910@770
930@770 corner: 970@810
910@770 corner: 990@810
933.5d@783.5d
31
147
810@790
830@790 corner: 894.0d@810
810@790 corner: 914.0d@810
834@804.5d
894.0d@790 corner: 914.0d@810
914.0d@800
56.0d
Термистор
87ed204f-43cc-490f-ac21-59003097d908
810@800
830@800
894.0d@800
910@800 corner: 910@800
I
910@800
930@800
910@790 corner: 930@810
970@790 corner: 990@810
990@800
dec
Q
970@800
990@800 corner: 990@800
4
1060@800
1080@800
1060@790 corner: 1080@810
5
*C.
1060@820
1080@820
1041.0d@824.0d
1060@810 corner: 1080@830
1120@810 corner: 1140@830
1140@820
Не работает блок сумирования. При срабатывания Аварии не отправляется СМС с текстом аварии.
-260@-40
497.0d
3@12.0d
800@670 corner: 1303.0d@690.0d
Q
1120@820
1140@820 corner: 1140@820
1180@820
1200@820
1180@810 corner: 1200@830
1180@830 corner: 1200@850
1180@840
En
1200@840
840@840 corner: 840@840
Q
820@840
840@840
820@830 corner: 840@850
760@820
780@820
760@180 corner: 760@820
1370@180
1390@180
1370@170 corner: 1390@190
89
1270@460
1290@460 corner: 1330@500
1270@460 corner: 1350@500
1296.5d@474.5d
43
93
1170@460
1190@460 corner: 1250@500
1170@460 corner: 1270@500
1208.5d@473.5d
42
1080@460
1100@460 corner: 1160@500
1080@460 corner: 1180@500
1119.0d@473.5d
41
95
1010@440
1030@440 corner: 1070@500
1010@440 corner: 1090@500
1041.5d@453.5d
36
88
850@380
870@380 corner: 910@420
850@380 corner: 930@420
876.5d@394.5d
35
85
540@360
560@360 corner: 640@420
540@360 corner: 660@420
562.5d@374.5d
540@390
560@390
540@380 corner: 560@400
Pump1
540@410
560@410
506.0d@414.5d
540@400 corner: 560@420
640@400 corner: 660@420
660@410
640@410
660@410 corner: 660@410
I
850@410
870@410
850@400 corner: 870@420
910@400 corner: 930@420
930@410
910@410
37
158
960@400
980@400 corner: 1022.0d@420
960@400 corner: 1042.0d@420
984@414.5d
960@400 corner: 980@420
960@410
34.0d
Pump1
4d4dc9b1-129a-4efd-9793-4f51894a79dd
882.0d@410
902.0d@410
980@410
930@410 corner: 930@470
1010@470
1030@470
39
87
850@460
870@460 corner: 910@500
850@460 corner: 930@500
876.5d@474.5d
38
86
540@440
560@440 corner: 640@500
540@440 corner: 660@500
562.5d@454.5d
540@470
560@470
540@460 corner: 560@480
Pump2
540@490
560@490
505.0d@494.5d
540@480 corner: 560@500
640@480 corner: 660@500
660@490
640@490
660@490 corner: 660@490
850@490
870@490
930@490
910@490
40
950@510
970@510 corner: 1013.0d@530
950@510 corner: 1033.0d@530
974@524.5d
950@520
35.0d
Pump2
0d5a762c-49af-4ccc-a008-1d2d7a4f4d86
873.0d@520
893.0d@520
970@520
930@490 corner: 930@520
1010@490
1030@490
1090@490
Q
1070@490
1080@490 corner: 1080@490
EN
1080@490
1100@490
1180@490
6000
1160@490
1170@490 corner: 1170@490
1170@490
1190@490
1170@480 corner: 1190@500
1250@480 corner: 1270@500
1270@490
5000
1250@490
1270@490 corner: 1270@490
1270@490
1290@490
1270@480 corner: 1290@500
1330@480 corner: 1350@500
1350@490
1330@490
1350@200 corner: 1350@490
1370@200
1390@200
1370@190 corner: 1390@210
1370@210 corner: 1390@230
1370@240
1390@240
1370@230 corner: 1390@250
46
1480@230
1500@230 corner: 1582.0d@250
1480@230 corner: 1602.0d@250
1504@244.5d
1480@230 corner: 1500@250
1480@240
1422.0d@240
1442.0d@240
1500@240
1450@240 corner: 1450@240
Q
1430@240
1450@240
1430@230 corner: 1450@250
1370@160
1390@160
670@160 corner: 670@800
640@220
660@220
640@210 corner: 660@230
580@220
600@220
580@220 corner: 580@220
570@220
590@220
570@210 corner: 590@230
470@200
Status
-30@0
3@10.0d
440@170 corner: 477.0d@188.0d
490@200
388.0d@80 corner: 388.0d@570
540@80
560@80
540@70 corner: 560@90
1
540@100
560@100
534.0d@103.5d
540@90 corner: 560@110
640@90 corner: 660@110
ВКЛ
-20@0
21.0d
3@10.0d
520@50 corner: 547.0d@68.0d
55
180@790
200@790 corner: 242.0d@810
180@790 corner: 262.0d@810
204@804.5d
56
260@750
280@750 corner: 320@810
260@750 corner: 340@810
288.5d@763.5d
53
260@810
280@810 corner: 320@870
260@810 corner: 340@870
288.5d@823.5d
260@830 corner: 280@850
52
71
180@850
200@850 corner: 243.0d@870
180@850 corner: 263.0d@870
204@864.5d
263.0d@860
180@860
200@860
243.0d@860
260@860 corner: 260@860
260@860
280@860
260@850 corner: 280@870
54
121
490@830
510@830 corner: 549.0d@870
490@830 corner: 569.0d@870
514@853.5d
Pump 2 open
490@840
510@840
425.0d@844.5d
490@830 corner: 510@850
490@850 corner: 510@870
490@860
En
510@860
340@860 corner: 340@860
320@860
340@860
320@850 corner: 340@870
260@840
280@840
51
80@800
100@800 corner: 145.0d@820
80@800 corner: 165.0d@820
104@813.5d
145.0d@800 corner: 165.0d@820
165.0d@810
Работа
92ab7c92-5a6c-4f5a-aeed-4f3c905b14bc
80@810
100@810
145.0d@810
165.0d@780 corner: 165.0d@840
260@780
280@780
260@770 corner: 280@790
260@790 corner: 280@810
57
120
490@770
510@770 corner: 549.0d@810
490@770 corner: 569.0d@810
514@793.5d
Pump 1 open
490@780
510@780
425.0d@784.5d
490@800
510@800
340@800 corner: 340@800
320@800
340@800
320@790 corner: 340@810
260@800
280@800
260@800 corner: 260@800
242.0d@800
262.0d@800
242.0d@790 corner: 262.0d@810
180@800
200@800
130@30
150@30 corner: 284.0d@50
130@30 corner: 304.0d@50
155.0d@44.5d
GSM_Телефонная книга
e72ff09e-913d-491a-8f45-ed646bd08096
GSM_Телефонная книга
Автор Слимпер
Работает только вместе с блоком GSM_Основной
Name_Contaсt - Префикс имени контакта, по этой части осуществляется поиск в телефонной книге, подробнее см ниже
Number_Contacts - Максимальное число рабочих контактов, подробнее см ниже
White_list - отправлять смс: 1- только на номера из телефонной книге, 0 - на любой номер поданный на вход Phone
Подробнее о работе с телефонной книгой SIM-карты.
Предназначено для возможности задачи рабочих номеров не в проекте, а на сим карте, и главное возможности смены рабочих номеров, без перепрограммирования контроллера.
Система такая. В телефонной книге SIM-карты создаются несколько контактов, согласно требованиям:
1. В имени контакта только латинские символы и цифры, символы (_-+=*).
2. Все имена должны начинаться на один префикс (например Test) .
3. Имена должны быть уникальны (Test1, Test2, Test_master).
В настройках блока надо настроить следующие пункты:
Name_Contaсt – здесь надо указать Префикс (приставку), что бала описана в пункте 2 (например Test)
Number_Contacts – задать максимально возможное количество контактов, если в записной книге окажется большее число контактов с префиксом Name_Contaсt, то остальные будет отброшены.
Ограничение введено, так как каждый контакт занимает значимое количество память контроллера.
White_list = 1, для отправки смс только на те номера, что удовлетворяют требованиям, описаны выше.
В этом случаи на вход Phone можно подавать, только имена контактов.
Если контакт есть в телефонной книге то на выходе T_Nomer, при звонке и входящей СМС будет выдано имя контакта (например Test1), в противном случаи сам номер.
Имя контакта чувствительно к регистру, т.е Test не равно TEST.
1694
Name_Contaсt
Test
Префикс имени контакта
ce17e368-6985-4f40-a5ee-91c494322762
admin
73b43200-5e22-4107-a260-32e6ef300d26
Number_Contacts
Максимальное число рабочих кантакотов
42f0efbc-5b97-4267-9dc6-18b58f05fd47
f4a50a98-3bc3-489e-9369-c3af7c0fc0b7
White_list
только разрешенные номера
51ceb54a-2631-4792-8ede-6d602f799034
f8a94d22-f51b-4e73-a29a-a15cacf5f6aa
#define
TELEFONNAYA_BOOK
GSM_Number_Contacts
= Number_Contacts ;
const byte
GSM_White_list
= White_list;
const bool
GSM_Name_Contact
[] = Name_Contaсt ;
const char
Массив телефоных номеров
GSM_Telefon
[Number_Contacts];
String
Массив имен номеров
GSM_Contact
[Number_Contacts];
String
Индекс массива телефонной книге
GSM_index_array
=0;
byte
for (int i = 0; i < Number_Contacts ; i = i + 1)
{if(array[i].equals(value)){return i;}}
return -1;
102
int
GSM_StringArray
String
array[]
String
value
134.0d
50
119
490@710
510@710 corner: 549.0d@750
490@710 corner: 569.0d@750
514@733.5d
STOP-OK.
490@720
510@720
439.0d@723.5d
490@710 corner: 510@730
49
260@690
280@690 corner: 320@750
260@690 corner: 340@750
291.5d@703.5d
47
170
170@710
190@710 corner: 221.0d@730
170@710 corner: 241.0d@730
194@724.5d
241.0d@720
23.0d
Stop
19a5e39e-66d2-4101-9263-24babd4cf68e
170@720
221.0d@720
241.0d@720 corner: 241.0d@720
260@720
280@720
48
171
170@730
190@730 corner: 230.0d@750
170@730 corner: 250.0d@750
194@743.5d
250.0d@740
170@740
230.0d@740
250.0d@740 corner: 250.0d@740
260@740
280@740
340@740
320@740
340@740 corner: 340@740
490@740
510@740
490@730 corner: 510@750
186
190@120
210@120 corner: 288.0d@140
190@120 corner: 308.0d@140
215.0d@134.5d
GSM_SIM800
2769bb6f-3998-4be8-a8cc-56c33cec585b
GSM_SIM800
Автор Слимпер
Работает только вместе с блоком GSM_Основной
Предназначен для переключения блоков на работу с модулем Sim800
Уникальные для модуля функции прописываются в этом блоке.
Коды стандартных ошибок описаны в блоке GSM_Основной, специфические здесь:
Первичная инициализация модуля, после старта:
1 - Ошибка команды – Отключить эхо ответ
2 - Ошибка команды - Проверка готовности модуля к работе
4 - Ошибка команды - Проверка регистрации в сети
6 - Ошибка команды - Отключение приема широковещательных сообщений
7 - Ошибка команды - Настройка автоматического определения номера
8 - Ошибка команды – Настройки текстового формата SMS сообщений
9 - Ошибка команды – Выбора кодировки текста, кодировка ASCII
10 - Ошибка команды – Выдавать СМС в терминал и не сохранять в память
11 - Ошибка команды - Включение работы с DTMF
12 - Ошибка команды – Проверка наличия контактов в телефонной книге SIM карты
14 - Ошибка команды – Запрос контактов начинающихся на Name_Contaсt, см. блок Телефонная книга
1005
#define
Module_Start
"Call Ready"
#define
GSM_TYPE_SIM800
switch ( GSM_count ) {
case 0:
GSM_count ++;
break;
case 1:
GSM_Command(F("ATE0") ,2 ) ; //отключение эхо ответа
break;
case 2:
GSM_AT_Command(F("CPAS"),4); // проверка готовности модуля к работе
break;
case 3:
GSM_analysisResponse(F("+CPAS: 0") );
break;
case 4:
GSM_AT_Command(F("CREG?"),10); //Проверка регистрации в сети
break;
case 5:
if ( GSM_analysisResponse(F("+CREG") )){
if( ( GSM_reply.endsWith("1")) || ( GSM_reply.endsWith("5"))) { GSM_Net =1;} // 1-В домашней сети, 5- в роуминге
else { GSM_err(0,1); GSM_count--; }
}
break;
case 6:
GSM_AT_Command(F("CSCB=1") ,2 ) ; // Отключение приема широковещательных сообщений
break;
case 7:
GSM_AT_Command(F("CLIP=1") ,2 ) ; // настройки автоматического определения номера
break;
case 8:
GSM_AT_Command(F("CMGF=1") ,2 ) ; //настройки формата SMS сообщений, текстовый
break;
case 9:
GSM_AT_Command(F("CSCS=\"GSM\"") ,2 ) ; // выбора кодировки текста, кодировка ASCII
break;
case 10:
GSM_AT_Command(F("CNMI=2,2,0,0,0") ,2 ) ; //выдовать смс в терминал и не сохранять в память
break;
case 11:
#ifdef GSM_INCLUSION_DTMF // Если добвален блок DTMF
GSM_AT_Command(F("DDET=1") ,5 ); // Включение работы с DTMF
#else
GSM_count ++;
#endif
break;
#ifdef TELEFONNAYA_BOOK // Если использовать телефонну книгу
case 12:
GSM_AT_Command(F("CPBS?"),2);
break;
case 13:
GSM_analysisResponse(F("+CPBS: \"SM\"") );
break;
case 14:
GSM_AT_Command(F("CPBF=\""), GSM_Name_Contact , 2 ) ;
GSM_index_array =0;
break;
case 15:
#else //Если не использовать телефонную книгу
case 12:
#endif //Окнчание выбора по телефонной книге
GSM_count=0;
GSM_Error_Code =0; //Сброc ошибки
return 1;
break;
}
return 0;
1733
bool
GSM_setup_comand
78.0d
187
50@110
70@110 corner: 150.0d@130
50@110 corner: 170.0d@130
75.0d@124.0d
GSM Отладка
b779cd2c-c9d2-4f13-98a5-b0b3f2cb3d3a
GSM Отладка
Автор Слимпер
Работает только вместе с блоком GSM_Основной
Необходим для поиска неисправностей. Для включения выдачи отладочных сообщений достаточно просто добавить этот блок в проект.
Условие работы. Модуль должен быть подключен не к пинам 0 и 1. Так как отладочную информацию он будет присылать в порт Serial (USB).
321
Serial.begin(9600);//Тест
Serial.println("Test");
#define
GSM_DEBUG
80.0d
60@470
60@470 corner: 362.0d@504.0d
Все входящие СМС исполняются, кроме команды S (Status).
Не отправляется обрано СМС с статусом.
Все входящие СМС исполняются, кроме команды S (Status).
296.0d
3@12.0d
Не отправляется обрано СМС с статусом.
210.0d
3@26.0d
951.0d
Авария
290@230
310@230 corner: 390.0d@250
290@230 corner: 410.0d@250
314@244.5d
490@210
510@210 corner: 550@270
490@210 corner: 570@270
518.5d@223.5d
490@240
112
200@80
220@80 corner: 252.0d@100
200@80 corner: 272.0d@100
224@93.5d
272.0d@90
24.0d
Start
d2c1ba48-ddab-4404-bee5-4ff5e0c49984
200@90
220@90
252.0d@90
153
490@40
510@40 corner: 550@100
490@40 corner: 570@100
518.5d@53.5d
156
380@20
400@20 corner: 460@80
380@20 corner: 480@80
414.5d@34.0d
152
270@40
290@40 corner: 357.0d@60
270@40 corner: 377.0d@60
294@54.5d
377.0d@50
Детектор газа QM6 А7
-220@0
116.0d
3@12.0d
50@40 corner: 172.0d@60.0d
59.0d
Датчик газа
9306b6b2-935c-4651-868e-ea94e91a6226
A7
analogInput
357.0d@50
377.0d@50 corner: 377.0d@50
I1
380@50
400@50
I2
500
380@70
400@70
360.0d@73.5d
480@70
<
Q
460@70
480@70 corner: 480@70
490@70
510@70
490@90
230
680@60
700@60 corner: 740@120
680@60 corner: 760@120
712.5d@73.5d
680@90
226
1020@310
1040@310 corner: 1095.0d@330
1020@310 corner: 1115.0d@330
1044@324.5d
1115.0d@320
1020@320
1040@320
1095.0d@320
1140@230
1160@230 corner: 1200@290
1140@230 corner: 1220@290
1172.5d@243.5d
1060@170
1080@170 corner: 1120@270
1060@170 corner: 1140@270
1091.5d@183.5d
223
930@80
950@80 corner: 995.0d@120
930@80 corner: 1015.0d@120
954@104.5d
AVARIA. Visokaia zagazovanosti !!!
930@90
950@90
763.0d@94.5d
930@110
En
950@110
Q
740@110
760@110
760@110 corner: 760@200
922.0d@106.5d corner: 928.0d@113.5d
762@106.5d corner: 768.0d@113.5d
1052.0d@196.5d corner: 1058.0d@203.5d
1
1060@200
1080@200
229
930@170
950@170 corner: 995.0d@210
930@170 corner: 1015.0d@210
954@194.5d
AVARIA Visocaia temperatura
930@180
950@180
787.0d@184.5d
930@170 corner: 950@190
930@190 corner: 950@210
930@200
950@200
680@150
700@150 corner: 740@210
680@150 corner: 760@210
712.5d@163.5d
195
490@130
510@130 corner: 550@190
490@130 corner: 570@190
518.5d@143.5d
380@110
400@110 corner: 460@170
380@110 corner: 480@170
414.5d@124.0d
270@130
290@130 corner: 354.0d@150
270@130 corner: 374.0d@150
294@144.5d
374.0d@140
270@140
290@140
354.0d@140
374.0d@140 corner: 374.0d@140
I1
380@140
400@140
380@130 corner: 400@150
I2
60
380@160
400@160
366.0d@163.5d
380@150 corner: 400@170
460@150 corner: 480@170
480@160
>
Q
460@160
480@160 corner: 480@160
490@160
510@160
490@180
510@180
570@180
550@180
570@180 corner: 570@180
S
680@180
700@180
R
680@200
700@200
760@200
740@200
770@200 corner: 770@220
920.0d@196.5d corner: 928.0d@203.5d
762@196.5d corner: 770.0d@203.5d
1050.0d@216.5d corner: 1058.0d@223.5d
2
1060@220
1080@220
227
930@250
950@250 corner: 995.0d@290
930@250 corner: 1015.0d@290
954@274.5d
AVARIA Datcik urovnea
930@260
950@260
818.0d@264.0d
930@250 corner: 950@270
930@270 corner: 950@290
930@280
950@280
228
680@230
700@230 corner: 740@290
680@230 corner: 760@290
712.5d@243.5d
Q
550@260
570@260
570@260 corner: 570@260
680@260
700@260
680@250 corner: 700@270
680@280
700@280
680@270 corner: 700@290
740@270 corner: 760@290
760@280
740@280
770@240 corner: 770@280
920.0d@276.5d corner: 928.0d@283.5d
762@276.5d corner: 770.0d@283.5d
1050.0d@236.5d corner: 1058.0d@243.5d
3
1060@240
1080@240
188
680@310
700@310 corner: 740@370
680@310 corner: 760@370
712.5d@323.5d
113
490@290
510@290 corner: 550@350
490@290 corner: 570@350
518.5d@303.5d
490@320
510@320
490@310 corner: 510@330
203
290@330
310@330 corner: 379.0d@350
290@330 corner: 399.0d@350
314@343.5d
399.0d@340
61.0d
компрессор
587a7130-9eb7-41b6-b42f-654810c56cc3
290@340
310@340
385.0d@340
399.0d@340 corner: 399.0d@340
490@340
510@340
490@330 corner: 510@350
550@330 corner: 570@350
570@340
Q
550@340
570@340 corner: 570@340
680@340
700@340
680@360
700@360
760@360
740@360
930@330
950@330 corner: 995.0d@370
930@330 corner: 1015.0d@370
954@354.5d
AVARIA Compresor
930@340
950@340
836.0d@344.5d
930@330 corner: 950@350
930@350 corner: 950@370
930@360
950@360
760@260 corner: 760@360
762@356.5d corner: 771.0d@363.5d
919.0d@356.5d corner: 928.0d@363.5d
1049.0d@256.5d corner: 1058.0d@263.5d
4
1060@260
1080@260
1140@260
Q
1120@260
1140@260 corner: 1140@260
S
1140@260
1160@260
1140@280
1220@270
1240@270 corner: 1280.0d@290
1220@270 corner: 1300.0d@290
1244@283.5d
1220@280
1280.0d@280
1300.0d@280
1240@280
1220@280 corner: 1220@280
Q
1200@280
1220@280
R
1160@280
680@110 corner: 680@360
1117.0d@315.5d corner: 1138.0d@324.5d
1117.0d@275.5d corner: 1138.0d@284.5d
657.0d@195.5d corner: 678.0d@204.5d
657.0d@355.5d corner: 678.0d@364.5d
657.0d@275.5d corner: 678.0d@284.5d
657.0d@105.5d corner: 678.0d@114.5d
stop
680@110
700@110
700@90
570@90 corner: 570@90
550@90
570@90
510@90
272.0d@90 corner: 272.0d@320
490@260
510@260
510@240
410.0d@240 corner: 410.0d@240
390.0d@240
410.0d@240
72.0d
Датчик уровня
68c0e70f-0d76-4c2f-9760-78c81764cd37
290@240
310@240
60@230
60@230 corner: 192.0d@250.0d
center
Контроль датчика уровня
126.0d
3@12.0d
50@140
50@140 corner: 198.0d@160.0d
Контроль термо датчика А5
142.0d
3@12.0d
40@310
40@310 corner: 215.0d@358.0d
Контроль давления компрессора.
Не запуститься, пока не будет
давление в системе (2 Атм)
Контроль давления компрессора.
169.0d
3@12.0d
Не запуститься, пока не будет
154.0d
3@26.0d
давление в системе (2 Атм)
139.0d
3@40.0d
451.0d
arduinoIDE
each
landscape
all
165
1024
197524063
Arduino Nano - Old Bootloader
232428645
default