0@0 LibraryRoot LibraryGroup-Сравнение 0@0 475 0@-20 228 324 0@-48 root output globalVariable 1 0c719606-49f4-4f25-8b4b-7b3af4eafef4 0@-144 0 4 сим 800 5 220@60 240@60 corner: 438.0d@280 220@60 corner: 458.0d@280 299.0d@75.0d GSM_In_sms 220@90 240@90 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 220@80 corner: 240@100 GSM_Phone 220@110 240@110 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 220@100 corner: 240@120 GSM_text 220@130 240@130 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 220@120 corner: 240@140 140@120 160@120 corner: 200@160 140@120 corner: 220@160 166.5d@134.5d 3 20@140 40@140 corner: 117.0d@160 20@140 corner: 137.0d@160 44@154.5d 20@150 40@150 20@140 corner: 40@160 117.0d@140 corner: 137.0d@160 137.0d@150 Сбросить сигнал если нет моих номеров в списке сброс_звонка 2 69.0d 9.0d 0.0d 117.0d@150 137.0d@150 corner: 137.0d@150 I 140@150 160@150 220@150 Q 9.0d 200@150 220@150 corner: 220@150 GSM_Reject_call 220@150 240@150 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); 225 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 220@140 corner: 240@160 14 480@20 500@20 corner: 560@100 480@20 corner: 580@100 514.0d@33.5d 0 net 480@50 500@50 463.0d@53.5d 480@40 corner: 500@60 1 set 480@70 500@70 464.0d@73.5d 480@60 corner: 500@80 480@80 corner: 500@100 15 660@40 680@40 corner: 760@100 660@40 corner: 780@100 707.5d@53.5d EN 660@70 680@70 640.0d@73.5d 660@60 corner: 680@80 660@80 corner: 680@100 660@90 16 27 D 680@90 580@90 corner: 580@90 Q 9.0d 560@90 580@90 560@80 corner: 580@100 480@90 S 500@90 458.0d@90 corner: 458.0d@90 GSM_start 51.0d 438.0d@90 458.0d@90 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 10 Номер пина, см описание 2442ead9-2f53-4a6d-8299-db1be1540ae1 6fe9eca6-8a6e-4b35-9b52-c72d1faadca0 TX 11 Номер пина, см описание 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 438.0d@80 corner: 458.0d@100 13 560@100 580@100 corner: 651.0d@120 560@100 corner: 671.0d@120 584@113.5d 560@100 corner: 580@120 560@110 регистрация 396@286 200657154 63.0d 7.0d 580@110 458.0d@110 corner: 458.0d@110 GSM_Net 48.0d 438.0d@110 458.0d@110 438.0d@100 corner: 458.0d@120 GSM_dBm 53.0d 438.0d@130 458.0d@130 438.0d@120 corner: 458.0d@140 GSM_Received_SMS 104.0d 438.0d@150 458.0d@150 438.0d@140 corner: 458.0d@160 GSM_Text_sms 76.0d 438.0d@170 458.0d@170 438.0d@160 corner: 458.0d@180 12 660@120 680@120 corner: 760@180 660@120 corner: 780@180 707.5d@133.5d 660@150 680@150 640.0d@153.5d 660@140 corner: 680@160 660@160 corner: 680@180 660@170 680@170 6 500@200 520@200 corner: 600@260 500@200 corner: 620@260 524.5d@214.5d 500@220 corner: 520@240 670@200 690@200 corner: 750@260 670@200 corner: 770@260 701.5d@214.0d 670@220 corner: 690@240 I2 -1 670@250 690@250 660.0d@253.5d 670@240 corner: 690@260 790@240 810@240 corner: 887.0d@260 790@240 corner: 907.0d@260 814@254.5d 790@240 corner: 810@260 887.0d@250 907.0d@250 887.0d@240 corner: 907.0d@260 790@250 69.0d 9.0d 810@250 770@250 corner: 770@250 Q 9.0d 750@250 770@250 750@240 corner: 770@260 670@230 == I1 690@230 620@230 corner: 620@230 Index 28.0d 600@230 620@230 600@220 corner: 620@240 7 660@280 680@280 corner: 861.0d@340 660@280 corner: 881.0d@340 738.0d@294.5d GSM_Outgoing_Call 660@310 680@310 GSM_Звонки Outgoing_Call 6cb1a186-2914-4c90-add6-c291cf038ccd Исходящий вызов b5a58d66-f801-4941-a03e-b707c4ae51a9 Take_Call 6a2f762a-84a0-43e9-9b73-530ab91ef591 Поднять трубку c995f6e4-12eb-4c74-8b6b-41bdfd153fea GSM_Connect 7dbaffb6-70bb-4454-a7c6-86aead50b2c5 e0dbbe64-ddcd-4462-afa1-a6c3d964c5a1 052e4005-225e-41e1-964f-da5cf0972e64 GSM_Звонки #define GSM_CALLS past_Outgoing_Call =0; bool command_Outgoing_Call =0; bool if ( Outgoing_Call && !past_Outgoing_Call ) command_Outgoing_Call =1; past_Outgoing_Call = Outgoing_Call ; if ( command_Outgoing_Call && (_team_room==0) ) { command_Outgoing_Call =0; return 5; } // начинать запрос времени return _team_room; 260 byte causeProcessingCall byte _team_room if ( Take_Call && !past_Take_Call ) command_ Take_Call =1; past_Take_Call = Take_Call; if ( command_Take_Call && (_team_room==1) ) { command_Take_Call =0; return 10; } return _team_room; 208 byte causeProcessingTake byte _team_room 660@300 corner: 680@320 660@320 corner: 680@340 8 900@300 920@300 corner: 960@360 900@300 corner: 980@360 928.5d@313.5d 900@320 corner: 920@340 900@350 920@350 900@340 corner: 920@360 9 980@340 1000@340 corner: 1043.0d@360 980@340 corner: 1063.0d@360 1004@352.5d 980@340 corner: 1000@360 980@350 конект 398@418 197900210 35.0d 5.0d 1000@350 980@350 corner: 980@350 Q 9.0d 960@350 980@350 960@340 corner: 980@360 900@330 920@330 881.0d@330 corner: 881.0d@330 71.0d 861.0d@330 881.0d@330 861.0d@320 corner: 881.0d@340 660@330 GSM_Take_Call 07e42393-792b-4897-af90-b11504cb49d2 Автор Слимпер Работает только вместе с блоком GSM_Основной Входы GSM_Outgoing_Call - исходящий вызов, Позвонить на номер указанный GSM_Phone основного блока GSM_Take_Call - поднять трубку, ответить на входящий вызов. !!! В М590 не работает. Выходы GSM_Connect - Статус Установлено голосовое соединение Все входы срабатывают по переднему фронту сигнала, т.е. при переходе из 0 (false) в 1 (true) 406 #define GSM_INCLUSION_CALLS static bool past_Outgoing_Call=0; static bool command_Outgoing_Call=0; if ( GSM_Outgoing_Call && !past_Outgoing_Call ) command_Outgoing_Call =1; past_Outgoing_Call = GSM_Outgoing_Call ; if ( command_Outgoing_Call && (GSM_team_room==0) ) { command_Outgoing_Call =0; return 1;} // начинать запрос времени return 0; 330 bool GSM_causeProcessingCall static bool past_Take_Call; static bool command_Take_Call; if ( GSM_Take_Call && !past_Take_Call ) { command_Take_Call=1; } past_Take_Call = GSM_Take_Call; if ( command_Take_Call ) { switch ( GSM_count ) { case 0: GSM_count++; break; case 1: GSM_Command(F("ATA"), 5); // Поднять трубку #ifdef GSM_DEBUG // отладка Serial.println("Command: ATA" ); #endif break; case 2: GSM_count=0; command_Take_Call =0; return 1; break; } } return 0; 491 bool GSM_causeProcessingTake 181.0d 680@330 620@250 corner: 620@350 Exist 24.0d 600@250 620@250 600@240 corner: 620@260 500@230 moi 0 1 +79157777777 +79157777771 +79157777772 +79157777773 +79157777774 +79157777775 Value 520@230 458.0d@170 corner: 458.0d@230 GSM_T_Nomer 76.0d 438.0d@190 458.0d@190 438.0d@180 corner: 458.0d@200 GSM_Sent_SMS 82.0d 438.0d@210 458.0d@210 438.0d@200 corner: 458.0d@220 GSM_Call 50.0d 438.0d@230 458.0d@230 438.0d@220 corner: 458.0d@240 GSM_Number_calls 96.0d 438.0d@250 458.0d@250 438.0d@240 corner: 458.0d@260 GSM_Error_Code 84.0d 438.0d@270 458.0d@270 438.0d@260 corner: 458.0d@280 GSM_Основной 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 220@30 240@30 corner: 318.0d@50 220@30 corner: 338.0d@50 245.0d@44.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 310@30 330@30 corner: 440.0d@50 310@30 corner: 460.0d@50 335.0d@44.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 f55b25c3-4009-4624-b781-3402fd6f79e7 c5840656-6b2d-46f0-ae27-ac6a937eb8e8 TX 790ba25a-2b70-47ba-83e5-9472fb5438d6 989fc788-fdf9-48c4-b2bd-3dea4d4707b3 #include <SoftwareSerial.h> Serial_S ( RX , TX ); SoftwareSerial 110.0d 450 (0 to: 450) nomer cвои_номера arduinoIDE 197 1024 Arduino Uno 142360727