:)

Dependencies:   mbed

Revision:
0:447ddbf579d9
Child:
1:cfbdc934e8c6
diff -r 000000000000 -r 447ddbf579d9 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Mar 10 21:41:16 2017 +0000
@@ -0,0 +1,109 @@
+#include "mbed.h"
+ 
+#define MESS_LEN    100     // maximum message length
+#define MAX_STR     20
+#define STR_LEN     40 
+ 
+Serial _gps(A0, A1); //tx,rx
+Serial pc(SERIAL_TX,SERIAL_RX);
+DigitalOut myled(LED1);
+
+char nmea[MESS_LEN] = {0xA0};
+char gp[MAX_STR][STR_LEN]; 
+
+
+void read_nmea(void);           // read nmea message from gps module
+int chop_message(void);         // chop the nmea messeage
+void present_array(void);       // send a part of the available info to the laptop
+void setNmeaMessages(const bool , const bool , const bool , const bool , const bool , const bool ); 
+void setUpdateRate(const uint8_t );
+
+int main() {
+     printf("HERE!\n");
+     _gps.baud(9600);
+    setUpdateRate(10);
+    setNmeaMessages(true,true,true,true,true,true);    
+    
+    while (1) {
+    
+        read_nmea();
+        chop_message();
+        present_array();
+        wait(1);
+        
+    }
+   
+}
+
+//--------------------read nmea from GPS unit--------------------
+void read_nmea(void) {
+    _gps.scanf("%s,",nmea);
+    pc.printf("Raw message %s \n\r",nmea); // just for testing
+}
+ 
+//---------------- chop the nmea message separated by comma's-----------
+int chop_message(void) {
+    for (int k=0; k<MAX_STR; k++) {          // just to make sure thet the char array is set to 0x00
+        for (int l=0; l<STR_LEN; l++) {
+            gp[k][l]= 0x00;
+        };
+    }
+    int strcnt=0;                           // string counter
+    int strpos=0;                           // position inside the string
+    for (int k=0; k < MESS_LEN; k++) {
+        if (nmea[k] == '*') {               // detect end of message is found
+            gp[strcnt][strpos]= 0x00;       // close the string with 0x00
+            return 0;                       // the work is done, end of this function
+        }
+        if (nmea[k] == 0x2c) {             // detect the comma
+            if (strpos == 0) {
+                gp[strcnt][0]= 'E';        // comma at position zero, string must be empty
+                gp[strcnt][1]= 'm';        // comma at position zero, string must be empty
+                gp[strcnt][2]= 'p';        // comma at position zero, string must be empty
+                gp[strcnt][3]= 't';        // comma at position zero, string must be empty
+                gp[strcnt][4]= 'y';        // comma at position zero, string must be empty
+                gp[strcnt][5]= 0x00;       // comma at position zero, string must be empty
+            } else {
+                gp[strcnt][strpos]= 0x00;   // end the previous string
+            }
+            strcnt += 1;                    // increment to the next string
+            strpos =0;                      // start at position zero
+        } else {
+            gp[strcnt][strpos]= nmea[k];    // add char to string
+            strpos += 1;
+        }
+    }
+    return 0;
+}
+ 
+// --------------- Dump only $GPGGA on the screen------------------
+void present_array(void) {
+    if ((gp[0][2]=='P') and (gp[0][3]=='G') and (gp[0][4]=='G') and (gp[0][5]=='A')) {
+        pc.printf("Chop results ");
+        for (int k=0; k<MAX_STR; k++) {
+            pc.printf("r%d=%s ",k, gp[k]);
+        }
+        pc.printf("\n\r");
+    }
+}
+//----------------Set Msg Command-----------------------------
+void setNmeaMessages(const bool gga, const bool gsa, const bool gsv, const bool gll, const bool rmc, const bool vtg) {
+    char cmd[16] = {
+        0xA0, 0xA1, 0x00, 0x09,
+        0x08, gga, gsa, gsv, gll, rmc, vtg, 0x00, 0x01,
+        0x00, 0x0D, 0x0A
+    };
+    for(int i = 4; i < 13; i++) cmd[13] ^= cmd[i];
+    for(int i = 0; i < 16; i++) _gps.putc(cmd[i]);
+}
+
+//----------------Set Update Rate-----------------------------
+void setUpdateRate(const uint8_t rate) {
+    char cmd[10] = {
+        0xA0, 0xA1, 0x00, 0x03,
+        0x0E, rate, 0x01,
+        0x00, 0x0D, 0x0A
+    };
+    for(int i = 4; i < 7; i++) cmd[7] ^= cmd[i];
+    for(int i = 0; i < 10; i++) _gps.putc(cmd[i]);
+}
\ No newline at end of file