Read GPS MT3329

Dependencies:   FatFileSystem mbed

Committer:
belloula
Date:
Sun Mar 29 14:43:22 2015 +0000
Revision:
0:9611b40fec6f
Read from MT3329 GPS and print on Pc (usb serial pc)

Who changed what in which revision?

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