mirror of
https://github.com/KevinMidboe/Arduino.git
synced 2025-10-29 17:40:11 +00:00
Init commit with many years of arduino sketches and projects. I dont know if the esp8266 includes much, but there are also libraries. I hope they dont have crazy automatic versioning through the Arduino IDE.
This commit is contained in:
91
libraries/TinyGPSPlus-1.0.2/examples/BasicExample/BasicExample.ino
Executable file
91
libraries/TinyGPSPlus-1.0.2/examples/BasicExample/BasicExample.ino
Executable file
@@ -0,0 +1,91 @@
|
||||
#include <TinyGPS++.h>
|
||||
/*
|
||||
This sample sketch should be the first you try out when you are testing a TinyGPS++
|
||||
(TinyGPSPlus) installation. In normal use, you feed TinyGPS++ objects characters from
|
||||
a serial NMEA GPS device, but this example uses static strings for simplicity.
|
||||
*/
|
||||
|
||||
// A sample NMEA stream.
|
||||
const char *gpsStream =
|
||||
"$GPRMC,045103.000,A,3014.1984,N,09749.2872,W,0.67,161.46,030913,,,A*7C\r\n"
|
||||
"$GPGGA,045104.000,3014.1985,N,09749.2873,W,1,09,1.2,211.6,M,-22.5,M,,0000*62\r\n"
|
||||
"$GPRMC,045200.000,A,3014.3820,N,09748.9514,W,36.88,65.02,030913,,,A*77\r\n"
|
||||
"$GPGGA,045201.000,3014.3864,N,09748.9411,W,1,10,1.2,200.8,M,-22.5,M,,0000*6C\r\n"
|
||||
"$GPRMC,045251.000,A,3014.4275,N,09749.0626,W,0.51,217.94,030913,,,A*7D\r\n"
|
||||
"$GPGGA,045252.000,3014.4273,N,09749.0628,W,1,09,1.3,206.9,M,-22.5,M,,0000*6F\r\n";
|
||||
|
||||
// The TinyGPS++ object
|
||||
TinyGPSPlus gps;
|
||||
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(115200);
|
||||
|
||||
Serial.println(F("BasicExample.ino"));
|
||||
Serial.println(F("Basic demonstration of TinyGPS++ (no device needed)"));
|
||||
Serial.print(F("Testing TinyGPS++ library v. ")); Serial.println(TinyGPSPlus::libraryVersion());
|
||||
Serial.println(F("by Mikal Hart"));
|
||||
Serial.println();
|
||||
|
||||
while (*gpsStream)
|
||||
if (gps.encode(*gpsStream++))
|
||||
displayInfo();
|
||||
|
||||
Serial.println();
|
||||
Serial.println(F("Done."));
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
}
|
||||
|
||||
void displayInfo()
|
||||
{
|
||||
Serial.print(F("Location: "));
|
||||
if (gps.location.isValid())
|
||||
{
|
||||
Serial.print(gps.location.lat(), 6);
|
||||
Serial.print(F(","));
|
||||
Serial.print(gps.location.lng(), 6);
|
||||
}
|
||||
else
|
||||
{
|
||||
Serial.print(F("INVALID"));
|
||||
}
|
||||
|
||||
Serial.print(F(" Date/Time: "));
|
||||
if (gps.date.isValid())
|
||||
{
|
||||
Serial.print(gps.date.month());
|
||||
Serial.print(F("/"));
|
||||
Serial.print(gps.date.day());
|
||||
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());
|
||||
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();
|
||||
}
|
||||
92
libraries/TinyGPSPlus-1.0.2/examples/DeviceExample/DeviceExample.ino
Executable file
92
libraries/TinyGPSPlus-1.0.2/examples/DeviceExample/DeviceExample.ino
Executable file
@@ -0,0 +1,92 @@
|
||||
#include <TinyGPS++.h>
|
||||
#include <SoftwareSerial.h>
|
||||
/*
|
||||
This sample sketch demonstrates the normal use of a TinyGPS++ (TinyGPSPlus) object.
|
||||
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 TinyGPS++ object
|
||||
TinyGPSPlus gps;
|
||||
|
||||
// The serial connection to the GPS device
|
||||
SoftwareSerial ss(RXPin, TXPin);
|
||||
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(115200);
|
||||
ss.begin(GPSBaud);
|
||||
|
||||
Serial.println(F("DeviceExample.ino"));
|
||||
Serial.println(F("A simple demonstration of TinyGPS++ with an attached GPS module"));
|
||||
Serial.print(F("Testing TinyGPS++ library v. ")); Serial.println(TinyGPSPlus::libraryVersion());
|
||||
Serial.println(F("by Mikal Hart"));
|
||||
Serial.println();
|
||||
}
|
||||
|
||||
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()
|
||||
{
|
||||
Serial.print(F("Location: "));
|
||||
if (gps.location.isValid())
|
||||
{
|
||||
Serial.print(gps.location.lat(), 6);
|
||||
Serial.print(F(","));
|
||||
Serial.print(gps.location.lng(), 6);
|
||||
}
|
||||
else
|
||||
{
|
||||
Serial.print(F("INVALID"));
|
||||
}
|
||||
|
||||
Serial.print(F(" Date/Time: "));
|
||||
if (gps.date.isValid())
|
||||
{
|
||||
Serial.print(gps.date.month());
|
||||
Serial.print(F("/"));
|
||||
Serial.print(gps.date.day());
|
||||
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());
|
||||
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();
|
||||
}
|
||||
159
libraries/TinyGPSPlus-1.0.2/examples/FullExample/FullExample.ino
Executable file
159
libraries/TinyGPSPlus-1.0.2/examples/FullExample/FullExample.ino
Executable file
@@ -0,0 +1,159 @@
|
||||
#include <TinyGPS++.h>
|
||||
#include <SoftwareSerial.h>
|
||||
/*
|
||||
This sample code demonstrates the normal use of a TinyGPS++ (TinyGPSPlus) object.
|
||||
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 TinyGPS++ object
|
||||
TinyGPSPlus gps;
|
||||
|
||||
// The serial connection to the GPS device
|
||||
SoftwareSerial ss(RXPin, TXPin);
|
||||
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(115200);
|
||||
ss.begin(GPSBaud);
|
||||
|
||||
Serial.println(F("FullExample.ino"));
|
||||
Serial.println(F("An extensive example of many interesting TinyGPS++ features"));
|
||||
Serial.print(F("Testing TinyGPS++ library v. ")); Serial.println(TinyGPSPlus::libraryVersion());
|
||||
Serial.println(F("by Mikal Hart"));
|
||||
Serial.println();
|
||||
Serial.println(F("Sats HDOP Latitude Longitude Fix Date Time Date Alt Course Speed Card Distance Course Card Chars Sentences Checksum"));
|
||||
Serial.println(F(" (deg) (deg) Age Age (m) --- from GPS ---- ---- to London ---- RX RX Fail"));
|
||||
Serial.println(F("----------------------------------------------------------------------------------------------------------------------------------------"));
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
static const double LONDON_LAT = 51.508131, LONDON_LON = -0.128002;
|
||||
|
||||
printInt(gps.satellites.value(), gps.satellites.isValid(), 5);
|
||||
printFloat(gps.hdop.hdop(), gps.hdop.isValid(), 6, 1);
|
||||
printFloat(gps.location.lat(), gps.location.isValid(), 11, 6);
|
||||
printFloat(gps.location.lng(), gps.location.isValid(), 12, 6);
|
||||
printInt(gps.location.age(), gps.location.isValid(), 5);
|
||||
printDateTime(gps.date, gps.time);
|
||||
printFloat(gps.altitude.meters(), gps.altitude.isValid(), 7, 2);
|
||||
printFloat(gps.course.deg(), gps.course.isValid(), 7, 2);
|
||||
printFloat(gps.speed.kmph(), gps.speed.isValid(), 6, 2);
|
||||
printStr(gps.course.isValid() ? TinyGPSPlus::cardinal(gps.course.deg()) : "*** ", 6);
|
||||
|
||||
unsigned long distanceKmToLondon =
|
||||
(unsigned long)TinyGPSPlus::distanceBetween(
|
||||
gps.location.lat(),
|
||||
gps.location.lng(),
|
||||
LONDON_LAT,
|
||||
LONDON_LON) / 1000;
|
||||
printInt(distanceKmToLondon, gps.location.isValid(), 9);
|
||||
|
||||
double courseToLondon =
|
||||
TinyGPSPlus::courseTo(
|
||||
gps.location.lat(),
|
||||
gps.location.lng(),
|
||||
LONDON_LAT,
|
||||
LONDON_LON);
|
||||
|
||||
printFloat(courseToLondon, gps.location.isValid(), 7, 2);
|
||||
|
||||
const char *cardinalToLondon = TinyGPSPlus::cardinal(courseToLondon);
|
||||
|
||||
printStr(gps.location.isValid() ? cardinalToLondon : "*** ", 6);
|
||||
|
||||
printInt(gps.charsProcessed(), true, 6);
|
||||
printInt(gps.sentencesWithFix(), true, 10);
|
||||
printInt(gps.failedChecksum(), true, 9);
|
||||
Serial.println();
|
||||
|
||||
smartDelay(1000);
|
||||
|
||||
if (millis() > 5000 && gps.charsProcessed() < 10)
|
||||
Serial.println(F("No GPS data received: check wiring"));
|
||||
}
|
||||
|
||||
// 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);
|
||||
}
|
||||
191
libraries/TinyGPSPlus-1.0.2/examples/KitchenSink/KitchenSink.ino
Executable file
191
libraries/TinyGPSPlus-1.0.2/examples/KitchenSink/KitchenSink.ino
Executable file
@@ -0,0 +1,191 @@
|
||||
#include <TinyGPS++.h>
|
||||
#include <SoftwareSerial.h>
|
||||
/*
|
||||
This sample code demonstrates just about every built-in operation of TinyGPS++ (TinyGPSPlus).
|
||||
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 TinyGPS++ object
|
||||
TinyGPSPlus gps;
|
||||
|
||||
// The serial connection to the GPS device
|
||||
SoftwareSerial ss(RXPin, TXPin);
|
||||
|
||||
// For stats that happen every 5 seconds
|
||||
unsigned long last = 0UL;
|
||||
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(115200);
|
||||
ss.begin(GPSBaud);
|
||||
|
||||
Serial.println(F("KitchenSink.ino"));
|
||||
Serial.println(F("Demonstrating nearly every feature of TinyGPS++"));
|
||||
Serial.print(F("Testing TinyGPS++ library v. ")); Serial.println(TinyGPSPlus::libraryVersion());
|
||||
Serial.println(F("by Mikal Hart"));
|
||||
Serial.println();
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
// Dispatch incoming characters
|
||||
while (ss.available() > 0)
|
||||
gps.encode(ss.read());
|
||||
|
||||
if (gps.location.isUpdated())
|
||||
{
|
||||
Serial.print(F("LOCATION Fix Age="));
|
||||
Serial.print(gps.location.age());
|
||||
Serial.print(F("ms Raw Lat="));
|
||||
Serial.print(gps.location.rawLat().negative ? "-" : "+");
|
||||
Serial.print(gps.location.rawLat().deg);
|
||||
Serial.print("[+");
|
||||
Serial.print(gps.location.rawLat().billionths);
|
||||
Serial.print(F(" billionths], Raw Long="));
|
||||
Serial.print(gps.location.rawLng().negative ? "-" : "+");
|
||||
Serial.print(gps.location.rawLng().deg);
|
||||
Serial.print("[+");
|
||||
Serial.print(gps.location.rawLng().billionths);
|
||||
Serial.print(F(" billionths], Lat="));
|
||||
Serial.print(gps.location.lat(), 6);
|
||||
Serial.print(F(" Long="));
|
||||
Serial.println(gps.location.lng(), 6);
|
||||
}
|
||||
|
||||
else if (gps.date.isUpdated())
|
||||
{
|
||||
Serial.print(F("DATE Fix Age="));
|
||||
Serial.print(gps.date.age());
|
||||
Serial.print(F("ms Raw="));
|
||||
Serial.print(gps.date.value());
|
||||
Serial.print(F(" Year="));
|
||||
Serial.print(gps.date.year());
|
||||
Serial.print(F(" Month="));
|
||||
Serial.print(gps.date.month());
|
||||
Serial.print(F(" Day="));
|
||||
Serial.println(gps.date.day());
|
||||
}
|
||||
|
||||
else if (gps.time.isUpdated())
|
||||
{
|
||||
Serial.print(F("TIME Fix Age="));
|
||||
Serial.print(gps.time.age());
|
||||
Serial.print(F("ms Raw="));
|
||||
Serial.print(gps.time.value());
|
||||
Serial.print(F(" Hour="));
|
||||
Serial.print(gps.time.hour());
|
||||
Serial.print(F(" Minute="));
|
||||
Serial.print(gps.time.minute());
|
||||
Serial.print(F(" Second="));
|
||||
Serial.print(gps.time.second());
|
||||
Serial.print(F(" Hundredths="));
|
||||
Serial.println(gps.time.centisecond());
|
||||
}
|
||||
|
||||
else if (gps.speed.isUpdated())
|
||||
{
|
||||
Serial.print(F("SPEED Fix Age="));
|
||||
Serial.print(gps.speed.age());
|
||||
Serial.print(F("ms Raw="));
|
||||
Serial.print(gps.speed.value());
|
||||
Serial.print(F(" Knots="));
|
||||
Serial.print(gps.speed.knots());
|
||||
Serial.print(F(" MPH="));
|
||||
Serial.print(gps.speed.mph());
|
||||
Serial.print(F(" m/s="));
|
||||
Serial.print(gps.speed.mps());
|
||||
Serial.print(F(" km/h="));
|
||||
Serial.println(gps.speed.kmph());
|
||||
}
|
||||
|
||||
else if (gps.course.isUpdated())
|
||||
{
|
||||
Serial.print(F("COURSE Fix Age="));
|
||||
Serial.print(gps.course.age());
|
||||
Serial.print(F("ms Raw="));
|
||||
Serial.print(gps.course.value());
|
||||
Serial.print(F(" Deg="));
|
||||
Serial.println(gps.course.deg());
|
||||
}
|
||||
|
||||
else if (gps.altitude.isUpdated())
|
||||
{
|
||||
Serial.print(F("ALTITUDE Fix Age="));
|
||||
Serial.print(gps.altitude.age());
|
||||
Serial.print(F("ms Raw="));
|
||||
Serial.print(gps.altitude.value());
|
||||
Serial.print(F(" Meters="));
|
||||
Serial.print(gps.altitude.meters());
|
||||
Serial.print(F(" Miles="));
|
||||
Serial.print(gps.altitude.miles());
|
||||
Serial.print(F(" KM="));
|
||||
Serial.print(gps.altitude.kilometers());
|
||||
Serial.print(F(" Feet="));
|
||||
Serial.println(gps.altitude.feet());
|
||||
}
|
||||
|
||||
else if (gps.satellites.isUpdated())
|
||||
{
|
||||
Serial.print(F("SATELLITES Fix Age="));
|
||||
Serial.print(gps.satellites.age());
|
||||
Serial.print(F("ms Value="));
|
||||
Serial.println(gps.satellites.value());
|
||||
}
|
||||
|
||||
else if (gps.hdop.isUpdated())
|
||||
{
|
||||
Serial.print(F("HDOP Fix Age="));
|
||||
Serial.print(gps.hdop.age());
|
||||
Serial.print(F("ms raw="));
|
||||
Serial.print(gps.hdop.value());
|
||||
Serial.print(F(" hdop="));
|
||||
Serial.println(gps.hdop.hdop());
|
||||
}
|
||||
|
||||
else if (millis() - last > 5000)
|
||||
{
|
||||
Serial.println();
|
||||
if (gps.location.isValid())
|
||||
{
|
||||
static const double LONDON_LAT = 51.508131, LONDON_LON = -0.128002;
|
||||
double distanceToLondon =
|
||||
TinyGPSPlus::distanceBetween(
|
||||
gps.location.lat(),
|
||||
gps.location.lng(),
|
||||
LONDON_LAT,
|
||||
LONDON_LON);
|
||||
double courseToLondon =
|
||||
TinyGPSPlus::courseTo(
|
||||
gps.location.lat(),
|
||||
gps.location.lng(),
|
||||
LONDON_LAT,
|
||||
LONDON_LON);
|
||||
|
||||
Serial.print(F("LONDON Distance="));
|
||||
Serial.print(distanceToLondon/1000, 6);
|
||||
Serial.print(F(" km Course-to="));
|
||||
Serial.print(courseToLondon, 6);
|
||||
Serial.print(F(" degrees ["));
|
||||
Serial.print(TinyGPSPlus::cardinal(courseToLondon));
|
||||
Serial.println(F("]"));
|
||||
}
|
||||
|
||||
Serial.print(F("DIAGS Chars="));
|
||||
Serial.print(gps.charsProcessed());
|
||||
Serial.print(F(" Sentences-with-Fix="));
|
||||
Serial.print(gps.sentencesWithFix());
|
||||
Serial.print(F(" Failed-checksum="));
|
||||
Serial.print(gps.failedChecksum());
|
||||
Serial.print(F(" Passed-checksum="));
|
||||
Serial.println(gps.passedChecksum());
|
||||
|
||||
if (gps.charsProcessed() < 10)
|
||||
Serial.println(F("WARNING: No GPS data. Check wiring."));
|
||||
|
||||
last = millis();
|
||||
Serial.println();
|
||||
}
|
||||
}
|
||||
150
libraries/TinyGPSPlus-1.0.2/examples/SatElevTracker/SatElevTracker.ino
Executable file
150
libraries/TinyGPSPlus-1.0.2/examples/SatElevTracker/SatElevTracker.ino
Executable file
@@ -0,0 +1,150 @@
|
||||
#include <TinyGPS++.h>
|
||||
#include <SoftwareSerial.h>
|
||||
/*
|
||||
This sample code tracks satellite elevations using TinyGPSCustom objects.
|
||||
|
||||
Satellite numbers and elevations are not normally tracked by TinyGPS++, but
|
||||
by using TinyGPSCustom we get around this.
|
||||
|
||||
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;
|
||||
static const int MAX_SATELLITES = 40;
|
||||
static const int PAGE_LENGTH = 40;
|
||||
|
||||
// The TinyGPS++ object
|
||||
TinyGPSPlus gps;
|
||||
|
||||
// The serial connection to the GPS device
|
||||
SoftwareSerial ss(RXPin, TXPin);
|
||||
|
||||
TinyGPSCustom totalGPGSVMessages(gps, "GPGSV", 1); // $GPGSV sentence, first element
|
||||
TinyGPSCustom messageNumber(gps, "GPGSV", 2); // $GPGSV sentence, second element
|
||||
TinyGPSCustom satNumber[4]; // to be initialized later
|
||||
TinyGPSCustom elevation[4];
|
||||
bool anyChanges = false;
|
||||
unsigned long linecount = 0;
|
||||
|
||||
struct
|
||||
{
|
||||
int elevation;
|
||||
bool active;
|
||||
} sats[MAX_SATELLITES];
|
||||
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(115200);
|
||||
ss.begin(GPSBaud);
|
||||
|
||||
Serial.println(F("SatElevTracker.ino"));
|
||||
Serial.println(F("Displays GPS satellite elevations as they change"));
|
||||
Serial.print(F("Testing TinyGPS++ library v. ")); Serial.println(TinyGPSPlus::libraryVersion());
|
||||
Serial.println(F("by Mikal Hart"));
|
||||
Serial.println();
|
||||
|
||||
// Initialize all the uninitialized TinyGPSCustom objects
|
||||
for (int i=0; i<4; ++i)
|
||||
{
|
||||
satNumber[i].begin(gps, "GPGSV", 4 + 4 * i); // offsets 4, 8, 12, 16
|
||||
elevation[i].begin(gps, "GPGSV", 5 + 4 * i); // offsets 5, 9, 13, 17
|
||||
}
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
// Dispatch incoming characters
|
||||
if (ss.available() > 0)
|
||||
{
|
||||
gps.encode(ss.read());
|
||||
|
||||
if (totalGPGSVMessages.isUpdated())
|
||||
{
|
||||
for (int i=0; i<4; ++i)
|
||||
{
|
||||
int no = atoi(satNumber[i].value());
|
||||
if (no >= 1 && no <= MAX_SATELLITES)
|
||||
{
|
||||
int elev = atoi(elevation[i].value());
|
||||
sats[no-1].active = true;
|
||||
if (sats[no-1].elevation != elev)
|
||||
{
|
||||
sats[no-1].elevation = elev;
|
||||
anyChanges = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int totalMessages = atoi(totalGPGSVMessages.value());
|
||||
int currentMessage = atoi(messageNumber.value());
|
||||
if (totalMessages == currentMessage && anyChanges)
|
||||
{
|
||||
if (linecount++ % PAGE_LENGTH == 0)
|
||||
printHeader();
|
||||
TimePrint();
|
||||
for (int i=0; i<MAX_SATELLITES; ++i)
|
||||
{
|
||||
Serial.print(F(" "));
|
||||
if (sats[i].active)
|
||||
IntPrint(sats[i].elevation, 2);
|
||||
else
|
||||
Serial.print(F(" "));
|
||||
sats[i].active = false;
|
||||
}
|
||||
Serial.println();
|
||||
anyChanges = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void IntPrint(int n, int len)
|
||||
{
|
||||
int digs = n < 0 ? 2 : 1;
|
||||
for (int i=10; i<=abs(n); i*=10)
|
||||
++digs;
|
||||
while (digs++ < len)
|
||||
Serial.print(F(" "));
|
||||
Serial.print(n);
|
||||
Serial.print(F(" "));
|
||||
}
|
||||
|
||||
void TimePrint()
|
||||
{
|
||||
if (gps.time.isValid())
|
||||
{
|
||||
if (gps.time.hour() < 10)
|
||||
Serial.print(F("0"));
|
||||
Serial.print(gps.time.hour());
|
||||
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(" "));
|
||||
}
|
||||
else
|
||||
{
|
||||
Serial.print(F("(unknown)"));
|
||||
}
|
||||
}
|
||||
|
||||
void printHeader()
|
||||
{
|
||||
Serial.println();
|
||||
Serial.print(F("Time "));
|
||||
for (int i=0; i<MAX_SATELLITES; ++i)
|
||||
{
|
||||
Serial.print(F(" "));
|
||||
IntPrint(i+1, 2);
|
||||
}
|
||||
Serial.println();
|
||||
Serial.print(F("---------"));
|
||||
for (int i=0; i<MAX_SATELLITES; ++i)
|
||||
Serial.print(F("----"));
|
||||
Serial.println();
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
149
libraries/TinyGPSPlus-1.0.2/examples/SatelliteTracker/SatelliteTracker.ino
Executable file
149
libraries/TinyGPSPlus-1.0.2/examples/SatelliteTracker/SatelliteTracker.ino
Executable file
@@ -0,0 +1,149 @@
|
||||
#include <TinyGPS++.h>
|
||||
#include <SoftwareSerial.h>
|
||||
/*
|
||||
This sample code demonstrates how to use an array of TinyGPSCustom objects
|
||||
to monitor all the visible satellites.
|
||||
|
||||
Satellite numbers, elevation, azimuth, and signal-to-noise ratio are not
|
||||
normally tracked by TinyGPS++, but by using TinyGPSCustom we get around this.
|
||||
|
||||
The simple code also demonstrates how to use arrays of TinyGPSCustom objects,
|
||||
each monitoring a different field of the $GPGSV sentence.
|
||||
|
||||
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 TinyGPS++ object
|
||||
TinyGPSPlus gps;
|
||||
|
||||
// The serial connection to the GPS device
|
||||
SoftwareSerial ss(RXPin, TXPin);
|
||||
|
||||
/*
|
||||
From http://aprs.gids.nl/nmea/:
|
||||
|
||||
$GPGSV
|
||||
|
||||
GPS Satellites in view
|
||||
|
||||
eg. $GPGSV,3,1,11,03,03,111,00,04,15,270,00,06,01,010,00,13,06,292,00*74
|
||||
$GPGSV,3,2,11,14,25,170,00,16,57,208,39,18,67,296,40,19,40,246,00*74
|
||||
$GPGSV,3,3,11,22,42,067,42,24,14,311,43,27,05,244,00,,,,*4D
|
||||
|
||||
1 = Total number of messages of this type in this cycle
|
||||
2 = Message number
|
||||
3 = Total number of SVs in view
|
||||
4 = SV PRN number
|
||||
5 = Elevation in degrees, 90 maximum
|
||||
6 = Azimuth, degrees from true north, 000 to 359
|
||||
7 = SNR, 00-99 dB (null when not tracking)
|
||||
8-11 = Information about second SV, same as field 4-7
|
||||
12-15= Information about third SV, same as field 4-7
|
||||
16-19= Information about fourth SV, same as field 4-7
|
||||
*/
|
||||
|
||||
static const int MAX_SATELLITES = 40;
|
||||
|
||||
TinyGPSCustom totalGPGSVMessages(gps, "GPGSV", 1); // $GPGSV sentence, first element
|
||||
TinyGPSCustom messageNumber(gps, "GPGSV", 2); // $GPGSV sentence, second element
|
||||
TinyGPSCustom satsInView(gps, "GPGSV", 3); // $GPGSV sentence, third element
|
||||
TinyGPSCustom satNumber[4]; // to be initialized later
|
||||
TinyGPSCustom elevation[4];
|
||||
TinyGPSCustom azimuth[4];
|
||||
TinyGPSCustom snr[4];
|
||||
|
||||
struct
|
||||
{
|
||||
bool active;
|
||||
int elevation;
|
||||
int azimuth;
|
||||
int snr;
|
||||
} sats[MAX_SATELLITES];
|
||||
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(115200);
|
||||
ss.begin(GPSBaud);
|
||||
|
||||
Serial.println(F("SatelliteTracker.ino"));
|
||||
Serial.println(F("Monitoring satellite location and signal strength using TinyGPSCustom"));
|
||||
Serial.print(F("Testing TinyGPS++ library v. ")); Serial.println(TinyGPSPlus::libraryVersion());
|
||||
Serial.println(F("by Mikal Hart"));
|
||||
Serial.println();
|
||||
|
||||
// Initialize all the uninitialized TinyGPSCustom objects
|
||||
for (int i=0; i<4; ++i)
|
||||
{
|
||||
satNumber[i].begin(gps, "GPGSV", 4 + 4 * i); // offsets 4, 8, 12, 16
|
||||
elevation[i].begin(gps, "GPGSV", 5 + 4 * i); // offsets 5, 9, 13, 17
|
||||
azimuth[i].begin( gps, "GPGSV", 6 + 4 * i); // offsets 6, 10, 14, 18
|
||||
snr[i].begin( gps, "GPGSV", 7 + 4 * i); // offsets 7, 11, 15, 19
|
||||
}
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
// Dispatch incoming characters
|
||||
if (ss.available() > 0)
|
||||
{
|
||||
gps.encode(ss.read());
|
||||
if (totalGPGSVMessages.isUpdated())
|
||||
{
|
||||
for (int i=0; i<4; ++i)
|
||||
{
|
||||
int no = atoi(satNumber[i].value());
|
||||
// Serial.print(F("SatNumber is ")); Serial.println(no);
|
||||
if (no >= 1 && no <= MAX_SATELLITES)
|
||||
{
|
||||
sats[no-1].elevation = atoi(elevation[i].value());
|
||||
sats[no-1].azimuth = atoi(azimuth[i].value());
|
||||
sats[no-1].snr = atoi(snr[i].value());
|
||||
sats[no-1].active = true;
|
||||
}
|
||||
}
|
||||
|
||||
int totalMessages = atoi(totalGPGSVMessages.value());
|
||||
int currentMessage = atoi(messageNumber.value());
|
||||
if (totalMessages == currentMessage)
|
||||
{
|
||||
Serial.print(F("Sats=")); Serial.print(gps.satellites.value());
|
||||
Serial.print(F(" Nums="));
|
||||
for (int i=0; i<MAX_SATELLITES; ++i)
|
||||
if (sats[i].active)
|
||||
{
|
||||
Serial.print(i+1);
|
||||
Serial.print(F(" "));
|
||||
}
|
||||
Serial.print(F(" Elevation="));
|
||||
for (int i=0; i<MAX_SATELLITES; ++i)
|
||||
if (sats[i].active)
|
||||
{
|
||||
Serial.print(sats[i].elevation);
|
||||
Serial.print(F(" "));
|
||||
}
|
||||
Serial.print(F(" Azimuth="));
|
||||
for (int i=0; i<MAX_SATELLITES; ++i)
|
||||
if (sats[i].active)
|
||||
{
|
||||
Serial.print(sats[i].azimuth);
|
||||
Serial.print(F(" "));
|
||||
}
|
||||
|
||||
Serial.print(F(" SNR="));
|
||||
for (int i=0; i<MAX_SATELLITES; ++i)
|
||||
if (sats[i].active)
|
||||
{
|
||||
Serial.print(sats[i].snr);
|
||||
Serial.print(F(" "));
|
||||
}
|
||||
Serial.println();
|
||||
|
||||
for (int i=0; i<MAX_SATELLITES; ++i)
|
||||
sats[i].active = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
69
libraries/TinyGPSPlus-1.0.2/examples/UsingCustomFields/UsingCustomFields.ino
Executable file
69
libraries/TinyGPSPlus-1.0.2/examples/UsingCustomFields/UsingCustomFields.ino
Executable file
@@ -0,0 +1,69 @@
|
||||
#include <TinyGPS++.h>
|
||||
#include <SoftwareSerial.h>
|
||||
|
||||
/*
|
||||
This sample demonstrates TinyGPS++'s capacity for extracting custom
|
||||
fields from any NMEA sentence. TinyGPS++ 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 TinyGPS++ 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 TinyGPS++ 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());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user