Dependencies:   mbed

Committer:
prf
Date:
Wed Sep 30 09:32:22 2009 +0000
Revision:
0:2f1a2ad434d7

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
prf 0:2f1a2ad434d7 1 // GPS synchronised data logger
prf 0:2f1a2ad434d7 2 // Uses the $GPRMC string for time and date
prf 0:2f1a2ad434d7 3 // synchronisation
prf 0:2f1a2ad434d7 4 // Code derived from Arduino GPS examples
prf 0:2f1a2ad434d7 5 // and the MBED GPS library
prf 0:2f1a2ad434d7 6 // http://www.arduino.cc/
prf 0:2f1a2ad434d7 7 // Thanks Lady Ada and others!
prf 0:2f1a2ad434d7 8
prf 0:2f1a2ad434d7 9 #include "mbed.h"
prf 0:2f1a2ad434d7 10 // Commands for Globalsat EM-406A GPS
prf 0:2f1a2ad434d7 11 // to turn on or off data strings
prf 0:2f1a2ad434d7 12 #define RMC_ON "$PSRF103,4,0,1,1*21\r\n"
prf 0:2f1a2ad434d7 13 #define RMC_OFF "$PSRF103,4,0,0,1*20\r\n"
prf 0:2f1a2ad434d7 14 #define GGA_ON "$PSRF103,0,0,1,1*25\r\n"
prf 0:2f1a2ad434d7 15 #define GGA_OFF "$PSRF103,0,0,0,1*24\r\n"
prf 0:2f1a2ad434d7 16 #define GSA_ON "$PSRF103,2,0,1,1*27\r\n"
prf 0:2f1a2ad434d7 17 #define GSA_OFF "$PSRF103,2,0,0,1*26\r\n"
prf 0:2f1a2ad434d7 18 #define GSV_ON "$PSRF103,3,0,1,1*26\r\n"
prf 0:2f1a2ad434d7 19 #define GSV_OFF "$PSRF103,3,0,0,1*27\r\n"
prf 0:2f1a2ad434d7 20 #define WAAS_ON "$PSRF151,1*3F\r\n"
prf 0:2f1a2ad434d7 21 #define WAAS_OFF "$PSRF151,0*3E\r\n"
prf 0:2f1a2ad434d7 22
prf 0:2f1a2ad434d7 23 // Set up serial ports and LEDs
prf 0:2f1a2ad434d7 24 // MBED USB port used for console debug messages
prf 0:2f1a2ad434d7 25 // EM-406A GPS on Pin9 and Pin10
prf 0:2f1a2ad434d7 26 Serial pc(USBTX, USBRX); // tx, rx - Default 9600 baud
prf 0:2f1a2ad434d7 27 Serial gps(p9, p10); // tx, rx - 4800 baud required
prf 0:2f1a2ad434d7 28 DigitalOut led1(LED1); // Seconds LED
prf 0:2f1a2ad434d7 29 DigitalOut led4(LED4); // Data sent LED
prf 0:2f1a2ad434d7 30
prf 0:2f1a2ad434d7 31 //char buffidx;
prf 0:2f1a2ad434d7 32 char msg[256]; // GPS data buffer
prf 0:2f1a2ad434d7 33 char status; // GPS status 'V' = Not locked; 'A' = Locked
prf 0:2f1a2ad434d7 34 char *parseptr; // Pointer for parsing GPS message
prf 0:2f1a2ad434d7 35 char time_buff[7] = "000000";
prf 0:2f1a2ad434d7 36 char date_buff[7] = "000000";
prf 0:2f1a2ad434d7 37 char sens_buff[7] = "123456";
prf 0:2f1a2ad434d7 38
prf 0:2f1a2ad434d7 39 // Switch off all but $GPRMC string
prf 0:2f1a2ad434d7 40 void setgps() {
prf 0:2f1a2ad434d7 41 gps.printf(RMC_ON);
prf 0:2f1a2ad434d7 42 gps.printf(GGA_OFF);
prf 0:2f1a2ad434d7 43 gps.printf(GSA_OFF);
prf 0:2f1a2ad434d7 44 gps.printf(GSV_OFF);
prf 0:2f1a2ad434d7 45 gps.printf(WAAS_OFF);
prf 0:2f1a2ad434d7 46 return;
prf 0:2f1a2ad434d7 47 }
prf 0:2f1a2ad434d7 48 // Get line of data from GPS
prf 0:2f1a2ad434d7 49 void getline() {
prf 0:2f1a2ad434d7 50 while (gps.getc() != '$'); // Wait for start of line
prf 0:2f1a2ad434d7 51 for (int i=0; i<256; i++) {
prf 0:2f1a2ad434d7 52 msg[i] = gps.getc();
prf 0:2f1a2ad434d7 53 // pc.putc(msg[i]);
prf 0:2f1a2ad434d7 54 if (msg[i] == '\r') {
prf 0:2f1a2ad434d7 55 msg[i] = 0;
prf 0:2f1a2ad434d7 56 return;
prf 0:2f1a2ad434d7 57 }
prf 0:2f1a2ad434d7 58 }
prf 0:2f1a2ad434d7 59 }
prf 0:2f1a2ad434d7 60 // Flash LED 1
prf 0:2f1a2ad434d7 61 void flashled1(void) {
prf 0:2f1a2ad434d7 62 led1 = 1;
prf 0:2f1a2ad434d7 63 wait(0.05);
prf 0:2f1a2ad434d7 64 led1 = 0;
prf 0:2f1a2ad434d7 65 wait(0.05);
prf 0:2f1a2ad434d7 66 }
prf 0:2f1a2ad434d7 67 // Flash LED4
prf 0:2f1a2ad434d7 68 void flashled4(void) {
prf 0:2f1a2ad434d7 69 led4 = 1;
prf 0:2f1a2ad434d7 70 wait(0.1);
prf 0:2f1a2ad434d7 71 led4 = 0;
prf 0:2f1a2ad434d7 72 wait(0.1);
prf 0:2f1a2ad434d7 73 }
prf 0:2f1a2ad434d7 74 void read_sensor() {
prf 0:2f1a2ad434d7 75 // Insert code here to read sensor
prf 0:2f1a2ad434d7 76 // and store data in sens_buff[]
prf 0:2f1a2ad434d7 77 }
prf 0:2f1a2ad434d7 78 void send_data() {
prf 0:2f1a2ad434d7 79 // Insert code to send data
prf 0:2f1a2ad434d7 80 pc.printf(sens_buff);
prf 0:2f1a2ad434d7 81 pc.printf("\r\n");
prf 0:2f1a2ad434d7 82 }
prf 0:2f1a2ad434d7 83
prf 0:2f1a2ad434d7 84 int main(void) {
prf 0:2f1a2ad434d7 85 gps.baud(4800); // NB GPS baud rate 4800
prf 0:2f1a2ad434d7 86 pc.printf("\n\rGPS Logger Running!...\n\r");
prf 0:2f1a2ad434d7 87 setgps();
prf 0:2f1a2ad434d7 88 while (1) {
prf 0:2f1a2ad434d7 89 getline();
prf 0:2f1a2ad434d7 90 if (strncmp(msg, "GPRMC",5) == 0) {
prf 0:2f1a2ad434d7 91 // Put the time into the time array
prf 0:2f1a2ad434d7 92 parseptr = msg+6;
prf 0:2f1a2ad434d7 93 for (int i = 0; i < 6; i++) {
prf 0:2f1a2ad434d7 94 time_buff[i] = parseptr[i];
prf 0:2f1a2ad434d7 95 }
prf 0:2f1a2ad434d7 96 // Skip through commas in the data string
prf 0:2f1a2ad434d7 97 // Firstly to get to the status flag and
prf 0:2f1a2ad434d7 98 // then to pick up the date
prf 0:2f1a2ad434d7 99 parseptr = strchr(parseptr, ',')+1;
prf 0:2f1a2ad434d7 100 status = parseptr[0];
prf 0:2f1a2ad434d7 101 parseptr = strchr(parseptr, ',')+1;
prf 0:2f1a2ad434d7 102 parseptr = strchr(parseptr, ',')+1;
prf 0:2f1a2ad434d7 103 parseptr = strchr(parseptr, ',')+1;
prf 0:2f1a2ad434d7 104 parseptr = strchr(parseptr, ',')+1;
prf 0:2f1a2ad434d7 105 parseptr = strchr(parseptr, ',')+1;
prf 0:2f1a2ad434d7 106 parseptr = strchr(parseptr, ',')+1;
prf 0:2f1a2ad434d7 107 parseptr = strchr(parseptr, ',')+1;
prf 0:2f1a2ad434d7 108 // Put the date into the date array
prf 0:2f1a2ad434d7 109 for (int i = 0; i < 6; i++) {
prf 0:2f1a2ad434d7 110 date_buff[i] = parseptr[i];
prf 0:2f1a2ad434d7 111 }
prf 0:2f1a2ad434d7 112 // Every second output time, date and lock status
prf 0:2f1a2ad434d7 113 // to the console and flash LED1
prf 0:2f1a2ad434d7 114 pc.printf(time_buff);
prf 0:2f1a2ad434d7 115 pc.printf(",");
prf 0:2f1a2ad434d7 116 pc.printf(date_buff);
prf 0:2f1a2ad434d7 117 pc.printf(",");
prf 0:2f1a2ad434d7 118 pc.putc(status);
prf 0:2f1a2ad434d7 119 pc.printf("\r\n");
prf 0:2f1a2ad434d7 120 flashled1();
prf 0:2f1a2ad434d7 121 // Take a sensor reading every minute
prf 0:2f1a2ad434d7 122 // ie is the time hh:mm:00
prf 0:2f1a2ad434d7 123 if (time_buff[4] == 0x30 && time_buff[5] == 0x30) {
prf 0:2f1a2ad434d7 124 pc.printf("\r\nSensor Reading!\r\n");
prf 0:2f1a2ad434d7 125 read_sensor();
prf 0:2f1a2ad434d7 126 pc.printf("Sending: ");
prf 0:2f1a2ad434d7 127 send_data();
prf 0:2f1a2ad434d7 128 pc.printf("\r\n");
prf 0:2f1a2ad434d7 129 flashled4();
prf 0:2f1a2ad434d7 130
prf 0:2f1a2ad434d7 131 }
prf 0:2f1a2ad434d7 132 }
prf 0:2f1a2ad434d7 133 }
prf 0:2f1a2ad434d7 134 }
prf 0:2f1a2ad434d7 135