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