GPS With Thread

Dependencies:   MODSERIAL mbed-rtos mbed-src

Fork of GPS_U-blox_NEO-6M_Test_Code by Edoardo De Marchi

Committer:
saypulung
Date:
Sun Apr 26 11:51:49 2015 +0000
Revision:
2:13ef79e40e45
Parent:
1:acd907fbcbae
GPS UBlox With Thread RTOS

Who changed what in which revision?

UserRevisionLine numberNew contents of line
edodm85 0:ea14ad6794af 1 /*
edodm85 0:ea14ad6794af 2 * Author: Edoardo De Marchi
edodm85 1:acd907fbcbae 3 * Date: 22-08-14
edodm85 0:ea14ad6794af 4 * Notes: Firmware for GPS U-Blox NEO-6M
edodm85 0:ea14ad6794af 5 */
edodm85 0:ea14ad6794af 6
edodm85 0:ea14ad6794af 7 #include "main.h"
saypulung 2:13ef79e40e45 8 #include "string.h"
saypulung 2:13ef79e40e45 9 #include "rtos.h"
saypulung 2:13ef79e40e45 10 char gpsData[10][500];
edodm85 0:ea14ad6794af 11 void Init()
edodm85 0:ea14ad6794af 12 {
edodm85 0:ea14ad6794af 13 gps.baud(9600);
saypulung 2:13ef79e40e45 14 pc.baud(9600);
edodm85 0:ea14ad6794af 15
edodm85 0:ea14ad6794af 16 pc.printf("Init OK\n");
edodm85 0:ea14ad6794af 17 }
edodm85 0:ea14ad6794af 18
saypulung 2:13ef79e40e45 19 void readGPSThread(void const *args)
saypulung 2:13ef79e40e45 20 {
edodm85 0:ea14ad6794af 21 char c;
edodm85 0:ea14ad6794af 22 while(true)
edodm85 0:ea14ad6794af 23 {
edodm85 0:ea14ad6794af 24 if(gps.readable())
edodm85 0:ea14ad6794af 25 {
edodm85 0:ea14ad6794af 26 if(gps.getc() == '$'); // wait a $
edodm85 0:ea14ad6794af 27 {
edodm85 0:ea14ad6794af 28 for(int i=0; i<sizeof(cDataBuffer); i++)
edodm85 0:ea14ad6794af 29 {
edodm85 0:ea14ad6794af 30 c = gps.getc();
edodm85 0:ea14ad6794af 31 if( c == '\r' )
edodm85 0:ea14ad6794af 32 {
saypulung 2:13ef79e40e45 33 //int a = sizeof(cDataBuffer);
saypulung 2:13ef79e40e45 34 //char data[500];
saypulung 2:13ef79e40e45 35 //int ccS = sprintf(data,"%s",cDataBuffer);
saypulung 2:13ef79e40e45 36
saypulung 2:13ef79e40e45 37 pc.printf("Message : %s\n", cDataBuffer);
saypulung 2:13ef79e40e45 38 if(strncmp(cDataBuffer,"$GPRMC",6)==0)
saypulung 2:13ef79e40e45 39 {
saypulung 2:13ef79e40e45 40
saypulung 2:13ef79e40e45 41 }
saypulung 2:13ef79e40e45 42 //int count = getDataCount(data,",");
saypulung 2:13ef79e40e45 43 //pc.printf("Length : %d\n",count);
saypulung 2:13ef79e40e45 44 //fflush(stdin);
saypulung 2:13ef79e40e45 45 //fflush(stdout);
saypulung 2:13ef79e40e45 46 //parse(cDataBuffer, i);
edodm85 0:ea14ad6794af 47 i = sizeof(cDataBuffer);
edodm85 0:ea14ad6794af 48 }
edodm85 0:ea14ad6794af 49 else
edodm85 0:ea14ad6794af 50 {
edodm85 0:ea14ad6794af 51 cDataBuffer[i] = c;
edodm85 0:ea14ad6794af 52 }
edodm85 0:ea14ad6794af 53 }
edodm85 0:ea14ad6794af 54 }
edodm85 0:ea14ad6794af 55 }
edodm85 0:ea14ad6794af 56 }
edodm85 0:ea14ad6794af 57 }
edodm85 0:ea14ad6794af 58
saypulung 2:13ef79e40e45 59 int main()
saypulung 2:13ef79e40e45 60 {
saypulung 2:13ef79e40e45 61 Init();
saypulung 2:13ef79e40e45 62 DigitalOut l1(LED1);
saypulung 2:13ef79e40e45 63 Thread gpsReader(readGPSThread);
saypulung 2:13ef79e40e45 64
saypulung 2:13ef79e40e45 65 while(1){
saypulung 2:13ef79e40e45 66 l1 = 1;
saypulung 2:13ef79e40e45 67 wait(0.5);
saypulung 2:13ef79e40e45 68 l1=0;
saypulung 2:13ef79e40e45 69 wait(0.5);
saypulung 2:13ef79e40e45 70 }
saypulung 2:13ef79e40e45 71
saypulung 2:13ef79e40e45 72 }
saypulung 2:13ef79e40e45 73
edodm85 0:ea14ad6794af 74
edodm85 0:ea14ad6794af 75 void parse(char *cmd, int n)
edodm85 0:ea14ad6794af 76 {
edodm85 0:ea14ad6794af 77
edodm85 0:ea14ad6794af 78 char ns, ew, tf, status;
edodm85 0:ea14ad6794af 79 int fq, nst, fix, date; // fix quality, Number of satellites being tracked, 3D fix
edodm85 0:ea14ad6794af 80 float latitude, longitude, timefix, speed, altitude;
edodm85 0:ea14ad6794af 81
saypulung 2:13ef79e40e45 82 pc.printf("Parser cooyy\n");
edodm85 0:ea14ad6794af 83 // Global Positioning System Fix Data
edodm85 0:ea14ad6794af 84 if(strncmp(cmd,"$GPGGA", 6) == 0)
edodm85 0:ea14ad6794af 85 {
edodm85 0:ea14ad6794af 86 sscanf(cmd, "$GPGGA,%f,%f,%c,%f,%c,%d,%d,%*f,%f", &timefix, &latitude, &ns, &longitude, &ew, &fq, &nst, &altitude);
edodm85 0:ea14ad6794af 87 pc.printf("GPGGA Fix taken at: %f, Latitude: %f %c, Longitude: %f %c, Fix quality: %d, Number of sat: %d, Altitude: %f M\n", timefix, latitude, ns, longitude, ew, fq, nst, altitude);
edodm85 0:ea14ad6794af 88 }
edodm85 0:ea14ad6794af 89
edodm85 0:ea14ad6794af 90 // Satellite status
edodm85 0:ea14ad6794af 91 if(strncmp(cmd,"$GPGSA", 6) == 0)
edodm85 0:ea14ad6794af 92 {
edodm85 0:ea14ad6794af 93 sscanf(cmd, "$GPGSA,%c,%d,%d", &tf, &fix, &nst);
edodm85 0:ea14ad6794af 94 pc.printf("GPGSA Type fix: %c, 3D fix: %d, number of sat: %d\r\n", tf, fix, nst);
edodm85 0:ea14ad6794af 95 }
edodm85 0:ea14ad6794af 96
edodm85 0:ea14ad6794af 97 // Geographic position, Latitude and Longitude
edodm85 0:ea14ad6794af 98 if(strncmp(cmd,"$GPGLL", 6) == 0)
edodm85 0:ea14ad6794af 99 {
edodm85 0:ea14ad6794af 100 sscanf(cmd, "$GPGLL,%f,%c,%f,%c,%f", &latitude, &ns, &longitude, &ew, &timefix);
edodm85 0:ea14ad6794af 101 pc.printf("GPGLL Latitude: %f %c, Longitude: %f %c, Fix taken at: %f\n", latitude, ns, longitude, ew, timefix);
edodm85 0:ea14ad6794af 102 }
edodm85 0:ea14ad6794af 103
edodm85 0:ea14ad6794af 104 // Geographic position, Latitude and Longitude
edodm85 0:ea14ad6794af 105 if(strncmp(cmd,"$GPRMC", 6) == 0)
edodm85 0:ea14ad6794af 106 {
edodm85 0:ea14ad6794af 107 sscanf(cmd, "$GPRMC,%f,%c,%f,%c,%f,%c,%f,,%d", &timefix, &status, &latitude, &ns, &longitude, &ew, &speed, &date);
edodm85 0:ea14ad6794af 108 pc.printf("GPRMC Fix taken at: %f, Status: %c, Latitude: %f %c, Longitude: %f %c, Speed: %f, Date: %d\n", timefix, status, latitude, ns, longitude, ew, speed, date);
edodm85 0:ea14ad6794af 109 }
edodm85 0:ea14ad6794af 110 }
edodm85 0:ea14ad6794af 111
saypulung 2:13ef79e40e45 112 void splitString(char str[],char *delimiter)
saypulung 2:13ef79e40e45 113 {
saypulung 2:13ef79e40e45 114 int count=0;
saypulung 2:13ef79e40e45 115 char *tok = strtok(str,delimiter);
saypulung 2:13ef79e40e45 116 int idx=0;
saypulung 2:13ef79e40e45 117 while(0!=tok)
saypulung 2:13ef79e40e45 118 {
saypulung 2:13ef79e40e45 119 int cpy = sprintf(gpsData[idx],"%s",tok);
saypulung 2:13ef79e40e45 120 pc.printf("Data %d = %s\n",idx,gpsData[idx]);
saypulung 2:13ef79e40e45 121 tok = strtok(NULL,delimiter);
saypulung 2:13ef79e40e45 122 idx++;
saypulung 2:13ef79e40e45 123 }
saypulung 2:13ef79e40e45 124 //return count;
saypulung 2:13ef79e40e45 125 }
edodm85 0:ea14ad6794af 126
edodm85 0:ea14ad6794af 127
edodm85 0:ea14ad6794af 128