IniSat Modèle 1 Version 2 TP 4 : Etude d'un capteur Exo 1 : Lecture température Exo 2 : GPS, décodage données GGA
gps.h
- Committer:
- Giamarchi
- Date:
- 2021-06-30
- Revision:
- 1:ec64d7748431
- Parent:
- 0:8b4bad2aad3f
File content as of revision 1:ec64d7748431:
/* L80 QUECTEL GPS Module * NMEA 0183 messages */ #include "mbed.h" // Commandes pour paramétrer le taux par seconde depuis chaque seconde (1 Hz) jusqu'à 10 fois par seconde (10Hz) #define PMTK_SET_NMEA_UPDATE_1HZ "$PMTK220,1000*1F" #define PMTK_SET_NMEA_UPDATE_5HZ "$PMTK220,200*2C" #define PMTK_SET_NMEA_UPDATE_10HZ "$PMTK220,100*2F" // Code pour sélection de trame unique #define TRAME_RMC "$PMTK314,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29" #define TRAME_GGA "$PMTK314,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29" #define TRAME_RMC_GGA "$PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*28" #define TRAME_ALL "$PMTK314,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0*28" #define Trame_TXT_On "$PQTXT,W,1,1*22" #define Trame_TXT_Off "$PQTXT,W,0,1*23" // Selection de trames void Select_Trame(char* trame) { printStr((char*) trame); printStr((char*)"\r\n"); } // Lecture des trames NMEA du GPS char buffer[100]; uint8_t rx_ptr = 0; uint8_t rx_ok = 0; void Lect_GPS(void) { } void Envoi_GPS(void) { pc.printf("GPS: %s\n\r",buffer); } void GPS_Init(void) { // Bloquer les tickers pour envoyer une commande rx_ok = 0; Select_Trame((char*)Trame_TXT_Off); Select_Trame((char*)TRAME_GGA); } struct gps { char *trame; // $GPGGA char *horaire; // 143512.000 char *lat; char *ns; char *longi; char *ew; char *fix; // 0 ou V -> pas de Fix >1 ou A -> Fix char *nb_sat; char *prec; char *alt; float latitude; float longitude; uint16_t altitude; char fixe; } gps; // Décodage Trame NMEA GGA void GPS_Decodage (void) { } //============================================================================== // Sélection de la trame GGA - // Exemple : $GPGGA,143512.000,4347.7852,N,00418.9704,E,1,7,1.29,28.9,M,49.4,M,,*60 // UTC Position 143512.000 hhmmss.sss // Latitude 4347.7852 ddmm.mmmm // N/S Indicator N N=Nord - S=Sud // Longitude 00418.9704 ddmm.mmmm // W/E Indicator E W=Ouest - E=Est // Position Fix Indicator 1 0-invalid 1-Valid // Satellites Used 7 de 0 à 12 // Précision 1.29 1-bon 9-mauvais // Altitude 28.9 valeur // Unité pour l'altitude M en mètre // Autres informations // Checksum *60 //============================================================================== // Sélection de la trame GLL - Géographic position - Latitude/Longitude // Exemple : $GPGLL,3723.2475, N, 12158.3416, W, 161229.487, A*2C //============================================================================== // Sélection de la trame RMC - Utilisation pour les navires // Exemple : $GPRMC,141147.000,A,4347.7885,N,00418.9737,E,0.00,350.58,280621,,,A*6D // UTC Position 141147.000 hhmmss.sss // Fix Indicator A A-valid V-invalid // Latitude 4347.7885 ddmm.mmmm // N/S Indicator N N=Nord - S=Sud // Longitude 00418.9737 ddmm.mmmm // W/E Indicator E W=Ouest - E=Est // Vitesse 0.00 en noeuds // Route sur le fond 350.58 en degrés // Date 280621 ddmmaa // Autres informations // Checksum *6D //==============================================================================