From 0658de0de0ecf38c5dbdc9a3079e4e7c64f839dc Mon Sep 17 00:00:00 2001 From: ladyada Date: Fri, 9 Nov 2012 12:10:30 -0500 Subject: [PATCH] pass thru gps test and cleaned up parsing code (interrupts dont work well, but we don't need them anyways) --- examples/flora_gpstest/flora_gpstest.ino | 19 ++++++++ examples/flora_parsing/flora_parsing.ino | 58 ++++++------------------ 2 files changed, 33 insertions(+), 44 deletions(-) create mode 100644 examples/flora_gpstest/flora_gpstest.ino diff --git a/examples/flora_gpstest/flora_gpstest.ino b/examples/flora_gpstest/flora_gpstest.ino new file mode 100644 index 0000000..4f85cd6 --- /dev/null +++ b/examples/flora_gpstest/flora_gpstest.ino @@ -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); + } +} \ No newline at end of file diff --git a/examples/flora_parsing/flora_parsing.ino b/examples/flora_parsing/flora_parsing.ino index d8897ad..e68292b 100644 --- a/examples/flora_parsing/flora_parsing.ino +++ b/examples/flora_parsing/flora_parsing.ino @@ -6,17 +6,17 @@ // desired. // // 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 -// and help support open source hardware & software! -ada +// and help support open source hardware & software! -ada -#include -#include -Adafruit_GPS GPS(&Serial1); +#include <Adafruit_GPS.h> +#include <SoftwareSerial.h> +Adafruit_GPS GPS(&Serial1); // 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 -#define GPSECHO true +#define GPSECHO false // this keeps track of whether we're using the interrupt // 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 // 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); // Ask for firmware version 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(); void loop() // run over and over again { - // in case you are not using the interrupt above, you'll - // need to 'hand query' the GPS, not suggested :( - if (! usingInterrupt) { - // read data from the GPS in the 'main loop' - char c = GPS.read(); - // if you want to debug, this is a good time to do it! - if (GPSECHO) + // read data from the GPS in the 'main loop' + 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 a sentence is received, we can check the checksum, parse it... if (GPS.newNMEAreceived()) { // a tricky thing here is if we print the NMEA sentence, or data // we end up not listening and catching other sentences! // 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 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 (timer > millis()) timer = millis(); + if (timer > millis()) timer = millis(); // approximately every 2 seconds or so, print out the current stats - if (millis() - timer > 2000) { + if (millis() - timer > 2000) { timer = millis(); // reset the timer Serial.print("\nTime: ");