STM32 Maple Mini + GY-GPS6MV2: Coordenadas de localização GPS incorreta

Projetos com STM32
fernandosteffen
Novato
Mensagens: 1
Registrado em: 18/Jul/2019, 14:28

STM32 Maple Mini + GY-GPS6MV2: Coordenadas de localização GPS incorreta

Mensagem por fernandosteffen » 18/Jul/2019, 14:36

Bom dia pessoal, tudo bem?

Sou novo no forum porém acompanho o canal no youtube a mais tempo. Estou implementando um projeto que tem como uma das funções coletar as coordenadas GPS do sistema. Porém estou recendo coordenadas erradas, hora recebo as coordenadas certas, hora recebo coordenadas do oceano atlântico, na costa da Namíbia (?), porém no mesmo local.

Configuração:
STM32 Maple mini
GY-GPS6MV2
IDE - Arduino

Software:

#include <TinyGPS++.h>
#include <SoftwareSerial.h>
...
//Configuração da comunicação do módulo GPS
static const int RXPin = PB11, TXPin = PB10;
static const uint32_t GPSBaud = 9600;

// Objeto responsável pelo GPS
TinyGPSPlus gps;
// Objeto responsável pela comunicação serial com o GPS
SoftwareSerial ss(RXPin, TXPin);
...
void setup() {
Serial.begin(115200);
ss.begin(GPSBaud);
...
}
void loop() {
...
// Atualização do GPS
// Atualiza os dados sempre que uma nova informação completa for detectada
while (ss.available() > 0) {
if (gps.encode(ss.read())){
displayInfo();
}
}
// Se o GPS não comunicar após 5s de RUN, informa que não foi localizado o GPS.
if (millis() > 5000 && gps.charsProcessed() < 10) {
Serial.println(F("Módulo GPS não encontrado."));
while (true);
}
...
void displayInfo()
{
Serial.println("Location: ");
if (gps.location.isValid())
{
Serial.print(gps.location.lat(), 6);
Serial.print(F(","));
Serial.print(gps.location.lng(), 6);
}
else
{
Serial.println("INVALID");
}

Serial.print(F(" Date/Time: "));
if (gps.date.isValid()) {
Serial.print(gps.date.day());
Serial.print(F("/"));
Serial.print(gps.date.month());
Serial.print(F("/"));
Serial.print(gps.date.year());
} else {
Serial.print(F("INVALID"));
}

Serial.print(F(" "));

if (gps.time.isValid()) {
if (gps.time.hour() < 10) Serial.print(F("0"));
Serial.print(gps.time.hour() - 3);
Serial.print(F(":"));
if (gps.time.minute() < 10) Serial.print(F("0"));
Serial.print(gps.time.minute());
Serial.print(F(":"));
if (gps.time.second() < 10) Serial.print(F("0"));
Serial.print(gps.time.second());
Serial.print(F("."));
if (gps.time.centisecond() < 10) Serial.print(F("0"));
Serial.print(gps.time.centisecond());
} else {
Serial.print(F("INVALID"));
}
Serial.println();
}

Pelo que ví poderia ser a biblioteca SoftwareSerial que não é muito boa para essa arquitetura, é possível?

OBS: Não estou usando nenhum delay no programa, uso o millis.

Responder