![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Exemple Test GPS Logger
main.cpp@0:7c9fada60131, 2018-04-02 (annotated)
- Committer:
- belloula
- Date:
- Mon Apr 02 09:31:50 2018 +0000
- Revision:
- 0:7c9fada60131
GPS Logger exemple
Who changed what in which revision?
User | Revision | Line number | New 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 |