Exemple Test GPS Logger

Dependencies:   USBHost mbed

Committer:
belloula
Date:
Mon Apr 02 09:31:50 2018 +0000
Revision:
0:7c9fada60131
GPS Logger exemple

Who changed what in which revision?

UserRevisionLine numberNew contents of line
belloula 0:7c9fada60131 1 #include "mbed.h"
belloula 0:7c9fada60131 2 #include "USBHostMSD.h"
belloula 0:7c9fada60131 3 //#include "gps.h" // gps def HEADER
belloula 0:7c9fada60131 4
belloula 0:7c9fada60131 5 // Definitions of states for gpd USART receiver state machine (for receiving packets)
belloula 0:7c9fada60131 6 #define GPS_STATE_WAIT 1
belloula 0:7c9fada60131 7 #define GPS_STATE_DATA 2
belloula 0:7c9fada60131 8
belloula 0:7c9fada60131 9 Serial pc(USBTX, USBRX); // PC SERIAL OVER USB PORT ON MBED
belloula 0:7c9fada60131 10 Serial gps(p13, p14); // GPS SERIAL OVER UART PINS 13 & 14
belloula 0:7c9fada60131 11 DigitalOut gps_activity(LED4);
belloula 0:7c9fada60131 12
belloula 0:7c9fada60131 13 USBHostMSD msd("usb");
belloula 0:7c9fada60131 14 FILE *fp;
belloula 0:7c9fada60131 15 uint8_t gps_State = GPS_STATE_WAIT;
belloula 0:7c9fada60131 16
belloula 0:7c9fada60131 17 unsigned char gps_data[200];
belloula 0:7c9fada60131 18 int data_gps_lenth;
belloula 0:7c9fada60131 19
belloula 0:7c9fada60131 20 unsigned char c;
belloula 0:7c9fada60131 21 char Exit = 0;
belloula 0:7c9fada60131 22 int gps_flag =0;
belloula 0:7c9fada60131 23
belloula 0:7c9fada60131 24
belloula 0:7c9fada60131 25 void attgps() {
belloula 0:7c9fada60131 26
belloula 0:7c9fada60131 27 if (gps.readable()) {
belloula 0:7c9fada60131 28
belloula 0:7c9fada60131 29 //*gps_activity =!gps_activity;
belloula 0:7c9fada60131 30 switch ( gps_State ) { // In this state, the USART is waiting to see the sequence of bytes that signals a new incoming packet from gps.
belloula 0:7c9fada60131 31 static unsigned char data_counter=0;
belloula 0:7c9fada60131 32 case GPS_STATE_WAIT:
belloula 0:7c9fada60131 33 c = gps.getc();
belloula 0:7c9fada60131 34 if ( data_counter == 0 ) { // Waiting on '$' character
belloula 0:7c9fada60131 35 if ( c == '$' ) {
belloula 0:7c9fada60131 36 gps_data[data_counter]= c;
belloula 0:7c9fada60131 37 data_counter++;
belloula 0:7c9fada60131 38 } else {
belloula 0:7c9fada60131 39 data_counter = 0;
belloula 0:7c9fada60131 40 }
belloula 0:7c9fada60131 41 } else if ( data_counter == 1 ) { // Waiting on 'G' character
belloula 0:7c9fada60131 42 if (c == 'G' ) {
belloula 0:7c9fada60131 43 gps_data[data_counter]= c;
belloula 0:7c9fada60131 44 data_counter++;
belloula 0:7c9fada60131 45 } else {
belloula 0:7c9fada60131 46 data_counter = 0;
belloula 0:7c9fada60131 47 }
belloula 0:7c9fada60131 48 } else if ( data_counter == 2 ) { // Waiting on 'P' character
belloula 0:7c9fada60131 49 if ( c == 'P' ) {
belloula 0:7c9fada60131 50 // The full '$GP' sequence was received. Reset data_counter (it will be used again
belloula 0:7c9fada60131 51 // later) and transition to the next state.
belloula 0:7c9fada60131 52
belloula 0:7c9fada60131 53 gps_data[data_counter] = c;
belloula 0:7c9fada60131 54 gps_State = GPS_STATE_DATA;
belloula 0:7c9fada60131 55 data_counter++;
belloula 0:7c9fada60131 56
belloula 0:7c9fada60131 57 } else {
belloula 0:7c9fada60131 58 data_counter = 0;
belloula 0:7c9fada60131 59 }
belloula 0:7c9fada60131 60 }
belloula 0:7c9fada60131 61 break;
belloula 0:7c9fada60131 62
belloula 0:7c9fada60131 63 // USART in the DATA state. In this state, the USART expects to receive data.
belloula 0:7c9fada60131 64 case GPS_STATE_DATA:
belloula 0:7c9fada60131 65 c = gps.getc();
belloula 0:7c9fada60131 66 if (c != (0x0D)) {
belloula 0:7c9fada60131 67 gps_data[data_counter] = c;
belloula 0:7c9fada60131 68 data_counter++;
belloula 0:7c9fada60131 69 break;
belloula 0:7c9fada60131 70 }
belloula 0:7c9fada60131 71 data_gps_lenth = data_counter;
belloula 0:7c9fada60131 72 data_counter=0;
belloula 0:7c9fada60131 73 gps_State = GPS_STATE_WAIT;
belloula 0:7c9fada60131 74 gps_flag = 1;
belloula 0:7c9fada60131 75 break;
belloula 0:7c9fada60131 76
belloula 0:7c9fada60131 77 }
belloula 0:7c9fada60131 78 }
belloula 0:7c9fada60131 79 }
belloula 0:7c9fada60131 80 void comandExit () {
belloula 0:7c9fada60131 81 Exit = pc.getc();
belloula 0:7c9fada60131 82 //pc.printf("Exit");
belloula 0:7c9fada60131 83 }
belloula 0:7c9fada60131 84
belloula 0:7c9fada60131 85 int main() {
belloula 0:7c9fada60131 86 FILE *fp = fopen("/fs/Enregistrement.txt", "w");
belloula 0:7c9fada60131 87 if (fp == NULL) {
belloula 0:7c9fada60131 88 error("Could not open file for write MSC\n");
belloula 0:7c9fada60131 89 }
belloula 0:7c9fada60131 90 pc.baud(38400);
belloula 0:7c9fada60131 91 gps.baud(38400);
belloula 0:7c9fada60131 92 pc.attach(comandExit);
belloula 0:7c9fada60131 93 gps.attach(attgps);
belloula 0:7c9fada60131 94
belloula 0:7c9fada60131 95 while (Exit!='$') {
belloula 0:7c9fada60131 96 if (gps_flag == 1) {
belloula 0:7c9fada60131 97 for (int i=0; i<data_gps_lenth+1; i++) {
belloula 0:7c9fada60131 98 pc.putc(gps_data[i]);
belloula 0:7c9fada60131 99
belloula 0:7c9fada60131 100 }
belloula 0:7c9fada60131 101 pc.printf("\r\n");
belloula 0:7c9fada60131 102 gps_flag = 0;
belloula 0:7c9fada60131 103 }
belloula 0:7c9fada60131 104 gps_activity =!gps_activity;
belloula 0:7c9fada60131 105
belloula 0:7c9fada60131 106 }
belloula 0:7c9fada60131 107 }
belloula 0:7c9fada60131 108