Помогите новичку
- Войдите на сайт для отправки комментариев
Вс, 14/05/2017 - 14:18
Здраствуйте
Я новичек в программировании и мне нужно собрать GPS трекер на Arduino mega .комплектующие Ардуино ,GSM модуль А6, GPS модуль НЕО6МV2. В интернете нашел скетч переписал под себя вроде правильно, но при загрузке GSM модуоль не выполняет свои функции. Вот скетч:
// GPS/GSM трекер.
#include <EEPROM.h>
#include <SoftwareSerial.h>
#include <TinyGPS.h>
String currStr = "";//Строка содержит текущую строку, полученую от сим модуля.
String nomber_Phone = "+77076817895";//Строка содержит номер телефона на который отправляються GPS координаты, далее Разрешенный номер.
String dat2 = "no data";//Текст строки отпровляеться если GPS координат ещё нет.
String dat;//Строка содержит GPS координаты.
String complete = "Changed nomber complete!";//Текст строки отпровляеться при смене Разрешенного номера.
char data;//Содержит символ полученый от сим модуля.
byte char_A = 40;
boolean gps = true;
int gps_on = A0;
void setup()
{
pinMode(gps_on, OUTPUT);
analogWrite(gps_on, 255);//
delay(800); //
analogWrite(gps_on, 0); //Включение сим модуля.
delay(5000); //
Serial2.begin(115200);
Serial1.begin(9600);
for(byte i=0; i<13; i++) //Чтение Разрешённого номера из EEPROM
{
data = EEPROM.read(i);
nomber_Phone += data;
}
delay(1000);
Serial2.println("AT");//Устанавливаем связь с сим модулем, для соглосования скорости передачи.
delay(2000);
Serial2.println("AT+CMGD");//Удаляем всё SMS которые могут содержаться на сим карте.
}
void loop()
{
if(Serial2.available()>0)
{
read_GSM();
}
read_GPS();
}
//Функция данных полученых от сим модуля.
void read_GSM()
{
currStr = "";
while(Serial2.available()>0)
{
data = Serial2.read();
delay(100);
if ('\r' == data)
{
if(!currStr.compareTo("RING"))//Если текущая строка RING, значит едёт входящий звонок.
{
ring_GSM();
}
else
{
if (currStr.startsWith("+CMT")) //Или если строка начинаеться c +CMT, значит пришло SMS
{
read_Message();
Serial2.println("AT+CMGD");//Удоляем всё SMS чтоб не накапливать их.
}
}
currStr = "";
}
else if ('\n' != data)
{
currStr += data;
}
}
}
//Функция обработки входящего звонка.
void ring_GSM()
{
boolean ring = true;
currStr = "";
delay(1000);
while(ring)
{
data = Serial2.read();
if (data == '"')
{
data = Serial2.read();
while (data != '"')
{
currStr += data;
data = Serial2.read();
}
if (currStr == nomber_Phone)//Если номер совподает с номером в строке "nomber_Phone"
{
delay(1000);
Serial2.println("ATH");// Тогда сбрасываем звонок
delay(3000);
Serial2.println("ATH");// Тогда сбрасываем звонок
delay(3000);
Serial2.println("ATH");
send_Message(&dat2);// И вызываем функци отправки SMS и передаём ей адрес строки содержащию GPS координаты.
return;
}
else //Если номер не совподает
{
Serial2.println("ATH");// Просто сбрасываем звонок.
delay(3000);
Serial2.println("ATH");
delay(3000);
Serial2.println("ATH");
return;
}
}
}
}
//Функция отправки SMS.
void send_Message(String *message) //Функция принимает адрес строки с текстом SMS.
{
delay(1000);
Serial2.print("AT+CMGS=1");
Serial2.print(nomber_Phone);
Serial2.println('"');
delay(1000);
Serial2.println(*message);
delay(1000);
Serial2.print((char)26);
}
//Функция читает GPS координаты и преобразует в формат:
//N xx xx.xxxx - широта.
//E xx xx.xxxx - долгота.
//Time xx:xx:xx - время по гринвичу.
void read_GPS()
{
gps = true;
dat = "";
while (gps)
{
if (Serial1.available()>0)
{
data = Serial1.read();
if (data == 'L')
{
while (data != '\r')
{
dat += data;
delay(2);
data = Serial1.read();
}
gps = false;
if (dat.indexOf('A') == char_A)
{
delay(5);
dat2 = "N ";
for(byte i=3; i<5; i++)
{
dat2 += dat.charAt(i);
}
dat2 += ' ';
for(byte i=5; i<13; i++)
{
dat2 += dat.charAt(i);
}
dat2 += "\nE ";
for(byte i=17; i<19; i++)
{
dat2 += dat.charAt(i);
}
dat2 += ' ';
for(byte i=19; i<27; i++)
{
dat2 += dat.charAt(i);
}
delay(5);
dat2 += "\nTime ";
for(byte i=30; i<32; i++)
{
dat2 += dat.charAt(i);
}
dat2 += ':';
for(byte i=32; i<34; i++)
{
dat2 += dat.charAt(i);
}
dat2 += ':';
for(byte i=34; i<36; i++)
{
dat2 += dat.charAt(i);
}
}
}
}
}
}
//Функция чтения SMS.
void read_Message()
{
currStr = "";
while(Serial2.available()>0)
{
data = Serial2.read();
if(data == '$')
{
while(data != '#')
{
data = Serial2.read();
currStr += data;
}
if(!currStr.compareTo("balans#"))//Запрос и отправка баланса сим карты
{
currStr = "";
Serial2.println("ATD*111#;");//
delay(5000);
while(Serial2.available()>0)
{
data = Serial2.read();
if(data == '"')
{
data = Serial2.read();
while(data != 'B')
{
currStr += data;
data = Serial2.read();
}
send_Message(&currStr);
return;
}
}
}
else if(!currStr.compareTo("callback#"))//Звонок на разрешённый номер.
{
Serial2.print("ATD");
delay(100);
Serial2.print(nomber_Phone);
delay(100);
Serial2.println(";");
return;
}
else if(!currStr.compareTo("ch.number#"))//Смена Разрешённого номера и сохранение его в EEPROM.
{
currStr = "";
data = Serial2.read();
if(data == '+')
{
for(byte i = 0; i < 13; i++)
{
EEPROM.write(i, data);
currStr += data;
data = Serial2.read();
}
nomber_Phone = currStr;//Сохранение нового Разрешённого номера.
send_Message(&complete);//Отправка SMS потверждающая смену Разрешённого номера.
return;
}
}
}
}
}
1. Вставьте пожалуйста код, как описано в http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
2. "при загрузке GSM модуль не выполняет свои функции." - это ни о чём, стоило бы подробнее.
3. Спасибо за содержательное название темы.
ну он вроде бы должен при звонке сбрасывать и отправлять координаты по смс , но вмето этого идет просто гудок
Для отладки скетча воспользуйтесь монитором порта из Arduino IDE.
Вставьте в void setup() запуск порта - Serial.begin(9600);
В интересующих местах поставьте отладочный вывод ( Serial.print() , Serial.println() ) в порт, запустите скетч, смотрите в мониторе порта, что выводится и отлаживайте.
Например, здесь :
Я новичек в программировании и мне нужно собрать GPS трекер на Arduino mega .комплектующие Ардуино ,GSM модуль А6, GPS модуль НЕО6МV2. В интернете нашел скетч переписал под себя вроде правильно, но ...
Для новичка Вы выбрали слишком сложную задачу. Начните с чего-нибудь попроще.
А то, у Вас получается: "я новичёк в медицине и мне нужно вырезать приятелю аппендикс, я посмотрел на ютубе как это делается, вроде все делал правильно, но ..."
Проблема в том что это моя курсовая работа и у меня срок в две недели.
1. На курсовую работу, по идее отводится 2 семестра. Откуда 2 недели - не понятно. Точнее, понятно, но это ни в коем случае не является смягчающим обстоятельством. Скорее - отягчающим.
2. Классический вопрос - Вы хотели бы чтобы Вас оперировал хирург-недоучка? А хотели бы лететь на самолете, спроектированным инженером-недоучкой? А хотели бы пользоваться программой, которая считает Ваши финансы (или обслуживает Ваш счет в банке), которая написана программистом-недоучкой?
Вот и я не хотел бы. А потому, думаю, всем будет лучше, если Вы эту курсовую не сдадите.
Вероятно, для Вас - это трагедия, зато для всех остальных - это благо.
да не собираюсь я в дальнейшем этим заниматься мне главное сдать
А потому, думаю, всем будет лучше, если Вы эту курсовую не сдадите.
Неистово плюсую! Иди-ка послужи, долбо..б!
да не собираюсь я в дальнейшем этим заниматься мне главное сдать
А зачем тогда сдавать?
сделал как ты и сказал при звонке на терминал вывел RING но сбрасывать вызов почемуто не стал
и где то прочитал что там может RING прийти разбитый на части как угодно. Т.е. можно за один раз вычитать RIN, а G только в следующем цикле loop. Это может быть проблемой?
да не собираюсь я в дальнейшем этим заниматься мне главное сдать
Если ваша фамилия не Рогозин-Роттенберг-Тимченко, вряд ли у вас имеются веские основания предвидеть поле своей будущей профессиональной деятельности. А посему, присоединяюсь к предыдущим ораторам.
Проблема в том что это моя курсовая работа и у меня срок в две недели.
Да, действительно проблема.
А ВУЗ какой?
Прошу,если не хотите помогать проходите мимо
Прошел мимо :)
Т.е. ВУЗ секретный?
сделал как ты и сказал при звонке на терминал вывел RING но сбрасывать вызов почемуто не стал
и где то прочитал что там может RING прийти разбитый на части как угодно. Т.е. можно за один раз вычитать RIN, а G только в следующем цикле loop. Это может быть проблемой?
Ну а теперь перед
if
(currStr == nomber_Phone)
//Если номер совподает с номером в строке "nomber_Phone"
вставьте
Serial
.println(
currStr);и смотрите дальше, чему на самом деле равна строка в currStr
проходил мимо...
я пока больше читатель форума, с радостью бы ответил, но моих навыков не хватает.
Мои то курсовые сдались 25 лет назад, но читаю веточку и скалыдвается врпечатление, что те кто не знают как помочь, попросту начинают нагибать топикстартера.
Конечно не мне новичку на этом форуме давать вам советы, но как то не по человечески это. Человек поздоровался описал проблему как мог, а тут откровенное хамство в ответ. Не хорошо это....
я пока больше читатель форума, с радостью бы ответил, но моих навыков не хватает.
А самое главное у вас нет навыков учить и тестировать сложные схемы. Если вы наверно помните время, когда учились, после долгих летних каникул ваш учитель давал вам первичное тестирование, что бы проверить вас все ли вы забыли или что то в голове осталось. И как вы отплевывались от этого тестирования , как же вы же сдали уже и это работа лишняя. А то что без знаний крепко усевшихся в голове, дальше учить бесмысленно. Вот так и программированием. Даже если кто-то сбросит текст рабочей программы, и разумеется там может оказаться немного ошибок , или надо модернизировать , или что то еще. То как поступит это "уникум". Вы сможете проверить грамматику в китайском тексте. Так вот и для него эта программа будет как китайская грамота. Так что грубость на форуме это и есть первичное тестирование , а не издевательство. И похоже ТС ее успешно провалил.
Я бы добавил, что персонаж просто никому нахрен не нужен.
Я, с огромным удовольствием, научу новичка, хоть пайке, сварке и программированию, хоть верховой езде, байку или управлению самолетом, чему угодно, из того, чему научился сам за долгую жизнь. Но главное условие, чтобы у ученика "горели глаза", чтобы ему было интересно.
А курсовую придурку-неучу.? ...только за деньги! И не за маленькие.
Я бы добавил, что персонаж просто никому нахрен не нужен.
Я, с огромным удовольствием, научу новичка, хоть пайке, сварке и программированию, хоть верховой езде, байку или управлению самолетом, чему угодно, из того, чему научился сам за долгую жизнь. Но главное условие, чтобы у ученика "горели глаза", чтобы ему было интересно.
А курсовую придурку-неучу.? ...только за деньги! И не за маленькие.
Подписываюсь под каждым словом. Насмотрелся на недовыпускников.
послушайте, программирование не моя специальность . И я не прошу все объеснять с нуля .Мне нужно лишь помошь по исправлению ошибок моего кода для работы трекера
...те кто не знают как помочь, попросту начинают нагибать топикстартера.
Конечно не мне новичку на этом форуме давать вам советы, но как то не по человечески это. Человек поздоровался описал проблему как мог, а тут откровенное хамство в ответ. Не хорошо это....
bubastic, Вы неправильно употребляете глагл "помочь". У нормальных людей помощь подразумевает, что кому-то от этого будет лучше. В данном случае пытаться сделать за неуча его работу - это вред всем.
А рассуждать, как Вы - это помочь карманнику вытащить кошелек у женщины. Тоже "помощь".
те кто не знают как помочь
Если бы не знали! Это ещё было бы простительно! Эти твари/нелюди знают, но злостно не хотят, сделать курсовик за лодыря и дебила, который даже "не просит ему объяснить с нуля", а просит только дать готовый код!
А Вы 25 лет назад также курсовики сдавали, как этот персонаж? Ну, вот, видимо, потому сейчас и помочь ему не можете. Нет?
ух, ты, ух ты набросились :-)
прошу проениня за оффтоп
"Мои то курсовые сдались 25 лет назад", я написал образно более для указания того дальнего времени когда мне было столько же лет.
А не сдавал курсовую, т.к. работал на металургическом заводе и к сожалению (сейчас осознаю) "в институтах не кончал".
проехали..., а то заклюете, как этого бедолпагу ;-) А мне тоже помощь общественного разума нужна.
ух, ты, ух ты набросились :-)
прошу проениня за оффтоп
"Мои то курсовые сдались 25 лет назад", я написал образно более для указания того дальнего времени когда мне было столько же лет.
А не сдавал курсовую, т.к. работал на металургическом заводе и к сожалению (сейчас осознаю) "в институтах не кончал".
проехали..., а то заклюете, как этого бедолпагу ;-) А мне тоже помощь общественного разума нужна.
Ну так потрудись, напиши хоть что то сам, а потом конкретно спрашивай, что ты хочешь исправить в своем коде или чего не понимаешь как сделать опять же в своем коде. Здесь помогают тем кто делает сам, и не требует, что бы все сделали за него.
Спасибо всем тем кто хотел помочь.Особенно Araris. И остальным за их критику. Это придало мне мотивацию. Итак после того как я поменял код и GSM модуль,первый я сжег или что там еще хер его знает, все заработало. Координаты отправляются с помощью СМС в ввиде ссылок на карту GOOGLE maps. Думаю никому не интересно, но вот код
Ну, вот, наш стёб на пользу пошёл. Я рад!
И я рад ))). А код кому-нибудь да пригодится.
Karzhaubay
Плюсанул за настойчивость. Успешной сдачи!