(19-02-2020, 08:40)Robson Kerman napisał(a): Ta biblioteka nie czyta prefiksów Glonass Galileo tylko GPS, czyli szukaj $GPGGA. Najprostrze i najtańsze odbiorniki muszą wysyłać przynajmniej $GPRMC, ale w/w biblioteka już niestety tego nie obsługuje.Chcialbym poprawic dokladnosc (!) odczytow polozenia horyzontalnego punktu w ktorym aktualnie sie znajduje razem z odbiornikiem GPS. Poniewaz dluzsza obserwacja kolejnych odczytow pokazuje skale bledow (nie wiem na razie dokladnie z czego to wynika) chcialbym czesc z tych bledow wyeliminowac korzystajac z wartosci HDOP podawanej w ciagu #GPGSA odczytywanym przez biblioteke TinyGPS++. Metoda kombinacji przykladow sklecilem taki kod, ktory niestety z niewiadomego powodu nie ogranicza wyswietlanych na LCD wartosci do takich dla ktorych spelniony jest warunek HDOP<=2.00. Sadze ze gdzies jest blad ktorego kompilator nie odrzuca a ow fragment nie dziala.
Odpowiadając na pytanie:
Tak jest możliwość. Najprościej to pomnożyć pierwsze dwie cyfry przez 1000000 i odjąć od 50339920.00
Prosze o analize i pomoc w rozwiklaniu zagadki.
Kod:
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 9600;
float h_dop;
// The TinyGPS++ object
TinyGPSPlus gps;
// The serial connection to the GPS device
SoftwareSerial ss(RXPin, TXPin);
// Horizontal diminution
TinyGPSCustom hdop(gps, "GPGSA", 16); // $GPGSA sentence, 16th element
void setup()
{
Serial.begin(115200);
ss.begin(GPSBaud);
lcd.begin();
lcd.backlight();
}
void loop()
{
// This sketch displays information every time a new sentence is correctly encoded.
while (ss.available() > 0)
if (gps.encode(ss.read()))
{
displayInfo();
}
if (millis() > 5000 && gps.charsProcessed() < 10)
{
Serial.println(F("No GPS detected: check wiring."));
while(true);
}
}
void displayInfo()
{
lcd.clear();
if (gps.location.isValid() || hdop.isUpdated() )
// if (gps.location.isUpdated())
{
float h_dop = gps.hdop.hdop();
Serial.print(F(" HDOP=")); Serial.print(h_dop);
Serial.println();
}
else
{
Serial.println(F("INVALID"));
lcd.setCursor(0, 0);
lcd.print("Brak synchronu");
delay(5000);
}
if (h_dop <= 2.00)
{
lcd.setCursor(0, 0);
lcd.print("Lat ");
lcd.print(gps.location.lat(), 6);
lcd.setCursor(0, 1);
lcd.print("Lon ");
lcd.print(gps.location.lng(), 6);
}
else
{
Serial.print ("Blad");
}
}
Poczatki zawsze sa trudne :-)
Arduino Mega256, Nano, Pro Mini.
Arduino Mega256, Nano, Pro Mini.