![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
:)
main.cpp@0:447ddbf579d9, 2017-03-10 (annotated)
- Committer:
- kayu
- Date:
- Fri Mar 10 21:41:16 2017 +0000
- Revision:
- 0:447ddbf579d9
- Child:
- 1:cfbdc934e8c6
GPS COEN490
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kayu | 0:447ddbf579d9 | 1 | #include "mbed.h" |
kayu | 0:447ddbf579d9 | 2 | |
kayu | 0:447ddbf579d9 | 3 | #define MESS_LEN 100 // maximum message length |
kayu | 0:447ddbf579d9 | 4 | #define MAX_STR 20 |
kayu | 0:447ddbf579d9 | 5 | #define STR_LEN 40 |
kayu | 0:447ddbf579d9 | 6 | |
kayu | 0:447ddbf579d9 | 7 | Serial _gps(A0, A1); //tx,rx |
kayu | 0:447ddbf579d9 | 8 | Serial pc(SERIAL_TX,SERIAL_RX); |
kayu | 0:447ddbf579d9 | 9 | DigitalOut myled(LED1); |
kayu | 0:447ddbf579d9 | 10 | |
kayu | 0:447ddbf579d9 | 11 | char nmea[MESS_LEN] = {0xA0}; |
kayu | 0:447ddbf579d9 | 12 | char gp[MAX_STR][STR_LEN]; |
kayu | 0:447ddbf579d9 | 13 | |
kayu | 0:447ddbf579d9 | 14 | |
kayu | 0:447ddbf579d9 | 15 | void read_nmea(void); // read nmea message from gps module |
kayu | 0:447ddbf579d9 | 16 | int chop_message(void); // chop the nmea messeage |
kayu | 0:447ddbf579d9 | 17 | void present_array(void); // send a part of the available info to the laptop |
kayu | 0:447ddbf579d9 | 18 | void setNmeaMessages(const bool , const bool , const bool , const bool , const bool , const bool ); |
kayu | 0:447ddbf579d9 | 19 | void setUpdateRate(const uint8_t ); |
kayu | 0:447ddbf579d9 | 20 | |
kayu | 0:447ddbf579d9 | 21 | int main() { |
kayu | 0:447ddbf579d9 | 22 | printf("HERE!\n"); |
kayu | 0:447ddbf579d9 | 23 | _gps.baud(9600); |
kayu | 0:447ddbf579d9 | 24 | setUpdateRate(10); |
kayu | 0:447ddbf579d9 | 25 | setNmeaMessages(true,true,true,true,true,true); |
kayu | 0:447ddbf579d9 | 26 | |
kayu | 0:447ddbf579d9 | 27 | while (1) { |
kayu | 0:447ddbf579d9 | 28 | |
kayu | 0:447ddbf579d9 | 29 | read_nmea(); |
kayu | 0:447ddbf579d9 | 30 | chop_message(); |
kayu | 0:447ddbf579d9 | 31 | present_array(); |
kayu | 0:447ddbf579d9 | 32 | wait(1); |
kayu | 0:447ddbf579d9 | 33 | |
kayu | 0:447ddbf579d9 | 34 | } |
kayu | 0:447ddbf579d9 | 35 | |
kayu | 0:447ddbf579d9 | 36 | } |
kayu | 0:447ddbf579d9 | 37 | |
kayu | 0:447ddbf579d9 | 38 | //--------------------read nmea from GPS unit-------------------- |
kayu | 0:447ddbf579d9 | 39 | void read_nmea(void) { |
kayu | 0:447ddbf579d9 | 40 | _gps.scanf("%s,",nmea); |
kayu | 0:447ddbf579d9 | 41 | pc.printf("Raw message %s \n\r",nmea); // just for testing |
kayu | 0:447ddbf579d9 | 42 | } |
kayu | 0:447ddbf579d9 | 43 | |
kayu | 0:447ddbf579d9 | 44 | //---------------- chop the nmea message separated by comma's----------- |
kayu | 0:447ddbf579d9 | 45 | int chop_message(void) { |
kayu | 0:447ddbf579d9 | 46 | for (int k=0; k<MAX_STR; k++) { // just to make sure thet the char array is set to 0x00 |
kayu | 0:447ddbf579d9 | 47 | for (int l=0; l<STR_LEN; l++) { |
kayu | 0:447ddbf579d9 | 48 | gp[k][l]= 0x00; |
kayu | 0:447ddbf579d9 | 49 | }; |
kayu | 0:447ddbf579d9 | 50 | } |
kayu | 0:447ddbf579d9 | 51 | int strcnt=0; // string counter |
kayu | 0:447ddbf579d9 | 52 | int strpos=0; // position inside the string |
kayu | 0:447ddbf579d9 | 53 | for (int k=0; k < MESS_LEN; k++) { |
kayu | 0:447ddbf579d9 | 54 | if (nmea[k] == '*') { // detect end of message is found |
kayu | 0:447ddbf579d9 | 55 | gp[strcnt][strpos]= 0x00; // close the string with 0x00 |
kayu | 0:447ddbf579d9 | 56 | return 0; // the work is done, end of this function |
kayu | 0:447ddbf579d9 | 57 | } |
kayu | 0:447ddbf579d9 | 58 | if (nmea[k] == 0x2c) { // detect the comma |
kayu | 0:447ddbf579d9 | 59 | if (strpos == 0) { |
kayu | 0:447ddbf579d9 | 60 | gp[strcnt][0]= 'E'; // comma at position zero, string must be empty |
kayu | 0:447ddbf579d9 | 61 | gp[strcnt][1]= 'm'; // comma at position zero, string must be empty |
kayu | 0:447ddbf579d9 | 62 | gp[strcnt][2]= 'p'; // comma at position zero, string must be empty |
kayu | 0:447ddbf579d9 | 63 | gp[strcnt][3]= 't'; // comma at position zero, string must be empty |
kayu | 0:447ddbf579d9 | 64 | gp[strcnt][4]= 'y'; // comma at position zero, string must be empty |
kayu | 0:447ddbf579d9 | 65 | gp[strcnt][5]= 0x00; // comma at position zero, string must be empty |
kayu | 0:447ddbf579d9 | 66 | } else { |
kayu | 0:447ddbf579d9 | 67 | gp[strcnt][strpos]= 0x00; // end the previous string |
kayu | 0:447ddbf579d9 | 68 | } |
kayu | 0:447ddbf579d9 | 69 | strcnt += 1; // increment to the next string |
kayu | 0:447ddbf579d9 | 70 | strpos =0; // start at position zero |
kayu | 0:447ddbf579d9 | 71 | } else { |
kayu | 0:447ddbf579d9 | 72 | gp[strcnt][strpos]= nmea[k]; // add char to string |
kayu | 0:447ddbf579d9 | 73 | strpos += 1; |
kayu | 0:447ddbf579d9 | 74 | } |
kayu | 0:447ddbf579d9 | 75 | } |
kayu | 0:447ddbf579d9 | 76 | return 0; |
kayu | 0:447ddbf579d9 | 77 | } |
kayu | 0:447ddbf579d9 | 78 | |
kayu | 0:447ddbf579d9 | 79 | // --------------- Dump only $GPGGA on the screen------------------ |
kayu | 0:447ddbf579d9 | 80 | void present_array(void) { |
kayu | 0:447ddbf579d9 | 81 | if ((gp[0][2]=='P') and (gp[0][3]=='G') and (gp[0][4]=='G') and (gp[0][5]=='A')) { |
kayu | 0:447ddbf579d9 | 82 | pc.printf("Chop results "); |
kayu | 0:447ddbf579d9 | 83 | for (int k=0; k<MAX_STR; k++) { |
kayu | 0:447ddbf579d9 | 84 | pc.printf("r%d=%s ",k, gp[k]); |
kayu | 0:447ddbf579d9 | 85 | } |
kayu | 0:447ddbf579d9 | 86 | pc.printf("\n\r"); |
kayu | 0:447ddbf579d9 | 87 | } |
kayu | 0:447ddbf579d9 | 88 | } |
kayu | 0:447ddbf579d9 | 89 | //----------------Set Msg Command----------------------------- |
kayu | 0:447ddbf579d9 | 90 | void setNmeaMessages(const bool gga, const bool gsa, const bool gsv, const bool gll, const bool rmc, const bool vtg) { |
kayu | 0:447ddbf579d9 | 91 | char cmd[16] = { |
kayu | 0:447ddbf579d9 | 92 | 0xA0, 0xA1, 0x00, 0x09, |
kayu | 0:447ddbf579d9 | 93 | 0x08, gga, gsa, gsv, gll, rmc, vtg, 0x00, 0x01, |
kayu | 0:447ddbf579d9 | 94 | 0x00, 0x0D, 0x0A |
kayu | 0:447ddbf579d9 | 95 | }; |
kayu | 0:447ddbf579d9 | 96 | for(int i = 4; i < 13; i++) cmd[13] ^= cmd[i]; |
kayu | 0:447ddbf579d9 | 97 | for(int i = 0; i < 16; i++) _gps.putc(cmd[i]); |
kayu | 0:447ddbf579d9 | 98 | } |
kayu | 0:447ddbf579d9 | 99 | |
kayu | 0:447ddbf579d9 | 100 | //----------------Set Update Rate----------------------------- |
kayu | 0:447ddbf579d9 | 101 | void setUpdateRate(const uint8_t rate) { |
kayu | 0:447ddbf579d9 | 102 | char cmd[10] = { |
kayu | 0:447ddbf579d9 | 103 | 0xA0, 0xA1, 0x00, 0x03, |
kayu | 0:447ddbf579d9 | 104 | 0x0E, rate, 0x01, |
kayu | 0:447ddbf579d9 | 105 | 0x00, 0x0D, 0x0A |
kayu | 0:447ddbf579d9 | 106 | }; |
kayu | 0:447ddbf579d9 | 107 | for(int i = 4; i < 7; i++) cmd[7] ^= cmd[i]; |
kayu | 0:447ddbf579d9 | 108 | for(int i = 0; i < 10; i++) _gps.putc(cmd[i]); |
kayu | 0:447ddbf579d9 | 109 | } |