GithubHelp home page GithubHelp logo

tinygpsplus's Introduction

TinyGPSPlus

A new, customizable Arduino NMEA parsing library A NEW Full-featured GPS/NMEA Parser for Arduino TinyGPSPlus is a new Arduino library for parsing NMEA data streams provided by GPS modules.

1.1-beta update: Several pull requests incorporated (or equiv)

  • 38 Added Fix Quality and Fix Mode
  • 66/109 Fix stringop truncation warning
  • 69 Support for non-Arduino platforms
  • 88 Slight change to earth radius
  • 106 Support all satellite groups

Like its predecessor, TinyGPS, this library provides compact and easy-to-use methods for extracting position, date, time, altitude, speed, and course from consumer GPS devices.

However, TinyGPSPlus’s programmer interface is considerably simpler to use than TinyGPS, and the new library can extract arbitrary data from any of the myriad NMEA sentences out there, even proprietary ones.

See Arduiniana - TinyGPSPlus for more detailed information on how to use TinyGPSPlus.

tinygpsplus's People

Contributors

denravonska avatar jvhaarst avatar mb-00101110 avatar mikalhart avatar mikalhart-intel avatar nseidle avatar santaimpersonator avatar td-er avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tinygpsplus's Issues

Missing Feature

Addition of accessible values #4,6 and 11
This will give full use of available data and make display formatting easier.
Thanks
Doug
E.g:
$ GPRMC, 033308.00, A, 3022.29739, N, 11454.04296, E, 0.044, 111116 ,,, A * 75

(1) UTC time, hhmmss (hours and seconds)
(2) positioning state, A = effective positioning, V = invalid positioning
(3) latitude ddmm.mmmmm (degrees)
(4) latitude hemisphere N (northern hemisphere) or S (southern hemisphere)
(5) longitude dddmm.mmmmm (degrees)
(6) longitude hemisphere E (longitude) or W (west longitude)
(7) The ground speed (000.0 to 999.9)
(8) ground heading (000.0 ~ 359.9 degrees, with true north as the reference)
(9) UTC date, ddmmyy (day month month)
(10) magnetic declination (000.0 ~ 180.0 degrees, less than the leading digits complement 0)
(11) Magnetic declination direction, E (east) or W (west)
(12) Mode indication (A = autonomous positioning, D = differential, E = estimation, N = data invalid)

CustomFields When Blank

$PFLAA,0,-45322,54013,2709,1,406CCE!EZY29QP,23,,145,-10.7,9*70

Example where field is blank (the field after 1500).
$PFLAA,3,1500,,11,1,407076!GDFDO,,,,0.0,8*0B

When parsing using custom fields, when the field is blank I'm getting a value, which I think is whatever it was previously. Updated is true, age is 1ms so it thinks its parsed it. I specifically need to know when this field is blank for my application.

Am I being dumb here?

Cannot use 3D Speed

Very new here and I might miss something... Speed calculates only the speed over ground (2D). However, the librairy doesn't seems to allow to extract the 3D speed. Is there a way to switch to 3D speed? When reviewing documentation from U-Blox, it looks like it could be possible by changing filters.

Time/Date sometimes erroneously reported as "valid"/"updated"

Certain modules, prior to getting a fix, report NMEA strings like this:

$GPGGA,,,,,,, …

Since they have valid checksums, the current implementation sets the time and date fields to "valid" and "updated", even though they clearly are not really either. (Courtesy Alan Adamson.)

Examples don't work

The examples all have default bauds of 4800, and it doesn't want to work.
I have switched it to 9600 and it started working.

Is this a problem with just my neo-6m, that the default is 9600?

'radians' and 'degrees' function not declared

I'm getting compiling errors when I try to compile Arduino: 1.6.3 (Windows 7), Board: "Intel® Edison"

TinyGPS++.cpp: In static member function 'static double TinyGPSPlus::distanceBetween(double, double, double, double)':

TinyGPS++.cpp:290:39: error: 'radians' was not declared in this scope

double delta = radians(long1 - long2);

                                   ^

TinyGPS++.cpp: In static member function 'static double TinyGPSPlus::courseTo(double, double, double, double)':

TinyGPS++.cpp:314:38: error: 'radians' was not declared in this scope

double dlon = radians(long2 - long1);

                                  ^

TinyGPS++.cpp:325:20: error: 'degrees' was not declared in this scope

return degrees(a2);

                ^

Error compiling.

This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.
this library using Arduino 1.6.3 on an Intel Edison board.

Number of Satellites and altitude

I'm trying to get the number of used satellites and the altitude from my GPS modul, a ublox NEO 6M.

Reading the blank Serial data, I can see that both values a in the GPGGA Sentence.
But using the functions of your library results in "0" in both cases. Any idea what the problem is?
Best regards

Felix

How can I save the obtained location & then send it through SMS?

Hello! I have following function:

`
bool sendLocation(char* number, char* latitude, char* longtitude)
{

cleanBuffer();
serialSIM800.println("AT+CMGF=1");
if ( waitFor("OK", "ERROR") != 1 ) return false;

cleanBuffer();
serialSIM800.print("AT+CMGS=\"");
serialSIM800.print(number);
serialSIM800.println("\"");
if ( waitFor(">", "ERROR") != 1 ) return false;

cleanBuffer();
serialSIM800.print("LAT: ");
serialSIM800.println(latitude);
serialSIM800.print("LON: ");
serialSIM800.println(longtitude);
serialSIM800.println((char)26);
if ( waitFor("+CMGS:", "ERROR") != 1 ) return false;
return true;

}`

Will it be fine if I define latitude & longitude as:
char* latitude;
char* longtitude;

How can I save the obtained latitude & longitude and then pass them into my function? Please help me.

Aquiring data even without fix solution

We are planning on using the GPS as an RTC time source to update the system time when a date+time combination has been received. While we do receive a valid time it seems like TinyGPS++ rejects the message since it's navigated:

$GPRMC,071731.000,V,5918.2490,N,01801.7736,E,1.8,257.2,110913,0.0,W*69

An alternative to rejecting the message could be to accept it and allow the user to check the quality of the data within it. I can understand the rationale behind the current solution (easier to use) but I think the data in this case is still valid and up for grabs.

disabling checksums for test purposes

I would like to know if it is possible to disable the checksum verification. I would like to send some test sentences to see if my project handles correctly some error conditions and if my DST subroutine is working.
I am not a seasoned programmer... just sort of an advanced beginner

thank you

Improper date output

No matter what I attempt, I can never get the date to be displayed correctly.

If I paste my own GPS data into the BasicExample, it outputs correctly. However, none of the other examples will output the date in any other format than day: 00, mon: 00 and year: 2000 when printing it manually using gps.date.day(), month() and year().

I'm not proficient enough in C++ to understand where the parsing is occurring, or what is holding the date from being calculated in any program outside of Basic Example. All other information is displayed correctly while receiving data from my GPS unit live-time.

Here's a snip of my GPS data:

"$GPRMC,180110.000,A,5111.1111,N,11411.1111,W,0.00,319.94,280517,,,D*75\r\n"
"$GPGGA,180111.000,5111.1111,N,11411.1111,W,2,7,1.39,1099.1,M,-17.5,M,0000,0000*5D\r\n"
"$GPRMC,180111.000,A,5111.1111,N,11411.1111,W,0.00,319.94,280517,,,D*74\r\n"
"$GPGGA,180112.000,5111.1111,N,11411.1111,W,2,7,1.39,1099.1,M,-17.5,M,0000,0000*5E\r\n";

I've been fiddling with this for hours, and it's the only thing holding me back from being able to move forward.

Great piece of software otherwise though.

Calculate heading to coordinate

Hi, id ran into the problem that im not able to calculate the heading from a coordinate to a given coordinate (fastest way, air routing)if im "on the other side of the world". Ive got a HMC5883 compass from which im able to calculate the heading in degrees to North.

At this time im calculating the heading using Pythagoras formula.
How would you (or how do you) calculate the heading if you are "on the other side of the world" ?
Thats a very interesting math question ^^ I thought about "splitting" the triangle into two parts to the "other side of the world".

Im sorry for my english. (Do you speak german?).
Thanks in advance.

latitude和longitude精度不够

hello,
我现在的输出: latitude":30.60,"longitude":104.13,
怎么增加精度到6位 latitude":39.997761,"longitude":116.478935,

Update the Version Info

Hi
please can you Update the Version Info ind the .h File.

#define _GPS_VERSION "0.92" // software version of this library

RG
Stefan

Error in example code?

In all of the examples, the code wraps gps.encode in an if statement.

if (gps.encode(ss.read()))

However, the encode function always returns false in each case statement. I wasn't getting any results using the example code, but when I removed the if statement, I got valid gps sentences returned.

bool TinyGPSPlus::encode(char c)

How to calculate Date and Time in different timezone from TinyGPSPlus class

Hi,
Thank you for this great library.

Please advise the reliable way to calculate the Date and Time in different timezone.

The example:
UTC: Date is 01.01.2019, Time is 23:59
Timezone is 2.
I want to receive TZ2: Date is 02.01.2019, Time is 01:59.

My guess is to get raw UTC_seconds, increase them by 24x60x60xTZ, and convert them back to date/time, but I can't find the proper places in your library.

Thank you in advance, I hope that if you will provide this hint, it will be helpful for many users.

Wrong satellite number when using custom fields

Not really a bug, but rather wrong logic in examples (SatElevTracker.ino and other using custom fields).
When satsInView.value() is not multiply of four (eg.11 or 6), then collected set of satellites has duplicates.
Instead of using:
if (totalGPGSVMessages.isUpdated()) {
for (int i=0; i<4; ++i)
...

Use loop:
for (int i = 0; currentMessage < totalMessages ? i < 4 : i < (atoi(satsInView.value()) % 4); ++i)

It will take care about last GPGSV sentence which can be "not complete" (read: less than 4 satellites)

custom line GPGST works but when it is GNGST it does not

I updated my GPS firmware and now it spits out GNGST rather than GPGST.
When it was outputting GPGST the following worked:
TinyGPSCustom posrms(gps, "GPGST", 2);
TinyGPSCustom latsig(gps, "GPGST", 6);
TinyGPSCustom lonsig(gps, "GPGST", 7);
TinyGPSCustom htsig(gps, "GPGST", 8);

but as it now outputs GNGST I updated my code to look look this.

TinyGPSCustom posrms(gps, "GNGST", 2);
TinyGPSCustom latsig(gps, "GNGST", 6);
TinyGPSCustom lonsig(gps, "GNGST", 7);
TinyGPSCustom htsig(gps, "GNGST", 8);

TinyGPSplus is not now extracting any info.

The GNSS unit is outputting the following:
$GNGST,093415.00,2.963,,,,0.466,0.421,0.819*60

Tinygps reports 'course' correctly until I execute a "U8G2" "Send Buffer"

Input: Adafruit Ultimate GPS (TinyGPS++)
Output: 1.5" SPI OLED display (U8G2)
Processor: Teensy LC

My sketch basically report ( nbr sats, direction, altitude, course to home, distance to home).
If I never issue the U8G2 "Send Buffer", TinyGPS shows/updates (Serial.print), as an example, 'direction'.
Once I issue the "SendBuffer", TinyGPS always returns zero.


`// Date Written: May 5,2019
// Author: Dave Garner
// Base code is from Yvan @ https://Brainy-Bits.com
// Processor: Teensy LC
// Input Adafruit Ultimate GPS
// Output: 1.5" SPI OLED display

// This code resides in my '36 Chevy Street rod and is used to display the following
// information on a 1.5" OLED display mounted above the interior rear view mirror.

// Direction of travel
// Elevation
// Direction and distance to my home.

#include <U8g2lib.h> // U8g2 Library for Oled https://github.com/olikraus/u8g2
#include <Math.h>
#include <TinyGPS++.h>
TinyGPSPlus gps;

char CSats[3] ="00";
char CAlt[5];
char CDis[5];
char CAngle[4] ="xxx";
long IAngle ;
long IAlt;
const char *cardinalHeading ;
int StringPixilLength ;
char HomeString[10];

// static const double Home_LAT = 38.896565, Home_LON = -121.07689; // test (Aubrun CA)

static const double Home_LAT = 38.652807, Home_LON = -121.153539; // my home location

// U8g2 Library SPI, Software Serial, Full Frame Buffer mode

// rotation, clock, data, cs, dc [, reset])
U8G2_SSD1327_MIDAS_128X128_F_4W_SW_SPI u8g2(U8G2_R0 , 5, 6, 4, 3 , 2) ;

void setup()
{
Serial.begin(9600);
Serial.println("---- Fire this Baby up! 2------");
Serial1.begin(9600);

u8g2.begin();
u8g2.setContrast(200); // 0 to 255
// delay (5000) ;

}
void loop()
{
//---------------------------------------- Grab and format the satellite info -----------------------------
// Serial.print("Serial1.available() "); Serial.println(Serial1.available());
while (Serial1.available())
gps.encode(Serial1.read());
//---------------------------------------- Wait till there are at least 4 sats -----------------------------
/*
if (gps.satellites.value() < 4)
{
sprintf(CSats, "%02lu",gps.satellites.value());
// Serial.print("satellites.value--"); Serial.println(CSats);
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_fub14_tr);
u8g2.drawStr(00, 30, CSats);
u8g2.setFont(u8g2_font_fub25_tr);
u8g2.drawStr(10, 100, "No Fix!");
u8g2.sendBuffer();
}
else
//---------------------------------------- Got 4+?, grab 'em -----------------------------
{
*/
if (gps.satellites.value() > 4 )
{
sprintf(CSats, "%02lu",gps.satellites.value());
Serial.print("satellites.value--"); Serial.println(CSats);
//---------------------------------------- Grab current heading -----------------------------

 IAngle = gps.course.deg();
  itoa(IAngle,CAngle,10) ;
 Serial.println(CAngle);
const char *cardinalHeading =  TinyGPSPlus::cardinal(gps.course.deg());

Serial.println(cardinalHeading);

//---------------------------------------- Grab current elevation -----------------------------
IAlt = gps.altitude.feet();

itoa(IAlt,CAlt,10) ;

//---------------------------------------- Grab distance, course to "home" -----------------------------
unsigned long distanceKmToHome =
(unsigned long)TinyGPSPlus::distanceBetween(
gps.location.lat(),
gps.location.lng(),
Home_LAT,
Home_LON) / 1000;
distanceKmToHome = distanceKmToHome * 0.621371;
itoa(distanceKmToHome,CDis,10) ;

 double courseToHome =
  TinyGPSPlus::courseTo(
  gps.location.lat(),
  gps.location.lng(),
  Home_LAT, 
  Home_LON); 

//---------------------------------------- Format the OLED Display -----------------------------

u8g2.clearBuffer();   

//----------------------------------------- number of satellites ----------------------------
u8g2.setFont(u8g2_font_fub14_tr);
u8g2.drawStr(00, 35, CSats);
u8g2.drawStr(99, 35, CAngle);
u8g2.sendBuffer();
}

}

`

hdop value exposed as integer (194) instead of float (1.94)

Hi Mikal.
I'm using your wonderful library since September and worked fine. Thank you!

Today I've found a small issue with "hdop". I need to log all error info about my GPS (Locosys LS20031) to calculate statistics and then work on sensor fusion with an IMU.
I configured the following custom fields and I'm getting their values without issues:

TinyGPSCustom pdop(gps, "GPGSA", 15); // $GPGSA sentence, 15th element
TinyGPSCustom vdop(gps, "GPGSA", 17); // $GPGSA sentence, 17th element

Instead, when I try to display hdop (already directly managed in your library) i get an integer value.
For example, when a message like this is received:

$GPGSA,A,3,04,19,14,22,27,,,,,,,,2.17,1.94,0.98*07

I get 2.17 and 0.98 in the custom elements values.
But I get 194 in gps.hdop.value() . You can see this behavior using the KitchenSink.ino example.

I also tried adding hdop as a custom element:

TinyGPSCustom hdop(gps, "GPGSA", 16); // $GPGSA sentence, 16th element

but that change breaks the normal processing and i can't get any value updated by the library.

Could you please have a look at the hdop processing ? If it is not a bug and I'm doing something wrong please let me know.

PS: I know I could divide that by 100 but it could also be one of those subtle bugs hiding possible other issues with specific devices or new messages... just in case.

Thank you,
Mario

cardinal course calculation in FullExample.ino sketch

Instead of reading the gps.course.value() in the code of FullExample.ino:
printStr(gps.course.isValid() ? TinyGPSPlus::cardinal(gps.course.value()) : "* ", 6);
the course parameter must be given in degrees to get correct results:
printStr(gps.course.isValid() ? TinyGPSPlus::cardinal(gps.course.deg()) : "
* ", 6);

Not same values when compile in Linux

Hi!

I'm tryin to use the TinyGPSPlus in Arduino to retreive lat, long altitude and number of satellites. It work when I upload from W7 to the board (IDE v1.6.3), but when I upload the code from Ubuntu, does not show satellites and altitude values.

wrong coordinates from GPGGA?

Hello,

i read the gps string from a Sim808. Here is a example:

$GPGGA,104108.000,0050.9686,N,00011.0508,E,1,6,1.31,207.2,M,47.6,M,,*5e

and feed with this the gps.encode function. After this, i read the position:

Serial.print(F("Location: "));
if (gps.location.isValid())
{
Serial.print(gps.location.lat(), 6);
Serial.print(F(","));
Serial.print(gps.location.lng(), 6);
}

But i think, i got a strange answer:

Location: 0.849477,0.184180

If i read the location string in an other format, it seems to work.
$GPRMC,105059.000,A,5058.1122,N,01103.0505,E,2.722,183.48,090317,,,A*52

Location: 50.968525,11.050855

Can you tell me, is there something strange? Is the format of the GPGGA string korrekt?

best regargs

Holger Koch

CourseTo gives incorrect course

Does the TinyGPSPlus::courseTo method work properly? It gives me a course of 288.71 degrees, when the actual course seems to be about 301 degrees. The coords I'm using are : from (51.433,-0.3499) to (51.610875,-0.808697).

RTK gps date problem

connection with rtk gps does not produce date output.

example gps sentence:

$GPGGA,151709.00,4008.28657638,N,02624.44704130,E,5,04,3.9,6.469,M,38.526,M,1.0,0206*43

sending data to Terminal Node Controller (TNC)

I have been successful in setting up a logger on an ESP8266. I am creating a file in SPIFFS that can be converted to a KLM file for Google Earth.

Now I would like to hook up my Ham Radio TNC. I need to feed it the appropriate NEMA sentence. $GPGGA should work.

Is ther a way to make TinyGPSPlus echo a NEMA sentence?

something like (I just made this up):

char sentence[128];
// echo last $GPGGA sentence
sentence = gps.nema.gpgga();

Suggestions? How can I accomplish something like this.

Longitude values within 1 degree E of meridian are returned as negative (W)

A position just E of the meridian, having iLngDegrees of 0, causes the test in TinyGPSLocation::lng() to subtract the billionths which results in the reported position being shown as negative (W).

The indication of W or E in TinyGPSPlus::endOfTermHandler() , which negates the degree value in the case of W, has no effect when the value is 0 since -0 is the same.

This issue will presumably also affect latitude values within 1 degree of the equator.

What if I can't use TX2 and RX2 ?

Hello !

I have a ESP32 Wrover-B DevKitV4 and it's GPIO 16 and 17 are disabled from factory.
I can't use TX and RX, because nobody can.
I've tried and I can't upload any sketch on it:
A fatal error occurred: Failed to write to target RAM (result was 01070000)

What can I do in this case ?
Can't I use other pins ?

Minute display with DiviceExample code

Hi,
I'm working now with U-BLOX 6 GPS module in UART.
I report an issue about the Time display with the TinyGPS++ lib.
I can display all parametters without any problem exept the minutes.
Instead of 18:59:18, i get 18:18 for example.
I cannot see anything wrong in the example code. Thats strange.

if (gpsNEO.time.isValid()) {
if (gpsNEO.time.hour() < 10) tft.print("0");
tft.print(gpsNEO.time.hour());
tft.print(":");
if (gpsNEO.time.minute() < 10) tft.print("0");
Serial.print(gpsNEO.time.minute());
Serial.print(":");
if (gpsNEO.time.second() < 10) tft.print("0");
tft.print(gpsNEO.time.second());
} else {
tft.print("INVALID");
}
Does anyone have seen that problem before ?

Change update frequency

I want to change the update frequency without changing the baud-rate. I dont want to use delays. Anything to add in DeviceExample program or should I do some changes in the header file?

GPS Time 3 seconds fast!?

Firstly thankyou very much for this excellent library, it has proved incredibly useful for my latest project. This is more of a question than an issue as I don't think my problem is directly related to any of the API's in this library....but its very confusing and I didnt know where else to post the question.

I have made a race timing system consisting of two identical boxes - one is a start gate and one is a finish gate. To sync the time on both gates I am using Neo-6m GPS modules like this.... http://www.ebay.co.uk/itm/172406984538?_trksid=p2057872.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT
connected to a an Arduino Pro Micro.

On startup I wait for a valid and updated time string and then read the hour(), minute(), second() and then start an on board timer to keep time. I dont look for any more GPS messages after this point but I do wait for the PPS interrupt. Once I have this I update the millisecond count for better accuracy and then periodically check this interrupt to keep everything nicely synced.

It all works great and I used the system successfully at the weekend for a friendly bike race. However I have one annoying issue that I cant work out. Both boxes are identical in terms of hardware and software (although I got the 2 Neo-6m boards from different ebay sellers and they look slightly different.) But they behave in a slightly different way on startup. If I am outside with a good view of the sky both boxes acquire the time after a few seconds and its accurate (within a second) to the correct GPS time taken from the internet. After a minute or so we see the PPS signal and the times are synced exactly.

All well and good. However...occasionally outside but always inside (e.g when the GPS signal is weaker) - if I power on the boxes one of them works ok but takes a little longer to connect - but the other one (and its always the same one) starts ticking 3 seconds fast.

I have checked the data I am reading from the TinyGPSPlus API's and this is where the 3 second difference comes from.

Eventually if I take the box outside I start reading the correct time but since I only read the time once this is a problem for me as I have to keep power cycling it until it reads the correct time.

Its always the same box and always 3 seconds which makes it very confusing and also because the time is 3 seconds FAST. If it was slow I would assume I was reading old data.

Its almost as if the satellite itself is fast - which is of course impossible.

So I am pretty stumped by this one - I just thought I would post it here as you of course have a lot of experience with reading the GPS messages - have you ever seen this before?

Thanks
Nick

GNNS instead GPS

for some years I heared the term Global Navigation Satellite System (GNNS) and found this as an naming-superset of Global Positioning Systems. It made no difference for me because I used only US GPS satellites.

Now the times have gone foreward and other GNNS like Glonass in Europe also play an important role in navigation.

With modern uBlox receivers also one problem arises:
! The NMEA sentences are not longer named GPxyz if other GNNS are included in the solution !

This means one can rely only on ariving GPGGA sentences if ONLY GPS is enabled. Doing this would be foolish in Europe because we will loose about one half of the satellites in view.

So I changed the processing of the NMEA sentences. Because the GNNS specific sentences only differ in the 2nd char ( 'P'= U.S.-GPS, 'L'=Glonass, 'B'= Baidou, 'N' = generic ) I replace the 2nd char of the NMEA sentence with 'N' as the generic char and compare the sentences with "GNxyz". So the detection still works. Alls variables I adopted as well for this GNNS naming scheme...

Pitfall: ublox has introduced/reserved NMEA sentences with only one underscore instead the "GN" ( or "GP" ) prefix. Such messages I have never seen in reality but they would break my solution ... but the build in parser as well.

TinyGPSPlus.zip

encode +CGNSINF

Hi

how can i encode the +CGINF Message?

+CGNSINF:1,1,20150327014838.000,31.221783,121.354528,114.600,0.28,0.0,1,,1.9,2.2,1.0,,8,4,,,42,,

+CGNSINF: ,,<UTC date & Time>,,,,,,,,,,,,,,,,<C/N0 max>,,

Library names must contain only letters and numbers

On OSX Mavericks the usual import using the menu leads to following error message:

"The Library ....[0.94b] cannot be used. Library names must contain only basic letters and numbers, (ASCII only and no spaces, and it cannot start with a number)"

How can I get a signal accuracy ?

Hello !

I am trying to find a function that can tell me the accuracy of the signal.

At first I thought that TinyGPSPlus::distanceBetween() should do the trick, but that function does something else.

Is it possible to get signal accuracy ?
Thank you !

gps.location.isValid() method returns true when fix is lost

I'm not sure if this a feature or a bug. It appears that gps.location.isValid() returns true even when the fix is lost for some time. Does it not reset if a fix is lost?

Using if (gps.location.isValid() && gps.location.age() < 2000) is my work around.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.