![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Read GPS MT3329
Dependencies: FatFileSystem mbed
main.cpp@0:9611b40fec6f, 2015-03-29 (annotated)
- 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?
User | Revision | Line number | New 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 |