:)

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 }