Mark x
/
GPS_Test
Needs some work
gps.h@0:0ec25826c208, 2010-03-10 (annotated)
- Committer:
- markco24
- Date:
- Wed Mar 10 21:57:44 2010 +0000
- Revision:
- 0:0ec25826c208
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
markco24 | 0:0ec25826c208 | 1 | #include "mbed.h" |
markco24 | 0:0ec25826c208 | 2 | #include "TextLCD.h" |
markco24 | 0:0ec25826c208 | 3 | #include "data.h" |
markco24 | 0:0ec25826c208 | 4 | // Green wire to pin13 |
markco24 | 0:0ec25826c208 | 5 | // White wire to pin14 |
markco24 | 0:0ec25826c208 | 6 | |
markco24 | 0:0ec25826c208 | 7 | DigitalOut led1(LED1); |
markco24 | 0:0ec25826c208 | 8 | DigitalOut led2(LED2); |
markco24 | 0:0ec25826c208 | 9 | DigitalOut led3(LED3); |
markco24 | 0:0ec25826c208 | 10 | DigitalOut led4(LED4); |
markco24 | 0:0ec25826c208 | 11 | Serial pc(USBTX, USBRX); |
markco24 | 0:0ec25826c208 | 12 | Serial gps(p13, p14); |
markco24 | 0:0ec25826c208 | 13 | TextLCD lcd(p21, p22, p23, p24, p25, p27, p28); |
markco24 | 0:0ec25826c208 | 14 | |
markco24 | 0:0ec25826c208 | 15 | |
markco24 | 0:0ec25826c208 | 16 | int parseGSV() { |
markco24 | 0:0ec25826c208 | 17 | gsv2 = strtok(gsv1, ","); |
markco24 | 0:0ec25826c208 | 18 | while (gsv2 != NULL) { |
markco24 | 0:0ec25826c208 | 19 | sep++; |
markco24 | 0:0ec25826c208 | 20 | switch (sep) { |
markco24 | 0:0ec25826c208 | 21 | case 1: |
markco24 | 0:0ec25826c208 | 22 | // # of sentences |
markco24 | 0:0ec25826c208 | 23 | lcd.printf("#:%s\n",gsv2); |
markco24 | 0:0ec25826c208 | 24 | break; |
markco24 | 0:0ec25826c208 | 25 | case 2 : |
markco24 | 0:0ec25826c208 | 26 | // Sentence # of # |
markco24 | 0:0ec25826c208 | 27 | lcd.printf("S#:%s",gsv2); |
markco24 | 0:0ec25826c208 | 28 | break; |
markco24 | 0:0ec25826c208 | 29 | case 3 : |
markco24 | 0:0ec25826c208 | 30 | // Number of Satellites in view (Should give a hint as to how many cases to expect here... |
markco24 | 0:0ec25826c208 | 31 | lcd.printf("#:%s\n",gsv2); |
markco24 | 0:0ec25826c208 | 32 | break; |
markco24 | 0:0ec25826c208 | 33 | case 4 : |
markco24 | 0:0ec25826c208 | 34 | // Satellite PRN Number |
markco24 | 0:0ec25826c208 | 35 | lcd.printf("PRN#:%s\n",gsv2); |
markco24 | 0:0ec25826c208 | 36 | break; |
markco24 | 0:0ec25826c208 | 37 | case 5 : |
markco24 | 0:0ec25826c208 | 38 | // Elevation in Degrees |
markco24 | 0:0ec25826c208 | 39 | break; |
markco24 | 0:0ec25826c208 | 40 | case 6: |
markco24 | 0:0ec25826c208 | 41 | // Azimuth in Degrees |
markco24 | 0:0ec25826c208 | 42 | break; |
markco24 | 0:0ec25826c208 | 43 | case 7: |
markco24 | 0:0ec25826c208 | 44 | // SNR - up to 4 satellites per sentence |
markco24 | 0:0ec25826c208 | 45 | break; |
markco24 | 0:0ec25826c208 | 46 | } |
markco24 | 0:0ec25826c208 | 47 | gsv2 = strtok(NULL, ","); |
markco24 | 0:0ec25826c208 | 48 | } |
markco24 | 0:0ec25826c208 | 49 | sep = 0; |
markco24 | 0:0ec25826c208 | 50 | return *gsv2; |
markco24 | 0:0ec25826c208 | 51 | } |
markco24 | 0:0ec25826c208 | 52 | |
markco24 | 0:0ec25826c208 | 53 | int parseRMC() { |
markco24 | 0:0ec25826c208 | 54 | |
markco24 | 0:0ec25826c208 | 55 | return 0; |
markco24 | 0:0ec25826c208 | 56 | } |
markco24 | 0:0ec25826c208 | 57 | |
markco24 | 0:0ec25826c208 | 58 | int parseGGA() { |
markco24 | 0:0ec25826c208 | 59 | gga2 = strtok(gga1, ","); |
markco24 | 0:0ec25826c208 | 60 | while (gga2 != NULL) { |
markco24 | 0:0ec25826c208 | 61 | sep++; |
markco24 | 0:0ec25826c208 | 62 | switch (sep) { |
markco24 | 0:0ec25826c208 | 63 | case 1: |
markco24 | 0:0ec25826c208 | 64 | if (mode == 1) { |
markco24 | 0:0ec25826c208 | 65 | lcd.cls(); |
markco24 | 0:0ec25826c208 | 66 | lcd.printf("Time:%s\n",gga2); |
markco24 | 0:0ec25826c208 | 67 | } |
markco24 | 0:0ec25826c208 | 68 | break; |
markco24 | 0:0ec25826c208 | 69 | case 2 : |
markco24 | 0:0ec25826c208 | 70 | if (mode == 2) { |
markco24 | 0:0ec25826c208 | 71 | lcd.cls(); |
markco24 | 0:0ec25826c208 | 72 | lcd.printf("Lat:%s",gga2); |
markco24 | 0:0ec25826c208 | 73 | } |
markco24 | 0:0ec25826c208 | 74 | break; |
markco24 | 0:0ec25826c208 | 75 | case 3 : |
markco24 | 0:0ec25826c208 | 76 | if (mode == 2) { |
markco24 | 0:0ec25826c208 | 77 | lcd.printf("%s\n",gga2); |
markco24 | 0:0ec25826c208 | 78 | wait(0.25); |
markco24 | 0:0ec25826c208 | 79 | } |
markco24 | 0:0ec25826c208 | 80 | break; |
markco24 | 0:0ec25826c208 | 81 | case 4 : |
markco24 | 0:0ec25826c208 | 82 | if (mode == 2) { |
markco24 | 0:0ec25826c208 | 83 | lcd.cls(); |
markco24 | 0:0ec25826c208 | 84 | lcd.printf("Lon:%s",gga2); |
markco24 | 0:0ec25826c208 | 85 | } |
markco24 | 0:0ec25826c208 | 86 | break; |
markco24 | 0:0ec25826c208 | 87 | case 5 : |
markco24 | 0:0ec25826c208 | 88 | if (mode == 2) { |
markco24 | 0:0ec25826c208 | 89 | lcd.printf("%s\n",gga2); |
markco24 | 0:0ec25826c208 | 90 | wait(0.25); |
markco24 | 0:0ec25826c208 | 91 | } |
markco24 | 0:0ec25826c208 | 92 | break; |
markco24 | 0:0ec25826c208 | 93 | case 6: |
markco24 | 0:0ec25826c208 | 94 | if (mode == 1) { |
markco24 | 0:0ec25826c208 | 95 | if (gga2 == "0") { |
markco24 | 0:0ec25826c208 | 96 | fix = "Invalid"; |
markco24 | 0:0ec25826c208 | 97 | } |
markco24 | 0:0ec25826c208 | 98 | if (gga2 == "1") { |
markco24 | 0:0ec25826c208 | 99 | fix = "GPS Fix (SPS)"; |
markco24 | 0:0ec25826c208 | 100 | } |
markco24 | 0:0ec25826c208 | 101 | if (gga2 == "2") { |
markco24 | 0:0ec25826c208 | 102 | fix = "DGPS Fix"; |
markco24 | 0:0ec25826c208 | 103 | } |
markco24 | 0:0ec25826c208 | 104 | if (gga2 == "3") { |
markco24 | 0:0ec25826c208 | 105 | fix = "PPS Fix"; |
markco24 | 0:0ec25826c208 | 106 | } |
markco24 | 0:0ec25826c208 | 107 | if (gga2 == "4") { |
markco24 | 0:0ec25826c208 | 108 | fix = "Real Time Kinematic"; |
markco24 | 0:0ec25826c208 | 109 | } |
markco24 | 0:0ec25826c208 | 110 | if (gga2 == "5") { |
markco24 | 0:0ec25826c208 | 111 | fix = "Float RTK"; |
markco24 | 0:0ec25826c208 | 112 | } |
markco24 | 0:0ec25826c208 | 113 | if (gga2 == "6") { |
markco24 | 0:0ec25826c208 | 114 | fix = "Estimated (Dead Reckoning)"; |
markco24 | 0:0ec25826c208 | 115 | } |
markco24 | 0:0ec25826c208 | 116 | if (gga2 == "7") { |
markco24 | 0:0ec25826c208 | 117 | fix = "Manual Input Mode"; |
markco24 | 0:0ec25826c208 | 118 | } |
markco24 | 0:0ec25826c208 | 119 | if (gga2 == "8") { |
markco24 | 0:0ec25826c208 | 120 | fix = "Simulation Mode"; |
markco24 | 0:0ec25826c208 | 121 | } |
markco24 | 0:0ec25826c208 | 122 | lcd.printf("FIX: %s_%s",gga2,fix); |
markco24 | 0:0ec25826c208 | 123 | } |
markco24 | 0:0ec25826c208 | 124 | break; |
markco24 | 0:0ec25826c208 | 125 | } |
markco24 | 0:0ec25826c208 | 126 | gga2 = strtok(NULL, ","); |
markco24 | 0:0ec25826c208 | 127 | } |
markco24 | 0:0ec25826c208 | 128 | sep = 0; |
markco24 | 0:0ec25826c208 | 129 | return *gga2; |
markco24 | 0:0ec25826c208 | 130 | } |
markco24 | 0:0ec25826c208 | 131 | |
markco24 | 0:0ec25826c208 | 132 | int getGPSstring(int str) { |
markco24 | 0:0ec25826c208 | 133 | if (gps.scanf("%s", &gpsString) ==1) { |
markco24 | 0:0ec25826c208 | 134 | if (str == 1) { |
markco24 | 0:0ec25826c208 | 135 | if (sscanf(gpsString, "$GPGSV,%s",gsv1) >= 1) { |
markco24 | 0:0ec25826c208 | 136 | sep = 0; |
markco24 | 0:0ec25826c208 | 137 | parseGSV(); |
markco24 | 0:0ec25826c208 | 138 | } |
markco24 | 0:0ec25826c208 | 139 | return *gsv2; |
markco24 | 0:0ec25826c208 | 140 | } |
markco24 | 0:0ec25826c208 | 141 | if (str == 2) { |
markco24 | 0:0ec25826c208 | 142 | if (sscanf(gpsString, "$GPRMC,%s",rmc1) >= 1) { |
markco24 | 0:0ec25826c208 | 143 | sep = 0; |
markco24 | 0:0ec25826c208 | 144 | parseRMC(); |
markco24 | 0:0ec25826c208 | 145 | } |
markco24 | 0:0ec25826c208 | 146 | return *rmc2; |
markco24 | 0:0ec25826c208 | 147 | } |
markco24 | 0:0ec25826c208 | 148 | if (str == 3) { |
markco24 | 0:0ec25826c208 | 149 | if (sscanf(gpsString, "$GPGGA,%s",gga1) >=1) { |
markco24 | 0:0ec25826c208 | 150 | sep = 0; |
markco24 | 0:0ec25826c208 | 151 | parseGGA(); |
markco24 | 0:0ec25826c208 | 152 | } |
markco24 | 0:0ec25826c208 | 153 | return *gga2; |
markco24 | 0:0ec25826c208 | 154 | } |
markco24 | 0:0ec25826c208 | 155 | } |
markco24 | 0:0ec25826c208 | 156 | return 0; |
markco24 | 0:0ec25826c208 | 157 | } |