LEcture GPS Xbee sous interruption
Revision 2:824735b4c3a3, committed 2018-08-07
- Comitter:
- pascalreygner
- Date:
- Tue Aug 07 09:06:22 2018 +0000
- Parent:
- 1:fba6b514d8d7
- Child:
- 3:9a24090ff482
- Commit message:
- V03
Changed in this revision
--- a/Threads.lib Wed Jul 11 12:47:09 2018 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -http://mbed.org/users/lemniskata/code/Threads/#d370bed31f45
--- a/gps-ea-acc023.cpp Wed Jul 11 12:47:09 2018 +0000 +++ b/gps-ea-acc023.cpp Tue Aug 07 09:06:22 2018 +0000 @@ -8,7 +8,6 @@ #include "mbed.h" #include <stdlib.h> #include <stdio.h> -#include "Threads.h" using namespace gpsxbee_MT3339; static GpsXbee gpsxbee; @@ -16,7 +15,6 @@ void GpsXbee::GpsXbeeInit(void) { - InitRMC(); NmeaSentence = NMEA_INVALID; gpsTrameRMC = TRAME_WAIT; gpsTrameGGA = TRAME_WAIT; @@ -94,22 +92,22 @@ if (NmeaSentence == NmeaRmc ) { // décodage trame type "RMC" if (rmc_warning == 'A') { // si données GPS valables : les afficher - sprintf(gpsData,"%.2i/%.2i/%.2i:%.2iH%.2imn%.2is - Lat. = %f%c - Long. = %f%c",rmc_jours,rmc_mois,rmc_ans,rmc_hours,rmc_minutes,rmc_seconds,getLatitudeAsDegrees(rmc_latitude,rmc_nsIndicator),rmc_nsIndicator,getLongitudeAsDegrees(rmc_longitude,rmc_ewIndicator),rmc_ewIndicator); + sprintf(gpsDataRMC,"%.2i/%.2i/%.2i:%.2iH%.2imn%.2is - Lat. = %f%c - Long. = %f%c",rmc_jours,rmc_mois,rmc_ans,rmc_hours,rmc_minutes,rmc_seconds,getLatitudeAsDegrees(rmc_latitude,rmc_nsIndicator),rmc_nsIndicator,getLongitudeAsDegrees(rmc_longitude,rmc_ewIndicator),rmc_ewIndicator); gpsTrameRMC = TRAME_OK; // Trame complète OK } else { - sprintf(gpsData,"NMEARMC : %.2i/%.2i/%.2i:%.2iH%.2imn%.2is --- Valeurs GPS incorrectes",rmc_jours,rmc_mois,rmc_ans,rmc_hours,rmc_minutes,rmc_seconds); + sprintf(gpsDataRMC,"NMEARMC : %.2i/%.2i/%.2i:%.2iH%.2imn%.2is --- Valeurs GPS incorrectes",rmc_jours,rmc_mois,rmc_ans,rmc_hours,rmc_minutes,rmc_seconds); } } /* pour afficher les autres protocoles */ else if (NmeaSentence == NmeaGga) { // décodage trame type "RMC" if (gga_fix == 1) {// si données GPS valables : les afficher - sprintf(gpsData,"%.2iH%.2imn%.2is --- Latitude = %f%c --- Longitude = %f%c - Nb sat = %i",gga_hours,gga_minutes,gga_seconds,getLatitudeAsDegrees(gga_latitude,gga_nsIndicator),gga_nsIndicator,getLongitudeAsDegrees(gga_longitude,gga_ewIndicator),gga_ewIndicator,gga_satellites); + sprintf(gpsDataGGA,"%.2iH%.2imn%.2is --- Latitude = %f%c --- Longitude = %f%c - Nb sat = %i",gga_hours,gga_minutes,gga_seconds,getLatitudeAsDegrees(gga_latitude,gga_nsIndicator),gga_nsIndicator,getLongitudeAsDegrees(gga_longitude,gga_ewIndicator),gga_ewIndicator,gga_satellites); gpsTrameGGA = TRAME_OK; // Trame complète OK } else - sprintf(gpsData,"NMEAGGA : %.2iH%.2imn%.2is --- Valeurs GPS incorrectes",gga_hours,gga_minutes,gga_seconds); + sprintf(gpsDataGGA,"NMEAGGA : %.2iH%.2imn%.2is --- Valeurs GPS incorrectes",gga_hours,gga_minutes,gga_seconds); } // pour les autres types (VTG/GGA/GSV) affiche uniquement la trame reçue - else memcpy(gpsData,gpsBuf,sizeof(gpsBuf)); + else memcpy(gpsDataRMC,gpsBuf,sizeof(gpsBuf)); } else { gpsBuf[gpsBufPos++] = car; // enregistre caractère suivant de la trame }
--- a/gps-ea-acc023.h Wed Jul 11 12:47:09 2018 +0000 +++ b/gps-ea-acc023.h Tue Aug 07 09:06:22 2018 +0000 @@ -6,7 +6,8 @@ * Caractères reçus sous interruption (UART1-RX) * * V2 14/3/2018 - ajout décodage trame GGA - * + * V3 7/8/2018 - DEBUG AFFICHAGE RMC + GGA / suppression librairies inutiles + * Exemple d'utilisation class GpsXbee (IRQ compatible) : @code #include "mbed.h" @@ -24,14 +25,12 @@ pc2.baud(115200); // liaison vers PC DEBUG gpsxbee.GpsXbeeInit(); while(1) { - if (gpsxbee.gpsTrameRMC == gpsxbee.TRAME_OK) { + if (gpsxbee.gpsTrameRMC == gpsxbee.TRAME_OK && gpsxbee.gpsTrameGGA == gpsxbee.TRAME_OK) { gpsxbee.gpsTrameRMC = gpsxbee.TRAME_WAIT; - printf(" RMC = %s\r\n",gpsxbee.gpsData); - led4_GPSON = !led4_GPSON; - } - if (gpsxbee.gpsTrameGGA == gpsxbee.TRAME_OK) { + printf(" RMC = %s\r\n",gpsxbee.gpsDataRMC); + gpsxbee.gpsTrameGGA = gpsxbee.TRAME_WAIT; - printf(" GGA = %s\r\n",gpsxbee.gpsData); + printf(" GGA = %s\r\n",gpsxbee.gpsDataGGA); led4_GPSON = !led4_GPSON; } } @@ -39,8 +38,9 @@ @endcode * Résultat = Affichage sur terminal PC (115200 bauds) : Trames décodées : - NMEAGGA : 08H34mn32s --- Latitude = 44.957730N --- Longitude = -0.666333W - Nb sat = 9 - NMEARMC : 08/06/18:10H34mn32s - Lat. = 44.957730N - Long. = -0.666333W + RMC : 08/06/18:10H34mn32s - Lat. = 44.957730N - Long. = -0.666333W + GGA : 08H34mn32s --- Latitude = 44.957730N --- Longitude = -0.666333W - Nb sat = 9 + */ #ifndef GPSXBEE_H_ @@ -114,7 +114,8 @@ double gga_altitude; /** antenna altitude above/below mean sea-level */ double gga_geoidal; /** geoidal separation */ - char gpsData[200]; /** buffer pour affichage */ + char gpsDataRMC[200]; /** buffer pour affichage data RMC*/ + char gpsDataGGA[200]; /** buffer pour affichage data GGA*/ private : #define MTK3339_BUF_SZ 200 // Taille gpsBuf
--- a/main.cpp Wed Jul 11 12:47:09 2018 +0000 +++ b/main.cpp Tue Aug 07 09:06:22 2018 +0000 @@ -13,14 +13,12 @@ pc2.baud(115200); // liaison vers PC DEBUG gpsxbee.GpsXbeeInit(); while(1) { - if (gpsxbee.gpsTrameRMC == gpsxbee.TRAME_OK) { + if (gpsxbee.gpsTrameRMC == gpsxbee.TRAME_OK && gpsxbee.gpsTrameGGA == gpsxbee.TRAME_OK) { gpsxbee.gpsTrameRMC = gpsxbee.TRAME_WAIT; - printf(" RMC = %s\r\n",gpsxbee.gpsData); - led4_GPSON = !led4_GPSON; - } - if (gpsxbee.gpsTrameGGA == gpsxbee.TRAME_OK) { + printf(" RMC = %s\r\n",gpsxbee.gpsDataRMC); + gpsxbee.gpsTrameGGA = gpsxbee.TRAME_WAIT; - printf(" GGA = %s\r\n",gpsxbee.gpsData); + printf(" GGA = %s\r\n",gpsxbee.gpsDataGGA); led4_GPSON = !led4_GPSON; } }
--- a/mbed-rtos.lib Wed Jul 11 12:47:09 2018 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -http://mbed.org/users/mbed_official/code/mbed-rtos/#5dfe422a963d