nothing
Dependents: mbed-os-example-mbed5-wifi
stm32l475e_iot01_gps.cpp
- Committer:
- ctlee
- Date:
- 2021-01-15
- Revision:
- 0:81d4b52c0083
File content as of revision 0:81d4b52c0083:
#include "stm32l475e_iot01_gps.h" #include <stdio.h> #include <string.h> Serial pc1(USBTX, USBRX); GPS::GPS(PinName tx, PinName rx) : _gps(tx, rx) { _gps.baud(9600); longitude = 0.0; latitude = 0.0; ns = 'N'; ew = 'E'; alt = 0.0; } int GPS::sample() { float time, knots, angle, mag, mag_angle; int date, checksum; char lock; while(1) { getline(); // Check if it is a GPGGA msg (matches both locked and non-locked msg) //pc1.printf(msg); pc1.printf("\n"); wait(5); pc1.printf("display msg\r\n"); pc1.printf(msg); pc1.printf("\n"); if(sscanf(msg, "GPRMC,%f,%c,%f,%c,%f,%c,%f,%f,%d,%f,%f*%d", &time, &lock, &latitude, &ns, &longitude, &ew, &knots, &angle, &date, &mag, &mag_angle, &checksum) >= 1) { if(lock=='V') { pc1.printf("not valid!!!!!!!\n"); longitude = 0.0; latitude = 0.0; ns = 'Z'; ew = 'Z'; date =0; return 0; } else { //if(ns == 'S') { latitude *= -1.0; } // if(ew == 'W') { longitude *= -1.0; } // float degrees = trunc(latitude / 100.0f); // float minutes = latitude - (degrees * 100.0f); // latitude = degrees + minutes / 60.0f; // degrees = trunc(longitude / 100.0f * 0.01f); // minutes = longitude - (degrees * 100.0f); // longitude = degrees + minutes / 60.0f; // pc1.printf(msg); pc1.printf("\n\rlongitude is %f\n\r", longitude); pc1.printf("\n\rtime is %f\n\r", time); pc1.printf("ns is %c\n\r", ns); pc1.printf("ew is %c\n\r", ew); pc1.printf("alt is %d\n\r", date); latitude /= 100; longitude /= 100; return 1; } } return 0; } } float GPS::trunc(float v) { if(v < 0.0) { v*= -1.0; v = floor(v); v*=-1.0; } else { v = floor(v); } return v; } void GPS::getline() { int i; char a; int n; while(1) { memset(msg, '\0', sizeof(msg)); pc1.printf("\r\n\n New Message: "); pc1.printf(msg); pc1.printf("\r\n\n"); i = 0; pc1.printf("waiting...\n"); a = _gps.getc(); msg[i] = a; if (a == '$') { pc1.printf("%c",a); msg[i]=a; a = _gps.getc(); while(a!='$'){ msg[i] = a; i++; printf("%c",a); a = _gps.getc(); } return; // msg[i] = a; // i++; // if (a == 'G') { // pc1.printf("%c",a); // a = _gps.getc(); // msg[i] = a; // i++; // if (a == 'P') { // pc1.printf("%c",a); // a = _gps.getc(); // msg[i] = a; // i++; // if (a == 'R') { // pc1.printf("%c",a); // a = _gps.getc(); // msg[i] = a; // i++; // if (a == 'M') { // pc1.printf("%c",a); // a = _gps.getc(); // msg[i] = a; // i++; // if (a == 'C') { // pc1.printf("%c",a); // a = _gps.getc(); // msg[i] = a; // pc1.printf(msg); // pc1.printf("\r\n"); // // for (n = 5; n < 456; n++) { // msg[n] = _gps.getc(); // pc1.printf("%c", msg[n]); // if(msg[n] == '\r') { // msg[n] = '0'; // return; // } // } // } // } // } // } // } } // while(_gps.getc() != '$') { // //char a = _gps.getc(); // for(i = 0; i < 256; i++) { // msg[i] = _gps.getc(); // pc1.printf("%c", msg[i]); // if(msg[i] == '\r') { // msg[i] = 0; // return; // } // } // // // } // while(_gps.getc() != '$'); // wait for the start of a line // for(int i=0; i<256; i++) { // msg[i] = _gps.getc(); // if(msg[i] == '\r') { // msg[i] = 0; // return; // } // } // error("Overflowed message limit"); } }