Код (C++): #include <TroykaGPS.h> #include <uartDevice.h> int rele_left = 11; // Реле левого клапана на 11-й ножки int rele_right = 12; // Реле правого клапана на 12-й ножки // создаём объект класса 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() { pinMode(rele_left, OUTPUT); // Реле левого клапана на 11-й ножки pinMode(rele_right, OUTPUT); // Реле правого клапана на 12-й ножки // открываем последовательный порт для мониторинга действий в программе Serial.begin(115200); // ждём, пока не откроется монитор последовательного порта // для того, чтобы отследить все события в программе while (!Serial) { } Serial.print("Serial init OK\r\n"); // открываем Serial-соединение с GPS-модулем Serial1.begin(115200); } void loop() { digitalWrite(rele_left, HIGH); digitalWrite(rele_right, HIGH); delay (1000); digitalWrite(rele_left, LOW); digitalWrite(rele_right, LOW); delay (1000); // считываем состояние 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; } }
Подозреваю, что gps.getData() - блокирующая, и ждёт, пока там что-то не поступит. Соответственно, в ней висеть будет до получения данных, следовательно - светодиоды моргать не будут, т.к. нет новой итерации вызова loop.
GPS передает данные односторонним потоком сознания данных по UART, которые следует парсить для извлечения нужных данных. Саму процедуру приема/расшифровки хорошо бы сделать независающей, на случай если данные не приедут или придут с ошибками. Все это делается вручную без подозрительных библиотек.