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@0:8b4bad2aad3f, 2021-06-30 (annotated)
- Committer:
- Giamarchi
- Date:
- Wed Jun 30 22:33:54 2021 +0000
- Revision:
- 0:8b4bad2aad3f
- Child:
- 1:ec64d7748431
TP4 Trame
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Giamarchi | 0:8b4bad2aad3f | 1 | /* L80 QUECTEL GPS Module |
Giamarchi | 0:8b4bad2aad3f | 2 | * NMEA 0183 messages |
Giamarchi | 0:8b4bad2aad3f | 3 | */ |
Giamarchi | 0:8b4bad2aad3f | 4 | #include "mbed.h" |
Giamarchi | 0:8b4bad2aad3f | 5 | // Commandes pour paramétrer le taux par seconde depuis chaque seconde (1 Hz) jusqu'à 10 fois par seconde (10Hz) |
Giamarchi | 0:8b4bad2aad3f | 6 | #define PMTK_SET_NMEA_UPDATE_1HZ "$PMTK220,1000*1F" |
Giamarchi | 0:8b4bad2aad3f | 7 | #define PMTK_SET_NMEA_UPDATE_5HZ "$PMTK220,200*2C" |
Giamarchi | 0:8b4bad2aad3f | 8 | #define PMTK_SET_NMEA_UPDATE_10HZ "$PMTK220,100*2F" |
Giamarchi | 0:8b4bad2aad3f | 9 | |
Giamarchi | 0:8b4bad2aad3f | 10 | // Code pour sélection de trame unique |
Giamarchi | 0:8b4bad2aad3f | 11 | #define TRAME_RMC "$PMTK314,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29" |
Giamarchi | 0:8b4bad2aad3f | 12 | #define TRAME_GGA "$PMTK314,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29" |
Giamarchi | 0:8b4bad2aad3f | 13 | #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" |
Giamarchi | 0:8b4bad2aad3f | 14 | #define TRAME_ALL "$PMTK314,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0*28" |
Giamarchi | 0:8b4bad2aad3f | 15 | |
Giamarchi | 0:8b4bad2aad3f | 16 | #define Trame_TXT_On "$PQTXT,W,1,1*22" |
Giamarchi | 0:8b4bad2aad3f | 17 | #define Trame_TXT_Off "$PQTXT,W,0,1*23" |
Giamarchi | 0:8b4bad2aad3f | 18 | |
Giamarchi | 0:8b4bad2aad3f | 19 | // Selection de trames |
Giamarchi | 0:8b4bad2aad3f | 20 | void Select_Trame(char* trame) { |
Giamarchi | 0:8b4bad2aad3f | 21 | printStr((char*) trame); |
Giamarchi | 0:8b4bad2aad3f | 22 | printStr((char*)"\r\n"); |
Giamarchi | 0:8b4bad2aad3f | 23 | } |
Giamarchi | 0:8b4bad2aad3f | 24 | |
Giamarchi | 0:8b4bad2aad3f | 25 | // Lecture des trames NMEA du GPS |
Giamarchi | 0:8b4bad2aad3f | 26 | |
Giamarchi | 0:8b4bad2aad3f | 27 | char buffer[100]; |
Giamarchi | 0:8b4bad2aad3f | 28 | uint8_t rx_ptr = 0; |
Giamarchi | 0:8b4bad2aad3f | 29 | uint8_t rx_ok = 0; |
Giamarchi | 0:8b4bad2aad3f | 30 | |
Giamarchi | 0:8b4bad2aad3f | 31 | void Lect_GPS(void) { |
Giamarchi | 0:8b4bad2aad3f | 32 | |
Giamarchi | 0:8b4bad2aad3f | 33 | |
Giamarchi | 0:8b4bad2aad3f | 34 | } |
Giamarchi | 0:8b4bad2aad3f | 35 | |
Giamarchi | 0:8b4bad2aad3f | 36 | void Envoi_GPS(void) { |
Giamarchi | 0:8b4bad2aad3f | 37 | |
Giamarchi | 0:8b4bad2aad3f | 38 | pc.printf("GPS: %s\n\r",buffer); |
Giamarchi | 0:8b4bad2aad3f | 39 | } |
Giamarchi | 0:8b4bad2aad3f | 40 | |
Giamarchi | 0:8b4bad2aad3f | 41 | void GPS_Init(void) { // Bloquer les tickers pour envoyer une commande |
Giamarchi | 0:8b4bad2aad3f | 42 | rx_ok = 0; |
Giamarchi | 0:8b4bad2aad3f | 43 | Select_Trame((char*)Trame_TXT_Off); |
Giamarchi | 0:8b4bad2aad3f | 44 | Select_Trame((char*)TRAME_GGA); |
Giamarchi | 0:8b4bad2aad3f | 45 | } |
Giamarchi | 0:8b4bad2aad3f | 46 | |
Giamarchi | 0:8b4bad2aad3f | 47 | struct gps { |
Giamarchi | 0:8b4bad2aad3f | 48 | char *trame; // $GPGGA |
Giamarchi | 0:8b4bad2aad3f | 49 | char *horaire; // 143512.000 |
Giamarchi | 0:8b4bad2aad3f | 50 | char *lat; |
Giamarchi | 0:8b4bad2aad3f | 51 | char *ns; |
Giamarchi | 0:8b4bad2aad3f | 52 | char *longi; |
Giamarchi | 0:8b4bad2aad3f | 53 | char *ew; |
Giamarchi | 0:8b4bad2aad3f | 54 | char *fix; // 0 ou V -> pas de Fix >1 ou A -> Fix |
Giamarchi | 0:8b4bad2aad3f | 55 | char *nb_sat; |
Giamarchi | 0:8b4bad2aad3f | 56 | char *prec; |
Giamarchi | 0:8b4bad2aad3f | 57 | char *alt; |
Giamarchi | 0:8b4bad2aad3f | 58 | float latitude; |
Giamarchi | 0:8b4bad2aad3f | 59 | float longitude; |
Giamarchi | 0:8b4bad2aad3f | 60 | uint16_t altitude; |
Giamarchi | 0:8b4bad2aad3f | 61 | char fixe; |
Giamarchi | 0:8b4bad2aad3f | 62 | } gps; |
Giamarchi | 0:8b4bad2aad3f | 63 | |
Giamarchi | 0:8b4bad2aad3f | 64 | // Décodage Trame NMEA GGA |
Giamarchi | 0:8b4bad2aad3f | 65 | void GPS_Decodage (void) { |
Giamarchi | 0:8b4bad2aad3f | 66 | |
Giamarchi | 0:8b4bad2aad3f | 67 | |
Giamarchi | 0:8b4bad2aad3f | 68 | } |
Giamarchi | 0:8b4bad2aad3f | 69 | } |
Giamarchi | 0:8b4bad2aad3f | 70 | //============================================================================== |
Giamarchi | 0:8b4bad2aad3f | 71 | // Sélection de la trame GGA - |
Giamarchi | 0:8b4bad2aad3f | 72 | // Exemple : $GPGGA,143512.000,4347.7852,N,00418.9704,E,1,7,1.29,28.9,M,49.4,M,,*60 |
Giamarchi | 0:8b4bad2aad3f | 73 | |
Giamarchi | 0:8b4bad2aad3f | 74 | // UTC Position 143512.000 hhmmss.sss |
Giamarchi | 0:8b4bad2aad3f | 75 | // Latitude 4347.7852 ddmm.mmmm |
Giamarchi | 0:8b4bad2aad3f | 76 | // N/S Indicator N N=Nord - S=Sud |
Giamarchi | 0:8b4bad2aad3f | 77 | // Longitude 00418.9704 ddmm.mmmm |
Giamarchi | 0:8b4bad2aad3f | 78 | // W/E Indicator E W=Ouest - E=Est |
Giamarchi | 0:8b4bad2aad3f | 79 | // Position Fix Indicator 1 0-invalid 1-Valid |
Giamarchi | 0:8b4bad2aad3f | 80 | // Satellites Used 7 de 0 à 12 |
Giamarchi | 0:8b4bad2aad3f | 81 | // Précision 1.29 1-bon 9-mauvais |
Giamarchi | 0:8b4bad2aad3f | 82 | // Altitude 28.9 valeur |
Giamarchi | 0:8b4bad2aad3f | 83 | // Unité pour l'altitude M en mètre |
Giamarchi | 0:8b4bad2aad3f | 84 | // Autres informations |
Giamarchi | 0:8b4bad2aad3f | 85 | // Checksum *60 |
Giamarchi | 0:8b4bad2aad3f | 86 | //============================================================================== |
Giamarchi | 0:8b4bad2aad3f | 87 | // Sélection de la trame GLL - Géographic position - Latitude/Longitude |
Giamarchi | 0:8b4bad2aad3f | 88 | // Exemple : $GPGLL,3723.2475, N, 12158.3416, W, 161229.487, A*2C |
Giamarchi | 0:8b4bad2aad3f | 89 | //============================================================================== |
Giamarchi | 0:8b4bad2aad3f | 90 | // Sélection de la trame RMC - Utilisation pour les navires |
Giamarchi | 0:8b4bad2aad3f | 91 | // Exemple : $GPRMC,141147.000,A,4347.7885,N,00418.9737,E,0.00,350.58,280621,,,A*6D |
Giamarchi | 0:8b4bad2aad3f | 92 | |
Giamarchi | 0:8b4bad2aad3f | 93 | // UTC Position 141147.000 hhmmss.sss |
Giamarchi | 0:8b4bad2aad3f | 94 | // Fix Indicator A A-valid V-invalid |
Giamarchi | 0:8b4bad2aad3f | 95 | // Latitude 4347.7885 ddmm.mmmm |
Giamarchi | 0:8b4bad2aad3f | 96 | // N/S Indicator N N=Nord - S=Sud |
Giamarchi | 0:8b4bad2aad3f | 97 | // Longitude 00418.9737 ddmm.mmmm |
Giamarchi | 0:8b4bad2aad3f | 98 | // W/E Indicator E W=Ouest - E=Est |
Giamarchi | 0:8b4bad2aad3f | 99 | // Vitesse 0.00 en noeuds |
Giamarchi | 0:8b4bad2aad3f | 100 | // Route sur le fond 350.58 en degrés |
Giamarchi | 0:8b4bad2aad3f | 101 | // Date 280621 ddmmaa |
Giamarchi | 0:8b4bad2aad3f | 102 | // Autres informations |
Giamarchi | 0:8b4bad2aad3f | 103 | // Checksum *6D |
Giamarchi | 0:8b4bad2aad3f | 104 | //============================================================================== |