http://forum.amperka.ru/threads/Мотосигнализация.6787/ Уважаемые форумчане доброго дня! Собрал по указанной ссылке GSM маячок.Определяет координаты с точностью до 5 м, НО обнаружил неприятную особенность: Когда собранный девайс на время отключаешь от питания, а затем снова включаешь,то он стервец зависает..те на команду отправки координат не реагирует...помогает только кнопка ресет на дуне...хотя когда висит, смс модуль звонки принимает, на ГПС светодиод мигает...Подскажите в чем может быть проблема...может в скетч добавить программную перезагрузку...жалко почти готовый девайс в стол убирать.. Скетч привожу: #include <SoftwareSerial.h> // Подключаем библиотеку SoftwareSerial #include <string.h> #include <TinyGPS.h> // Подключаем библиотеку для GPS SoftwareSerial GSM(2,3); // Модуль GSM с именем GSM на пинах 2 - RX, 3 - TX Ардуино byte buffer[128]; // Размер буфера для данных. Обратите внимание на размер! Необходимо править библиотеку SoftwareSerial.h int count=0; // Счетчик для буфера данных SoftwareSerial GPS(4,5); // Модуль GPS с именем GPS на пинах 4 - RX, 5 - TX Ардуино TinyGPS gps; unsigned long fix_age; long lat, lon; float LAT, LON; // Какие данные GPS будем вычислять void gpsdump(TinyGPS &gps); bool feedgps(); void getGPS(); /*void SIM900power() // Функция программного включения GSM модуля { digitalWrite(9, HIGH); // На 9 пине программное включение GSM delay(1000); Sim900_Inti(); }*/ void setup() { GSM.begin(19200); // Скорость работы модуля GSM GPS.begin(9600); // Скорость работы модуля GPS Serial.begin(9600); // Скорость работы последовательного порта Было 19200!!!!!!!!!! неправильно delay(500); Sim900_Inti(); } void loop() { GSM.listen(); if (GSM.available()) { while(GSM.available()) { buffer[count++]=GSM.read(); if(count == 64)break; } Serial.write(buffer,count); Cmd_Read_Act(); // вызываем функцию проверки пароля clearBufferArray(); // вызываем функцию очистки буфера count = 0; } if (Serial.available()) GSM.println(Serial.read()); } void clearBufferArray() // функция очистки буфера { for (int i=0; i<count;i++) { buffer=NULL;} } void Sim900_Inti(void) { GSM.println("AT+CLIP=1"); // Включаем АОН Serial.println("AOH Ready"); delay(500); GSM.println("AT+CMGF=1"); // Устанавливаем модуль GSM в режим СМС Serial.println("SMS Mode Ready"); delay(500); GSM.println("AT+CNMI=2,2"); Serial.println("AT+CNMI=2,2"); delay(500); GSM.println("AT+CSCS=\"GSM\""); // Режим кодировки текста delay(300); GSM.println("AT+CSCS=\"GSM\"\r"); //добавил ДВК delay(300); Serial.println("GSM Text Mode Ready"); delay(500); } void Cmd_Read_Act(void) // Функция проверки пароля { char buffer2[64]; for (int i=0; i<count;i++) { buffer2=char(buffer);} if (strstr(buffer2,"dwk")) // Сравниваем пароль в программе с паролем в СМС !!!!!!!!!!!!!!!!!!!!!!!!!!! { Serial.println("Password Authenticated."); Serial.println("Sending reply SMS. "); SendTextMessage(); // Если пароль совпал, вызываем функцию отправки СМС } } void SendTextMessage() // Функция отправки СМС { GSM.print("AT+CMGF=1\r"); // Устанавливаем модуль GSM в режим СМС delay(100); GSM.println("AT+CSCS=\"GSM\"\r"); //добавил ДВК delay(300); GSM.println("AT+CMGS=\"+79524430622\"");// Разрешенный номер!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! delay(100); GSM.println("Calculates position!");// Содержание первой СМС delay(100); GSM.println((char)26); delay(100); GSM.println(); delay(5000); int counter=0; GPS.listen(); for (; { long lat, lon; unsigned long fix_age, time, date, speed, course; unsigned long chars; unsigned short sentences, failed_checksum; long Latitude, Longitude; // retrieves /- lat/long in 100000ths of a degree gps.get_position(&lat, &lon, &fix_age); getGPS(); Serial.print("Latitude : "); Serial.print(LAT/1000000,7); Serial.print(" :: Longitude : "); Serial.println(LON/1000000,7); /*if (LAT == 0 && LON == 0) { continue; } counter ; if (counter<30) { continue; } */ GSM.print("AT+CMGF=1\r"); // Устанавливаем модуль GSM в режим СМС delay(100); GSM.println("AT+CSCS=\"GSM\"\r"); //добавил ДВК delay(300); GSM.println("AT+CMGS=\"+79524430622\"");// Разрешенный номер !!!!!!!!!!!!!!!!!!!!!!!!!!! delay(100); GSM.print("maps.google.com/maps?q="); // Ссылка на карты Google //GSM.print("Latitude : "); GSM.print(LAT/1000000,7); GSM.print("+"); //GSM.print(" :: Longitude : "); GSM.println(LON/1000000,7);//the content of the message delay(100); GSM.println((char)26);//the ASCII code of the ctrl z is 26 delay(5000); GSM.println(); counter=0; break; } } void getGPS() { bool newdata = false; unsigned long start = millis(); while (millis() - start < 1000) { if (feedgps ()) { newdata = true; } } if (newdata) { gpsdump(gps); } } bool feedgps() { while (GPS.available()) { if (gps.encode(GPS.read())) return true; }return 0; } void gpsdump(TinyGPS &gps) { gps.get_position(&lat, &lon); LAT = lat; LON = lon; { feedgps(); } }