== 490@220 510@220 corner: 550.0d@260 490@220 corner: 570.0d@260 514@244.5d 160@80 180@80 corner: 327.0d@300 160@80 corner: 347.0d@300 227.0d@94.0d 70@100 90@100 corner: 129.0d@120 70@100 corner: 149.0d@120 94@113.5d 70@110 90@110 70@100 corner: 90@120 129.0d@100 corner: 149.0d@120 149.0d@110 1 gosms 2 31.0d 7.0d 0.0d 129.0d@110 149.0d@110 corner: 149.0d@110 In_sms 160@110 180@110 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 160@100 corner: 180@120 70@120 90@120 corner: 130.0d@140 70@120 corner: 150.0d@140 94@134.5d 70@130 90@130 70@120 corner: 90@140 130.0d@120 corner: 150.0d@140 150.0d@130 teleph 0 32.0d 9.0d 0.0d 130.0d@130 150.0d@130 corner: 150.0d@130 Phone 160@130 180@130 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 160@120 corner: 180@140 text stop 160@150 180@150 139.0d@154.5d SIM 900 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 160@140 corner: 180@160 Reject_call 160@170 180@170 m590 mega2560 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 160@160 corner: 180@180 Get_Balance 160@190 180@190 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 160@180 corner: 180@200 18.0d 327.0d@110 347.0d@110 327.0d@100 corner: 347.0d@120 23.0d 327.0d@130 347.0d@130 327.0d@120 corner: 347.0d@140 En 490@250 510@250 780@250 800@250 corner: 840@310 780@250 corner: 860@310 808.5d@263.5d 490@140 510@140 corner: 590@200 490@140 corner: 610@200 515.0d@154.0d 46.0d 327.0d@190 347.0d@190 420@40 440@40 corner: 520@100 420@40 corner: 540@100 445.0d@54.0d 420@60 corner: 440@80 SubStr stop1628 420@90 440@90 375.0d@94.5d 420@80 corner: 440@100 550@60 570@60 corner: 610@120 550@60 corner: 630@120 578.5d@73.5d 550@80 corner: 570@100 550@110 570@110 550@100 corner: 570@120 880@210 900@210 corner: 940@270 880@210 corner: 960@270 911.5d@223.5d 880@240 Q 9.0d 840@300 860@300 880@80 900@80 corner: 960@180 880@80 corner: 980@180 919.0d@93.5d C 880@110 900@110 760@120 780@120 corner: 820@160 760@120 corner: 840@160 786.5d@134.5d 660@120 680@120 corner: 740@160 660@120 corner: 760@160 698.5d@133.5d EN 660@150 680@150 640.0d@153.5d 660@140 corner: 680@160 740@140 corner: 760@160 760@150 10 Q 9.0d 740@150 760@150 corner: 760@150 I 760@150 780@150 840@150 9.0d 820@150 840@130 corner: 840@150 SP 880@130 900@130 750@180 770@180 corner: 830@220 750@180 corner: 850@220 773.5d@193.5d 850@210 asss 0 V 10.0d 830@210 850@150 corner: 850@210 P 880@150 900@150 880@170 990@160 1010@160 corner: 1035.0d@180 990@160 corner: 1055.0d@180 1014@173.5d 990@170 1035.0d@170 1055.0d@170 asd 9 17.0d 7.0d 1010@170 1040@120 1060@120 corner: 1140@160 1040@120 corner: 1160@160 1061.0d@134.5d 1040@150 1210@120 1230@120 corner: 1290@180 1210@120 corner: 1310@180 1233.5d@133.5d 1210@150 1150@160 1170@160 corner: 1195.0d@180 1150@160 corner: 1215.0d@180 1174@173.5d 1150@170 1215.0d@170 17.0d 7.0d 0.0d 1195.0d@170 1210@170 corner: 1210@170 V 1210@170 1230@170 EN 1230@150 1160@150 corner: 1160@150 Q 9.0d 1140@150 1160@150 Value 1060@150 980@150 corner: 980@170 V 10.0d 960@170 980@170 up R 900@170 860@170 corner: 860@300 880@260 900@260 970@250 990@250 corner: 1029.0d@270 970@250 corner: 1049.0d@270 994@263.5d 970@260 1029.0d@260 1049.0d@260 31.0d 7.0d 990@260 960@260 corner: 960@260 Q 9.0d 940@260 960@260 900@240 630@110 corner: 630@240 9.0d 610@110 630@110 610@100 corner: 630@120 550@90 570@90 540@90 corner: 540@90 Contain 38.0d 520@90 540@90 520@80 corner: 540@100 420@70 startToEnd Str 440@70 347.0d@70 corner: 347.0d@190 490@170 510@170 490@160 corner: 510@180 run1628 490@190 510@190 450.0d@193.5d 490@180 corner: 510@200 590@180 corner: 610@200 610@190 38.0d 590@190 610@190 corner: 610@280 780@280 800@280 780@300 800@300 357.0d@110 corner: 357.0d@300 74.0d 327.0d@150 347.0d@150 327.0d@140 corner: 347.0d@160 52.0d 327.0d@170 347.0d@170 327.0d@160 corner: 347.0d@180 327.0d@180 corner: 347.0d@200 327.0d@200 corner: 347.0d@220 54.0d 327.0d@230 347.0d@230 327.0d@220 corner: 347.0d@240 20.0d 327.0d@250 347.0d@250 327.0d@240 corner: 347.0d@260 66.0d 327.0d@270 347.0d@270 327.0d@260 corner: 347.0d@280 40.0d 327.0d@290 347.0d@290 327.0d@280 corner: 347.0d@300 347.0d@210 m590 UNO 326e78b4-53a1-4bce-8129-c975eb40688d m590 UNO инфо 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 19200 RX 6e1ddb20-145c-4793-8f48-28dbe1d077f6 6 ec7273f1-2a4b-4077-92f4-8703a9ea89ad TX 11 a3f1a990-dbdd-47e8-8a23-4d9ff3a9f444 7 fcb1a786-507a-4648-ba31-b4c8caddcc70 return_AT_2=0; Received_SMS =0; //Сброс статутса СМС Принята Sent_SMS =0; //Сброс статуса СМС Отправлена Error_Code =0; //Сбром ошибки reply=""; //Сброс содержимого прошлого ответа модуля T_millis =millis(); if (Serial100.available()||wait_Serial){ if (!wait_Serial){wait_Serial=1; time_Serial=T_millis+150;} if (T_millis >time_Serial)//ожидаем полного получения команды {wait_Serial=0; while(Serial100.available()) //Получаем данные с модема {ch = Serial100.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; 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;} //должно быть последним 2318 delay(2000); //пауза на включение модуля Serial100.begin( speed ); delay(50); Serial100.println("AT+CMGF=1"); delay(50); Serial100.println("AT+CSCS=\"GSM\""); delay(50); Serial100.println("AT+CNMI=2,2,0,0,0"); delay(50); Serial100.println("AT+CLIP=1"); delay(50); Serial100.println("ATE0"); delay(50); #include <SoftwareSerial.h> Serial100 ( RX , TX ); SoftwareSerial 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("") -Хранить строку в Флеш памяти 1128 // tip 1- без \r и \n // tip 2- с \r и \n wait=1; count_++; time1 =T_millis + Time_wait; if(tip==1) Serial100.print(text_com); else if(tip==2){ Serial100.println(text_com); } else if(tip==3){ Serial100.print(text_com); Serial100.println((char)26); } 260 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_=0; st=1; } break; } return st; 506 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; break; } return st; 268 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; break; } return st; 782 bool setup_comand 147.0d 46.0d 327.0d@210 347.0d@210 corner: 347.0d@230 490@230 510@230 490@220 corner: 510@240 490@240 corner: 510@260 32.0d 9.0d 1060@180 1080@180 corner: 1140@240 1060@180 corner: 1160@240 1091.5d@194.0d 990@200 1010@200 corner: 1035.0d@220 990@200 corner: 1055.0d@220 1014@213.5d 990@210 1055.0d@210 17.0d 7.0d 0.0d 1035.0d@210 1055.0d@210 corner: 1055.0d@210 I1 1060@210 1080@210 I2 1060@230 1080@230 1052.0d@233.5d 1170@220 1190@220 corner: 1222.0d@240 1170@220 corner: 1242.0d@240 1194@233.5d 1170@230 rele1 24.0d 7.0d 1190@230 1160@230 corner: 1160@230 Q 9.0d 1140@230 1160@230 == (0 to: 400) 2 3 3 4 4 rele2 999 stop stop run 5 run 998 11 111 8 eppreae Arduino Nano(ATmega328) 12 13 14 15 16 17 18 19 20 21 Общие сведения Платформа Nano, построенная на микроконтроллере ATmega328 (Arduino Nano 3.0) , имеет небольшие размеры и может использоваться в лабораторных работах. Она имеет схожую с Arduino Duemilanove функциональность, однако отличается сборкой. Отличие заключается в отсутствии силового разъема постоянного тока и работе через кабель Mini-B USB. Nano разработана и продается компанией Gravitech. Краткие характеристики Микроконтроллер Atmel ATmega328 Рабочее напряжение (логическая уровень) 5 В Входное напряжение (рекомендуемое) 7-12 В Входное напряжение (предельное) 6-20 В Цифровые Входы/Выходы 14 (6 из которых могут использоваться как выходы ШИМ) Аналоговые входы 8 Постоянный ток через вход/выход 40 мА Флеш-память 32 Кб при этом 2 Кб используются для загрузчика ОЗУ 2 Кб EEPROM 1 Кб Тактовая частота 16 МГц Размеры 1.85 см x 4.2 см Питание: Arduino Nano может получать питание через подключение Mini-B USB, или от нерегулируемого 6-20 В (вывод 30), или регулируемого 5 В (вывод 27), внешнего источника питания. Автоматически выбирается источник с самым высоким напряжением. Микросхема FTDI FT232RL получает питание, только если сама платформа запитана от USB. Таким образом при работе от внешнего источника (не USB), будет отсутствовать напряжение 3.3 В, генерируемое микросхемой FTDI, при этом светодиоды RX и TX мигаю только при наличие сигнала высокого уровня на выводах 0 и 1. Память Микроконтроллер имеет 32 кБ (при этом 2 кБ используется для хранения загрузчика). а ATmega328 имеет 2 кБ ОЗУ и 1 Кб EEPROM. Входы и Выходы Каждый из 14 цифровых выводов Nano, может настраиваться как вход или выход. Выводы работают при напряжении 5 В. Каждый вывод имеет нагрузочный резистор (стандартно отключен) 20-50 кОм и может пропускать до 40 мА. Некоторые выводы имеют особые функции: Последовательная шина: 0 (RX) и 1 (TX). Выводы используются для получения (RX) и передачи (TX) данных TTL. Данные выводы подключены к соответствующим выводам микросхемы последовательной шины FTDI USB-to-TTL. Внешнее прерывание: 2 и 3. Данные выводы могут быть сконфигурированы на вызов прерывания либо на младшем значении, либо на переднем или заднем фронте, или при изменении значения. ШИМ: 3, 5, 6, 9, 10, и 11. Любой из выводов обеспечивает ШИМ с разрешением 8 бит. SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Посредством данных выводов осуществляется связь SPI, которая, хотя и поддерживается аппаратной частью, не включена в язык Arduino. LED: 13. Встроенный светодиод, подключенный к цифровому выводу 13. Если значение на выводе имеет высокий потенциал, то светодиод горит. На платформе Nano установлены 8 аналоговых входов, каждый разрешением 10 бит (т.е. может принимать 1024 различных значения). Стандартно выводы имеют диапазон измерения до 5 В. Некоторые выводы имеют дополнительные функции: I2C: 4 (SDA) и 5 (SCL). Посредством выводов осуществляется связь I2C (TWI). Дополнительная пара выводов платформы: AREF. Опорное напряжение для аналоговых входов. Reset. Низкий уровень сигнала на выводе перезагружает микроконтроллер. Обычно применяется для подключения кнопки перезагрузки на плате расширения, закрывающей доступ к кнопке на самой плате Arduino. Связь На платформе Arduino Nano установлено несколько устройств для осуществления связи с компьютером, другими устройствами Arduino или микроконтроллерами. Поддерживается последовательный интерфейс UART TTL (5 В), осуществляемый выводами 0 (RX) и 1 (TX). Установленная на плате микросхема FTDI FT232RL направляет данный интерфейс через USB, а драйверы FTDI (включены в программу Arduino) предоставляют виртуальный COM порт программе на компьютере. Мониторинг последовательной шины (Serial Monitor) программы Arduino позволяет посылать и получать текстовые данные при подключении к платформе. Светодиоды RX и TX на платформе будут мигать при передаче данных через микросхему FTDI или USB подключение (но не при использовании последовательной передачи через выводы 0 и 1). Так же поддерживается интерфейсы I2C (TWI) и SPI. Программирование Микроконтроллер поставляется с записанным загрузчиком, облегчающим запись новых программ без использования внешних программаторов. Связь осуществляется оригинальным протоколом STK500. Имеется возможность не использовать загрузчик и запрограммировать микроконтроллер через выводы блока ICSP (внутрисхемное программирование). Nano разработана таким образом, чтобы перед записью нового кода перезагрузка осуществлялась самой программой, а не нажатием кнопки на платформе. Одна из линий FT232RL, управляющих потоком данных (DTR), подключена к выводу перезагрузки микроконтроллера через конденсатор 100 нФ. Активация данной линии, т.е. подача сигнала низкого уровня, перезагружает микроконтроллер. Программа Arduino, используя данную функцию, загружает код одним нажатием кнопки Upload в самой среде программирования. Подача сигнала низкого уровня по линии DTR скоординирована с началом записи кода, что сокращает таймаут загрузчика. Функция имеет еще одно применение. Перезагрузка Nano происходит каждый раз при подключении к программе Arduino на компьютере с ОС Mac X или Linux (через USB). Следующие полсекунды после перезагрузки работает загрузчик. Во время программирования происходит задержка нескольких первых байтов кода во избежание получения платформой некорректных данных (всех, кроме кода новой программы). Если производится разовая отладка скетча, записанного в платформу, или ввод каких-либо других данных при первом запуске, необходимо убедиться, что программа на компьютере ожидает в течение секунды перед передачей данных. 5987 8ecf9a2f-f41c-4e81-835e-09a956e854c2.png adbdc502-bec7-43da-9b6d-6738b31805f0.png 221e004a-f686-4bdd-b569-6a88c20c6917.png bffd5b5c-69d2-48d6-aa71-d8a4e2821056.png f3d4a9ae-169d-498f-a561-eb3283868a72.png ba158aa0-6b15-414e-a928-8b20ff482b39.png A A 1024 uno nano atmega328 General information The Nano platform, built on the microcontroller ATmega328 (Arduino Nano 3.0) , is small in size and can be used in laboratory works. It has similar functionality to the Arduino Duemilanove, but in a different package. The difference lies in the absence of a power connector and DC operation via cable Mini-B USB. Nano developed and sold by the company Gravitech. A brief description Microcontroller Atmel ATmega328 Operating voltage (logic level) 5 V Input voltage (recommended) 7-12 V Input voltage (limits) 6-20 In Digital Inputs/Outputs 14 (of which 6 can be used as outputs PWM) Analog inputs 8 DC current through input/output 40 mA Flash memory 32 KB in this case, 2 KB used for loader RAM 2 KB EEPROM 1 KB Clock speed 16 MHz Dimensions 1.85 cm x 4.2 cm Food: The Arduino Nano can be powered via connection Mini-B USB, or from an unregulated 6 to 20 In (pin 30), or the regulated 5 V (pin 27), an external power source. Automatically selects the source with the highest voltage. The FTDI FT232RL chip receives power only if the platform itself is powered by USB. Thus, when working from an external source (not USB), there will be no voltage of 3.3 V generated by the FTDI chip, while the RX and TX LEDs blink only when the presence of a high signal on pins 0 and 1. Memory The microcontroller has 32 KB (2 KB used to store the boot loader). but the ATmega328 has 2 KB of SRAM and 1 KB EEPROM. Inputs and Outputs Each of the 14 digital pins Nano can be configured as input or output. Insights operate at a voltage of 5 V. Each output has a load resistor (default off) 20-50 ohms and can handle up to 40 mA. Some pins have special functions: Serial bus: 0 (RX) and 1 (TX). Pins are used to receive (RX) and transmit (TX) TTL serial data. These pins are connected to corresponding pins of the chip serial bus FTDI USB-to-TTL. External interrupt: 2 and 3. These pins can be configured for call interruption or the lower value, either for front or rear front or when you change the value. PWM: 3, 5, 6, 9, 10, and 11. Any insights provides PWM resolution of 8 bits. SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). These pins support SPI communication, which, although provided by the underlying hardware, is not included in the Arduino language. LED: 13. Built-in led connected to digital pin 13. If the value on the output is held high, the led is illuminated. Platform Nano has 8 analog inputs each with 10 bits of resolution (i.e. 1024 different values). Standard conclusions are the measurement range to 5 V. Some pins have additional functions: I2C: 4 (SDA) and 5 (SCL). By means of pins communicates I2C (TWI). An additional pair of pins on the Board: AREF. The reference voltage for the analog inputs. Reset. The low level signal at pin resets the microcontroller. Typically used to connect the reset button on the expansion card, closing access to the button on the Arduino Board. Link The Arduino Nano has a number of facilities for communicating with a computer, another Arduino, or other microcontrollers. Supported serial interface UART TTL (5V) by the pins 0 (RX) and 1 (TX). Mounted on Board FTDI FT232RL directs the interface via USB and the FTDI drivers (included with the Arduino software) provide a virtual COM port to software on the computer. Monitoring Serial Monitor of the Arduino program allows you to send and receive text data when you connect to the platform. The RX and TX LEDs on the Board will flash when data transfer via the FTDI chip and USB connection (but not for serial communication via pins 0 and 1). It also supports I2C (TWI) and SPI. Programming The microcontroller comes with a recorded loader, facilitating the entry of new programs without using an external hardware programmer. Communication takes the original STK500 Protocol. You have the option not to use the bootloader and program the microcontroller via pins of the ICSP header (in-circuit programming). Nano is designed in such a way that the new code before recording a restart is performed by the program, instead of pressing buttons on the platform. One of the lines of the FT232RL that control the data flow (DTR), connected to the output of the restart of the microcontroller via a 100 nF capacitor. Activation of this line, i.e. the signal of the low level, resets the microcontroller. The Arduino software uses this capability to upload code by simply pressing the Upload button in the Arduino environment. Supply low-level signal at the DTR coordinated with the beginning of writing code that reduces the loader timeout. The function has another use. Reboot Nano happens every time you connect to the Arduino program on a computer with Mac OS X or Linux (via USB). Following half a second after the reboot bootloader works. During programming intercept the first few bytes of code to avoid incorrect data platform (all except the code of the new program). If you are debugging one-off sketch recorded in the platform or entering any other data when you first start, you must make sure that the computer waits for a second before transmitting the data. 9600 arduinoIDE 83 0@0 LibraryRoot LibraryGroup-Базовые элементы LibraryGroup-Триггеры LibraryGroup-Таймеры LibraryGroup-Счетчики LibraryGroup-Дисплеи LibraryGroup-Конвертация типов 0@0 472 0@0 188 262 0@0 root