pass thru gps test and cleaned up parsing code (interrupts dont work well, but we don't need them anyways)
This commit is contained in:
parent
bd05ebfce9
commit
0658de0de0
|
|
@ -0,0 +1,19 @@
|
||||||
|
// test a passthru between USB and hardware serial
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
while (!Serial);
|
||||||
|
Serial.begin(9600);
|
||||||
|
Serial1.begin(9600);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
if (Serial.available()) {
|
||||||
|
char c = Serial.read();
|
||||||
|
Serial1.write(c);
|
||||||
|
}
|
||||||
|
if (Serial1.available()) {
|
||||||
|
char c = Serial1.read();
|
||||||
|
Serial.write(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -6,17 +6,17 @@
|
||||||
// desired.
|
// desired.
|
||||||
//
|
//
|
||||||
// Tested and works great with the Adafruit Flora GPS module
|
// Tested and works great with the Adafruit Flora GPS module
|
||||||
// ------> http://adafruit.com/products/1059
|
// ------> http://adafruit.com/products/1059
|
||||||
// Pick one up today at the Adafruit electronics shop
|
// Pick one up today at the Adafruit electronics shop
|
||||||
// and help support open source hardware & software! -ada
|
// and help support open source hardware & software! -ada
|
||||||
|
|
||||||
#include <Adafruit_GPS.h>
|
#include <Adafruit_GPS.h>
|
||||||
#include <SoftwareSerial.h>
|
#include <SoftwareSerial.h>
|
||||||
Adafruit_GPS GPS(&Serial1);
|
Adafruit_GPS GPS(&Serial1);
|
||||||
|
|
||||||
// Set GPSECHO to 'false' to turn off echoing the GPS data to the Serial console
|
// Set GPSECHO to 'false' to turn off echoing the GPS data to the Serial console
|
||||||
// Set to 'true' if you want to debug and listen to the raw GPS sentences
|
// Set to 'true' if you want to debug and listen to the raw GPS sentences
|
||||||
#define GPSECHO true
|
#define GPSECHO false
|
||||||
|
|
||||||
// this keeps track of whether we're using the interrupt
|
// this keeps track of whether we're using the interrupt
|
||||||
// off by default!
|
// off by default!
|
||||||
|
|
@ -44,68 +44,38 @@ void setup()
|
||||||
// For the parsing code to work nicely and have time to sort thru the data, and
|
// For the parsing code to work nicely and have time to sort thru the data, and
|
||||||
// print it out we don't suggest using anything higher than 1 Hz
|
// print it out we don't suggest using anything higher than 1 Hz
|
||||||
|
|
||||||
// the nice thing about this code is you can have a timer0 interrupt go off
|
|
||||||
// every 1 millisecond, and read data from the GPS for you. that makes the
|
|
||||||
// loop code a heck of a lot easier!
|
|
||||||
useInterrupt(true);
|
|
||||||
|
|
||||||
delay(1000);
|
delay(1000);
|
||||||
// Ask for firmware version
|
// Ask for firmware version
|
||||||
Serial1.println(PMTK_Q_RELEASE);
|
Serial1.println(PMTK_Q_RELEASE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Interrupt is called once a millisecond, looks for any new GPS data, and stores it
|
|
||||||
SIGNAL(TIMER0_COMPA_vect) {
|
|
||||||
char c = GPS.read();
|
|
||||||
// if you want to debug, this is a good time to do it!
|
|
||||||
if (GPSECHO)
|
|
||||||
if (c) Serial.print(c);
|
|
||||||
}
|
|
||||||
|
|
||||||
void useInterrupt(boolean v) {
|
|
||||||
if (v) {
|
|
||||||
// Timer0 is already used for millis() - we'll just interrupt somewhere
|
|
||||||
// in the middle and call the "Compare A" function above
|
|
||||||
OCR0A = 0xAF;
|
|
||||||
TIMSK0 |= _BV(OCIE0A);
|
|
||||||
usingInterrupt = true;
|
|
||||||
} else {
|
|
||||||
// do not call the interrupt function COMPA anymore
|
|
||||||
TIMSK0 &= ~_BV(OCIE0A);
|
|
||||||
usingInterrupt = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t timer = millis();
|
uint32_t timer = millis();
|
||||||
void loop() // run over and over again
|
void loop() // run over and over again
|
||||||
{
|
{
|
||||||
// in case you are not using the interrupt above, you'll
|
// read data from the GPS in the 'main loop'
|
||||||
// need to 'hand query' the GPS, not suggested :(
|
char c = GPS.read();
|
||||||
if (! usingInterrupt) {
|
// if you want to debug, this is a good time to do it!
|
||||||
// read data from the GPS in the 'main loop'
|
if (GPSECHO)
|
||||||
char c = GPS.read();
|
|
||||||
// if you want to debug, this is a good time to do it!
|
|
||||||
if (GPSECHO)
|
|
||||||
if (c) Serial.print(c);
|
if (c) Serial.print(c);
|
||||||
}
|
|
||||||
|
|
||||||
// if a sentence is received, we can check the checksum, parse it...
|
// if a sentence is received, we can check the checksum, parse it...
|
||||||
if (GPS.newNMEAreceived()) {
|
if (GPS.newNMEAreceived()) {
|
||||||
// a tricky thing here is if we print the NMEA sentence, or data
|
// a tricky thing here is if we print the NMEA sentence, or data
|
||||||
// we end up not listening and catching other sentences!
|
// we end up not listening and catching other sentences!
|
||||||
// so be very wary if using OUTPUT_ALLDATA and trytng to print out data
|
// so be very wary if using OUTPUT_ALLDATA and trytng to print out data
|
||||||
//Serial.println(GPS.lastNMEA()); // this also sets the newNMEAreceived() flag to false
|
Serial.println(GPS.lastNMEA()); // this also sets the newNMEAreceived() flag to false
|
||||||
|
|
||||||
if (!GPS.parse(GPS.lastNMEA())) // this also sets the newNMEAreceived() flag to false
|
if (!GPS.parse(GPS.lastNMEA())) // this also sets the newNMEAreceived() flag to false
|
||||||
return; // we can fail to parse a sentence in which case we should just wait for another
|
return; // we can fail to parse a sentence in which case we should just wait for another
|
||||||
}
|
}
|
||||||
|
|
||||||
// if millis() or timer wraps around, we'll just reset it
|
// if millis() or timer wraps around, we'll just reset it
|
||||||
if (timer > millis()) timer = millis();
|
if (timer > millis()) timer = millis();
|
||||||
|
|
||||||
// approximately every 2 seconds or so, print out the current stats
|
// approximately every 2 seconds or so, print out the current stats
|
||||||
if (millis() - timer > 2000) {
|
if (millis() - timer > 2000) {
|
||||||
timer = millis(); // reset the timer
|
timer = millis(); // reset the timer
|
||||||
|
|
||||||
Serial.print("\nTime: ");
|
Serial.print("\nTime: ");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue