Добрый день, форумчане. Подскажите пожалуйста, кто работал с вышеуказанным модулем http://amperka.ru/product/troyka-gps-glonass от амперки. В формате NMEA все вроде бы работает, данные приходят, но при загрузке скетча отказывается их парсить. GPS Error Data. Библиотека от амперки https://github.com/amperka/TroykaGPS Скетч: Код (C++): // библиотека для работы с GPS устройством #include <TroykaGPS.h> // создаём объект класса GPS и передаём в него объект Serial1 GPS gps(Serial1); // задаём размер массива для времени, даты, широты и долготы #define MAX_SIZE_MASS 16 // массив для хранения текущего времени char time[MAX_SIZE_MASS]; // массив для хранения текущей даты char date[MAX_SIZE_MASS]; // массив для хранения широты в градусах, минутах и секундах char latitudeBase60[MAX_SIZE_MASS]; // массив для хранения долготы в градусах, минутах и секундах char longitudeBase60[MAX_SIZE_MASS]; void setup() { // открываем последовательный порт для мониторинга действий в программе Serial.begin(115200); // ждём, пока не откроется монитор последовательного порта // для того, чтобы отследить все события в программе while (!Serial) { } Serial.print("Serial init OK\r\n"); // открываем Serial-соединение с GPS-модулем Serial1.begin(115200); } void loop() { // считываем состояние GPS-модуля switch(gps.getData()) { // всё OK case GPS_OK: Serial.println("GPS is OK"); // выводим координаты широты и долготы // 1. в градусах, минутах и секундах // 2. градусах в виде десятичной дроби Serial.println("GPS Coordinates: "); gps.getLatitudeBase60(latitudeBase60, MAX_SIZE_MASS); gps.getLongitudeBase60(longitudeBase60, MAX_SIZE_MASS); Serial.print("Latitude\t"); Serial.print(latitudeBase60); Serial.print("\t\t"); Serial.println(gps.getLatitudeBase10(), 6); Serial.print("Longitude\t"); Serial.print(longitudeBase60); Serial.print("\t\t"); Serial.println(gps.getLongitudeBase10(), 6); // выводим количество видимых спутников Serial.print("Sat: "); Serial.println(gps.getSat()); // выводим текущую скорость Serial.print("Speed: "); Serial.println(gps.getSpeedKm()); // выводим высоту над уровнем моря Serial.print("Altitude: "); Serial.println(gps.getAltitude()); // выводим текущее время Serial.print("Time: "); gps.getTime(time, MAX_SIZE_MASS); gps.getDate(date, MAX_SIZE_MASS); Serial.write(time); Serial.println(); // выводим текущую дату Serial.print("Date: "); Serial.write(date); Serial.println("\r\n"); // каждую переменную дату и времени можно выводить отдельно /* Serial.print(gps.getHour()); Serial.print(gps.getMinute()); Serial.print(gps.getSecond()); Serial.print(gps.getDay()); Serial.print(gps.getMonth()); Serial.print(gps.getYear()); */ break; // ошибка данных case GPS_ERROR_DATA: Serial.println("GPS error data"); break; // нет соединение со спутниками case GPS_ERROR_SAT: Serial.println("GPS no connect to satellites"); break; } } Заранее спасибо.
Скорее всего формат немного не совпадает с библиотекой. Ежели в NMEA все работает - парсите его сами, это вроде несложно.
При компиляции этого скетча компилятор выдает ошибку: 'Serial1' was not declared in this scope в строке: GPS gps(Serial1); Действительно, Serial1 ранее не объявлен. Как правильно поступить?
Код для Leonardo, как обычно. Что у вас и куда хотите выводить? Если гнать через контроллер, нужно два UARTа (ну т.е. Mega/Leo), если напрямую в USB - совсем убрать инициализацию Serial и где-то между модулем и материнкой перекрутить RX/TX.
Амперка в уроке про GPS модуль показывает Уно, а код даёт для Меги или Лео...Я, например, купил Мегу ))
в чем проблема использовать SoftwareSerial ? - тогда и Уна и Нана справятся без проблем. Или пару букв в коде поправить не судьба?
Флаг в руки! У меня сходу не получилось...Модуль по умолчанию работает на 115200 Baud..Показалось что SoftwareSerial "не потянул"...Пробовал PMTK командой настроить модуль на частоту ниже, но сразу не получилось, и возиться дальше не стал...Теперь у меня есть мега ))
Там не так просто. Земля Не Круглая. В Tiny GPS ++ сделано просто: Distance and Course If your application has some notion of a “waypoint” or destination, it is sometimes useful to be able to calculate the distance to that waypoint and the direction, or “course”, you must travel to get there. TinyGPS++ provides two methods to get this information, and a third (cardinal()) to display the course in friendly, human-readable compass directions. const double EIFFEL_TOWER_LAT = 48.85826; const double EIFFEL_TOWER_LNG = 2.294516; double distanceKm = TinyGPSPlus.distanceBetween( gps.location.lat(), gps.location.lng(), EIFFEL_TOWER_LAT, EIFFEL_TOWER_LNG) / 1000.0; double courseTo = TinyGPSPlus.courseTo( gps.location.lat(), gps.location.lng(), EIFFEL_TOWER_LAT, EIFFEL_TOWER_LNG); Serial.print("Distance (km) to Eiffel Tower: "); Serial.println(distanceKm); Serial.print("Course to Eiffel Tower: "); Serial.println(courseTo); Serial.print("Human directions: "); Serial.println(TinyGPSPlus.cardinal(courseTo)); В командах модуля есть упоминание события "Достижения WP". А вот записи координат - нет :-(
И что?, Ардуино легко посчитает и расстояние и азимут между двумя точками с учетом круглости Земли. Функции рабочие, проверял сам - можете пользоваться. http://forum.amperka.ru/threads/robot-ship-4х4-miniq-НС-12-imu-gps-glonass-sd-картридер-ina-219-3x-arduino-nano.12862/ предпоследнее сообщение в ветке
Спасибо .... Может сразу свой класс написать .... Эх хотелось на готовенкое... Тройка удивила. Делают платы, а библиотеки колхозные ....