GPS модуль Neo-6MV2 не ловит спутники.
- Войдите на сайт для отправки комментариев
Сб, 01/05/2021 - 17:50
Здравствуйте, есть модуль Neo-6MV2 и я не могу завести его. получаю такие данные..
16:33:50.059 -> ------------------------------------------------------------------ 16:34:00.111 -> Спутников - 0 16:34:00.157 -> Точность по горизон. - 100.0 16:34:00.157 -> Широта и долгота - ********** / *********** 16:34:00.250 -> Дата и время - 00/00/2000 00:00:00 855 16:34:00.297 -> Высота над уровнем моря - ****** 16:34:00.390 -> Направление движения (компас) - ****** 16:34:00.436 -> Скорость в км. - ***** 16:34:00.482 -> Направление - *** 16:34:00.530 -> расстояние до дачи - ******** ****** 16:34:00.576 -> Направление к даче - *** 16:34:00.622 -> ------------------------------------------------------------------
Питание сначала подавал 3.3в потом 5в результат тот же. Перепробовал библиотеки TinyGPS++, TinyGPS. Тестировал в открытой местности где можно словить спутники. Ждал по 2 часа.. Результат тот же. Перепробовал разные скорости 4800 38400 57600 только на 9600 выводит не синхронизированные время. В батарейке на модуле напряжение 2.95в. В чем может быть проблема ? Или кто посоветует какой-то болие надежный модуль ?
скетч вот.
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
static const int RXPin = 10, TXPin = 11;
static const uint32_t GPSBaud = 9600;
// The TinyGPS++ object
TinyGPSPlus gps;
// The serial connection to the GPS device
SoftwareSerial ss(RXPin, TXPin);
void setup()
{
Serial.begin(9600);
ss.begin(GPSBaud);
}
void loop()
{
static const double MOSCOW_LAT = 56.337582, MOSCOW_LON = 38.370631;
Serial.print("Спутников - \t\t\t\t");
printInt(gps.satellites.value(), gps.satellites.isValid(), 5); //- информация о спутниках
Serial.println();
Serial.print("Точность по горизон. - \t\t\t");
printFloat(gps.hdop.hdop(), gps.hdop.isValid(), 6, 1); // - Точность
Serial.println();
Serial.print("Широта и долгота - \t\t\t");
printFloat(gps.location.lat(), gps.location.isValid(), 11, 6);
Serial.print(" / ");
printFloat(gps.location.lng(), gps.location.isValid(), 12, 6);
Serial.println();
Serial.print("Дата и время - \t\t\t\t");
printDateTime(gps.date, gps.time);
Serial.println();
Serial.print("Высота над уровнем моря - \t\t");
printFloat(gps.altitude.meters(), gps.altitude.isValid(), 7, 2);
Serial.println();
Serial.print("Направление движения (компас) - \t");
printFloat(gps.course.deg(), gps.course.isValid(), 7, 2);
Serial.println();
Serial.print("Скорость в км. - \t\t\t");
printFloat(gps.speed.kmph(), gps.speed.isValid(), 6, 2);
Serial.println();
Serial.print("Направление - \t\t\t\t");
printStr(gps.course.isValid() ? TinyGPSPlus::cardinal(gps.course.deg()) : "*** ", 6);
Serial.println();
Serial.print("расстояние до дачи - \t\t\t");
unsigned long distanceKmToMoscow =
(unsigned long)TinyGPSPlus::distanceBetween(
gps.location.lat(),
gps.location.lng(),
MOSCOW_LAT,
MOSCOW_LON) / 1000;
printInt(distanceKmToMoscow, gps.location.isValid(), 9);
double courseToMoscow =
TinyGPSPlus::courseTo(
gps.location.lat(),
gps.location.lng(),
MOSCOW_LAT,
MOSCOW_LON);
printFloat(courseToMoscow, gps.location.isValid(), 7, 2);
Serial.println();
Serial.print("Направление к даче - \t\t\t");
const char *cardinalToMoscow = TinyGPSPlus::cardinal(courseToMoscow);
printStr(gps.location.isValid() ? cardinalToMoscow : "*** ", 6);
Serial.println();
// printInt(gps.charsProcessed(), true, 6);
// printInt(gps.sentencesWithFix(), true, 10);
// printInt(gps.failedChecksum(), true, 9);
Serial.println("------------------------------------------------------------------");
smartDelay(10000); // Пауза для вывода
if (millis() > 5000 && gps.charsProcessed() < 10)
Serial.println(F("Данные GPS не получены: проверьте соединение"));
}
// This custom version of delay() ensures that the gps object
// is being "fed".
static void smartDelay(unsigned long ms)
{
unsigned long start = millis();
do
{
while (ss.available())
gps.encode(ss.read());
} while (millis() - start < ms);
}
static void printFloat(float val, bool valid, int len, int prec)
{
if (!valid)
{
while (len-- > 1)
Serial.print('*');
Serial.print(' ');
}
else
{
Serial.print(val, prec);
int vi = abs((int)val);
int flen = prec + (val < 0.0 ? 2 : 1); // . and -
flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;
for (int i=flen; i<len; ++i)
Serial.print(' ');
}
smartDelay(0);
}
static void printInt(unsigned long val, bool valid, int len)
{
char sz[32] = "*****************";
if (valid)
sprintf(sz, "%ld", val);
sz[len] = 0;
for (int i=strlen(sz); i<len; ++i)
sz[i] = ' ';
if (len > 0)
sz[len-1] = ' ';
Serial.print(sz);
smartDelay(0);
}
static void printDateTime(TinyGPSDate &d, TinyGPSTime &t)
{
if (!d.isValid())
{
Serial.print(F("********** "));
}
else
{
char sz[32];
sprintf(sz, "%02d/%02d/%02d ", d.month(), d.day(), d.year());
Serial.print(sz);
}
if (!t.isValid())
{
Serial.print(F("******** "));
}
else
{
char sz[32];
sprintf(sz, "%02d:%02d:%02d ", t.hour(), t.minute(), t.second());
Serial.print(sz);
}
printInt(d.age(), d.isValid(), 5);
smartDelay(0);
}
static void printStr(const char *str, int len)
{
int slen = strlen(str);
for (int i=0; i<len; ++i)
Serial.print(i<slen ? str[i] : ' ');
smartDelay(0);
}