A GPS serial interrupt service routine that has an on the fly nmea parser. Works with a STM32F411RE and a Adafruit GPS logger.
Dependents: Bicycl_Computer_NUCLEO-F411RE Bicycl_Computer_NUCLEO-L476RG
Fork of GPS by
main.cpp
#include "mbed.h" #include "GPSISR.h" #define PIN_RX_GPS PA_12 //GPS Shield RX pin #define PIN_TX_GPS PA_11 //GPS Shield TX pin Serial pc(USBTX, USBRX); // Set up serial interrupe service handler for gps characters. GPS MyGPS(PIN_TX_GPS,PIN_RX_GPS, 9600); int main() { while (1) { if (MyGPS.dataready()) { MyGPS.read(); pc.printf("NMEA has valid data"); pc.printf("Sats : %d \n", MyGPS.buffer.satellites); pc.printf("%d-%d-%d\n", MyGPS.buffer.month, MyGPS.buffer.day, MyGPS.buffer.year); pc.printf("%d:%d:%d\n", MyGPS.buffer.hours, MyGPS.buffer.minutes, MyGPS.buffer.seconds); } else { pc.printf("NMEA has no valid data"); } } }
Diff: GPSISR.cpp
- Revision:
- 3:e64b8be9ce92
- Parent:
- 2:dbc6c0789611
- Child:
- 4:7240a18102a6
--- a/GPSISR.cpp Thu Feb 16 23:55:28 2017 +0000 +++ b/GPSISR.cpp Fri Feb 17 23:31:39 2017 +0000 @@ -19,6 +19,8 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + +#include <string> #include "nmea.h" #include "GPSISR.h" @@ -52,10 +54,27 @@ interrupt = 0; return; } - bool GPS::isdatardy(void){ + bool GPS::dataready(void){ return nmea.isdataready(); } -int GPS::getSats(void){ - return nmea.getSatellites(); -} \ No newline at end of file + +void GPS::read(void) { + + buffer.hour = nmea.getHour(); + buffer.minutes = nmea.getMinute(); + buffer.day = nmea.getDay(); + buffer.month = nmea.getMonth(); + buffer.year = nmea.getYear(); + buffer.latitude = 0.0; + buffer.longitude = 0.0; + + if (nmea.isdataready()) { + buffer.latitude = nmea.getLatitude(); + buffer.longitude = nmea.getLongitude(); + buffer.speed = nmea.getSpeed(); + buffer.altitude = nmea.getAltitude(); + buffer.bearing = nmea.getBearing(); + buffer.satellites = nmea.getSatellites(); + } +} \ No newline at end of file