Sam Clarke / Mbed 2 deprecated GPS-GPRS_Tracker

Dependencies:   GPS MODSERIAL mbed-rtos mbed

Committer:
SamClarke
Date:
Fri Oct 12 04:53:58 2012 +0000
Revision:
10:059cde049cd6
Parent:
9:bec6e8f731f2
Child:
11:fad4b451bec8
Even cleaner!  ; plus replaced some 'for loops' with other higher level functions

Who changed what in which revision?

UserRevisionLine numberNew contents of line
SamClarke 0:5b4bcbd69509 1 #include "mbed.h"
SamClarke 0:5b4bcbd69509 2 #include "GPS.h"
SamClarke 0:5b4bcbd69509 3 #include "rtos.h"
SamClarke 0:5b4bcbd69509 4 #include "MODSERIAL.h"
SamClarke 0:5b4bcbd69509 5 #include <string>
SamClarke 0:5b4bcbd69509 6
SamClarke 0:5b4bcbd69509 7 using namespace std;
SamClarke 0:5b4bcbd69509 8
SamClarke 9:bec6e8f731f2 9 const string GoogleChunk = "https://maps.google.com.au/maps?q=";
SamClarke 0:5b4bcbd69509 10 const string GoogleExtras = "&z=20";
SamClarke 10:059cde049cd6 11 char GPRSbuffer[513];
SamClarke 10:059cde049cd6 12 char NUMBER[13];
SamClarke 7:db9226b9b037 13 char MESSAGE[5];
SamClarke 0:5b4bcbd69509 14 int index;
SamClarke 0:5b4bcbd69509 15 int i = 0;
SamClarke 0:5b4bcbd69509 16
SamClarke 0:5b4bcbd69509 17 GPS gps(p9,p10);
SamClarke 10:059cde049cd6 18 MODSERIAL GPRS(p13,p14);
SamClarke 0:5b4bcbd69509 19 MODSERIAL pc(USBTX,USBRX);
SamClarke 0:5b4bcbd69509 20
SamClarke 0:5b4bcbd69509 21 DigitalOut myled1(LED1);
SamClarke 0:5b4bcbd69509 22 DigitalOut myled2(LED2);
SamClarke 0:5b4bcbd69509 23 DigitalOut myled3(LED3);
SamClarke 0:5b4bcbd69509 24 DigitalOut myled4(LED4);
SamClarke 0:5b4bcbd69509 25
SamClarke 0:5b4bcbd69509 26 void led_thread(void const *argument) // Some light jazz in a thread
SamClarke 0:5b4bcbd69509 27 {
SamClarke 0:5b4bcbd69509 28 while (true) {
SamClarke 0:5b4bcbd69509 29 DigitalOut leds[4] = {myled1, myled2, myled3, myled4};
SamClarke 0:5b4bcbd69509 30 int pattern[6][4] = {{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1},{0,0,1,0},{0,1,0,0}};
SamClarke 0:5b4bcbd69509 31 int i=0;
SamClarke 0:5b4bcbd69509 32 while(1) {
SamClarke 0:5b4bcbd69509 33 leds[0] = pattern[i][0];
SamClarke 0:5b4bcbd69509 34 leds[1] = pattern[i][1];
SamClarke 0:5b4bcbd69509 35 leds[2] = pattern[i][2];
SamClarke 0:5b4bcbd69509 36 leds[3] = pattern[i][3];
SamClarke 0:5b4bcbd69509 37 wait(0.2);
SamClarke 0:5b4bcbd69509 38 i++;
SamClarke 0:5b4bcbd69509 39 i == 6? i=0:0;
SamClarke 0:5b4bcbd69509 40 }
SamClarke 0:5b4bcbd69509 41 }
SamClarke 0:5b4bcbd69509 42 }
SamClarke 0:5b4bcbd69509 43
SamClarke 0:5b4bcbd69509 44 void sendSms()
SamClarke 0:5b4bcbd69509 45 {
SamClarke 0:5b4bcbd69509 46 // Set message mode to ASCII
SamClarke 0:5b4bcbd69509 47 GPRS.printf("AT+CMGF=1\r\n");
SamClarke 0:5b4bcbd69509 48 wait(1);
SamClarke 0:5b4bcbd69509 49 // Set the phone number
SamClarke 10:059cde049cd6 50 GPRS.printf("AT+CMGS=\"%s\"\r\n", NUMBER);
SamClarke 0:5b4bcbd69509 51 wait(1);
SamClarke 0:5b4bcbd69509 52 // Write out the GPS data in a message
SamClarke 10:059cde049cd6 53 GPRS.printf("UTC Time: %4.2f \nAltitude: %3.2fm\nSpeed: %3.2f Kn\nHeading: %3.2f Deg\nGPS data grade: [%c]\nSatellites in use: [%d]\nSatFix code: [%d] \nFix type: ", gps.time, gps.altitude, gps.speed, gps.heading, gps.validity, gps.satellites, gps.fixtype);
SamClarke 9:bec6e8f731f2 54 if(gps.fixtype == 1) {
SamClarke 9:bec6e8f731f2 55 GPRS.printf("Positive");
SamClarke 9:bec6e8f731f2 56 }
SamClarke 9:bec6e8f731f2 57 if(gps.fixtype == 2) {
SamClarke 9:bec6e8f731f2 58 GPRS.printf("Differential");
SamClarke 9:bec6e8f731f2 59 }
SamClarke 0:5b4bcbd69509 60 wait(1);
SamClarke 0:5b4bcbd69509 61 // Send it...
SamClarke 0:5b4bcbd69509 62 GPRS.putc(0x1A);
SamClarke 10:059cde049cd6 63 wait(4);
SamClarke 0:5b4bcbd69509 64 GPRS.printf("AT+CMGF=1\r\n");
SamClarke 0:5b4bcbd69509 65 wait(1);
SamClarke 10:059cde049cd6 66 GPRS.printf("AT+CMGS=\"%s\"\r\n", NUMBER);
SamClarke 0:5b4bcbd69509 67 wait(1);
SamClarke 0:5b4bcbd69509 68 GPRS.printf("Find me at....\n %s%f,%f%s", GoogleChunk, gps.latitude, gps.longitude, GoogleExtras);
SamClarke 0:5b4bcbd69509 69 wait(1);
SamClarke 0:5b4bcbd69509 70 GPRS.putc(0x1A);
SamClarke 3:a5df4bd224ad 71 wait(1);
SamClarke 0:5b4bcbd69509 72 }
SamClarke 0:5b4bcbd69509 73
SamClarke 0:5b4bcbd69509 74 void parseSms()
SamClarke 0:5b4bcbd69509 75 {
SamClarke 0:5b4bcbd69509 76 // If theres a char waiting in the MODSERIAL buffer
SamClarke 0:5b4bcbd69509 77 while (GPRS.readable()) {
SamClarke 0:5b4bcbd69509 78 // Assign it to 'c'
SamClarke 0:5b4bcbd69509 79 char c = GPRS.getc();
SamClarke 0:5b4bcbd69509 80 // Replace all returns and or line endings with money!
SamClarke 0:5b4bcbd69509 81 if (c == '\r' || c == '\n') c = '$';
SamClarke 0:5b4bcbd69509 82 // Put it in the array
SamClarke 0:5b4bcbd69509 83 GPRSbuffer[i] = c;
SamClarke 0:5b4bcbd69509 84 // Repeat if possible
SamClarke 0:5b4bcbd69509 85 i++;
SamClarke 0:5b4bcbd69509 86 }
SamClarke 0:5b4bcbd69509 87 // Uncomment the following to debug
SamClarke 10:059cde049cd6 88 // pc.printf("\nbuffer = %s", GPRSbuffer);
SamClarke 0:5b4bcbd69509 89
SamClarke 0:5b4bcbd69509 90 // If we get an SMS notification....
SamClarke 0:5b4bcbd69509 91 if (sscanf(GPRSbuffer, "$$+CMTI: \"SM\",%d", &index)>0) {
SamClarke 1:00c7dc0c1761 92 pc.printf("\nSMS recieved @ index [%d]", index);
SamClarke 7:db9226b9b037 93 memset(GPRSbuffer, '0', 512);
SamClarke 7:db9226b9b037 94 i = 0;
SamClarke 7:db9226b9b037 95 GPRS.printf("AT+CMGR=%d\r\n", index);
SamClarke 10:059cde049cd6 96 //wait(1);
SamClarke 7:db9226b9b037 97 }
SamClarke 7:db9226b9b037 98
SamClarke 7:db9226b9b037 99 if (strncmp(GPRSbuffer, "$$+CMGR",7) == 0 ) {
SamClarke 10:059cde049cd6 100 // Get the number out
SamClarke 10:059cde049cd6 101 char *n = strstr(GPRSbuffer,"+6");
SamClarke 10:059cde049cd6 102 strncpy(NUMBER, n, 12);
SamClarke 10:059cde049cd6 103 // Get the message out
SamClarke 10:059cde049cd6 104 char *m = strstr(GPRSbuffer,"\"$$")+3;
SamClarke 10:059cde049cd6 105 strncpy(MESSAGE, m, 4);
SamClarke 10:059cde049cd6 106 // Send the location
SamClarke 0:5b4bcbd69509 107 sendSms();
SamClarke 0:5b4bcbd69509 108 // Reset the GPRS buffer
SamClarke 0:5b4bcbd69509 109 memset(GPRSbuffer, '0', 512);
SamClarke 0:5b4bcbd69509 110 // Reset the char counter
SamClarke 0:5b4bcbd69509 111 i = 0;
SamClarke 7:db9226b9b037 112 }
SamClarke 7:db9226b9b037 113
SamClarke 7:db9226b9b037 114 if (strncmp(GPRSbuffer, "$$+CMGS",7) == 0) {
SamClarke 7:db9226b9b037 115 // Reset the GPRS buffer
SamClarke 7:db9226b9b037 116 memset(GPRSbuffer, '0', 512);
SamClarke 7:db9226b9b037 117 // Reset the char counter
SamClarke 7:db9226b9b037 118 i = 0;
SamClarke 7:db9226b9b037 119 }
SamClarke 7:db9226b9b037 120
SamClarke 7:db9226b9b037 121 if (strncmp(GPRSbuffer, "$$RING",6) == 0) {
SamClarke 9:bec6e8f731f2 122 GPRS.printf("ATH0\r\n");
SamClarke 3:a5df4bd224ad 123 pc.printf("\nCall recieved");
SamClarke 3:a5df4bd224ad 124 // Do the send SMS routine...
SamClarke 3:a5df4bd224ad 125 sendSms();
SamClarke 3:a5df4bd224ad 126 // Flush out any left in the serial buffer
SamClarke 10:059cde049cd6 127 //GPRS.rxBufferFlush();
SamClarke 3:a5df4bd224ad 128 // Reset the GPRS buffer
SamClarke 4:0e55a4620f5e 129 memset(GPRSbuffer, '0', 512);
SamClarke 3:a5df4bd224ad 130 // Reset the char counter
SamClarke 4:0e55a4620f5e 131 i = 0;
SamClarke 1:00c7dc0c1761 132 }
SamClarke 10:059cde049cd6 133 pc.printf("\n\n\nWaiting for SMS or call...\n");
SamClarke 10:059cde049cd6 134 pc.printf("\nThe last number was : %s", NUMBER);
SamClarke 10:059cde049cd6 135 pc.printf("\nThe last message was : %s", MESSAGE);
SamClarke 7:db9226b9b037 136 // Reset the GPRS buffer
SamClarke 7:db9226b9b037 137 memset(GPRSbuffer, '0', 512);
SamClarke 7:db9226b9b037 138 // Reset the char counter
SamClarke 7:db9226b9b037 139 i = 0;
SamClarke 0:5b4bcbd69509 140 }
SamClarke 0:5b4bcbd69509 141
SamClarke 0:5b4bcbd69509 142 int main()
SamClarke 0:5b4bcbd69509 143 {
SamClarke 0:5b4bcbd69509 144 pc.baud(115200);
SamClarke 0:5b4bcbd69509 145 GPRS.baud(19200);
SamClarke 0:5b4bcbd69509 146 Thread thread(led_thread);
SamClarke 5:3a42b208ac4e 147 memset(GPRSbuffer, '0', 512);
SamClarke 9:bec6e8f731f2 148 pc.printf("\nI'm Alive...\n");
SamClarke 0:5b4bcbd69509 149 // Setup the GPS
SamClarke 0:5b4bcbd69509 150 gps.Init();
SamClarke 0:5b4bcbd69509 151 // Set the GPRS AT echo off
SamClarke 0:5b4bcbd69509 152 GPRS.printf("ATE0\r\n");
SamClarke 9:bec6e8f731f2 153 pc.printf("\nGPRS echo [OFF]\n");
SamClarke 0:5b4bcbd69509 154 wait(1);
SamClarke 0:5b4bcbd69509 155 // Delete all messages on the sim card
SamClarke 0:5b4bcbd69509 156 GPRS.printf("AT+CMGDA=\"DEL ALL\"\r\n");
SamClarke 0:5b4bcbd69509 157 wait(1);
SamClarke 9:bec6e8f731f2 158 pc.printf("\nMessages Cleared...\n");
SamClarke 0:5b4bcbd69509 159 wait(1);
SamClarke 0:5b4bcbd69509 160 // Get in a while loop
SamClarke 0:5b4bcbd69509 161 while (1) {
SamClarke 10:059cde049cd6 162 // Process any recieved GPRS data
SamClarke 0:5b4bcbd69509 163 parseSms();
SamClarke 0:5b4bcbd69509 164 // Process / check GPS data
SamClarke 3:a5df4bd224ad 165 gps.parseData();
SamClarke 0:5b4bcbd69509 166 }
SamClarke 0:5b4bcbd69509 167 }