70 lines
2.4 KiB
C++
70 lines
2.4 KiB
C++
#include <TinyGPSPlus.h>
|
|
#include <SoftwareSerial.h>
|
|
|
|
/*
|
|
This sample demonstrates TinyGPSPlus's capacity for extracting custom
|
|
fields from any NMEA sentence. TinyGPSPlus has built-in facilities for
|
|
extracting latitude, longitude, altitude, etc., from the $GPGGA and
|
|
$GPRMC sentences. But with the TinyGPSCustom type, you can extract
|
|
other NMEA fields, even from non-standard NMEA sentences.
|
|
|
|
It requires the use of SoftwareSerial, and assumes that you have a
|
|
4800-baud serial GPS device hooked up on pins 4(RX) and 3(TX).
|
|
*/
|
|
static const int RXPin = 4, TXPin = 3;
|
|
static const uint32_t GPSBaud = 4800;
|
|
|
|
// The TinyGPSPlus object
|
|
TinyGPSPlus gps;
|
|
|
|
// The serial connection to the GPS device
|
|
SoftwareSerial ss(RXPin, TXPin);
|
|
|
|
/*
|
|
By declaring TinyGPSCustom objects like this, we announce that we
|
|
are interested in the 15th, 16th, and 17th fields in the $GPGSA
|
|
sentence, respectively the PDOP (F("positional dilution of precision")),
|
|
HDOP (F("horizontal...")), and VDOP (F("vertical...")).
|
|
|
|
(Counting starts with the field immediately following the sentence name,
|
|
i.e. $GPGSA. For more information on NMEA sentences, consult your
|
|
GPS module's documentation and/or http://aprs.gids.nl/nmea/.)
|
|
|
|
If your GPS module doesn't support the $GPGSA sentence, then you
|
|
won't get any output from this program.
|
|
*/
|
|
|
|
TinyGPSCustom pdop(gps, "GPGSA", 15); // $GPGSA sentence, 15th element
|
|
TinyGPSCustom hdop(gps, "GPGSA", 16); // $GPGSA sentence, 16th element
|
|
TinyGPSCustom vdop(gps, "GPGSA", 17); // $GPGSA sentence, 17th element
|
|
|
|
void setup()
|
|
{
|
|
Serial.begin(115200);
|
|
ss.begin(GPSBaud);
|
|
|
|
Serial.println(F("UsingCustomFields.ino"));
|
|
Serial.println(F("Demonstrating how to extract any NMEA field using TinyGPSCustom"));
|
|
Serial.print(F("Testing TinyGPSPlus library v. ")); Serial.println(TinyGPSPlus::libraryVersion());
|
|
Serial.println(F("by Mikal Hart"));
|
|
Serial.println();
|
|
}
|
|
|
|
void loop()
|
|
{
|
|
// Every time anything is updated, print everything.
|
|
if (gps.altitude.isUpdated() || gps.satellites.isUpdated() ||
|
|
pdop.isUpdated() || hdop.isUpdated() || vdop.isUpdated())
|
|
{
|
|
Serial.print(F("ALT=")); Serial.print(gps.altitude.meters());
|
|
Serial.print(F(" PDOP=")); Serial.print(pdop.value());
|
|
Serial.print(F(" HDOP=")); Serial.print(hdop.value());
|
|
Serial.print(F(" VDOP=")); Serial.print(vdop.value());
|
|
Serial.print(F(" SATS=")); Serial.println(gps.satellites.value());
|
|
}
|
|
|
|
while (ss.available() > 0)
|
|
gps.encode(ss.read());
|
|
}
|
|
|