Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
prf
Date:
Wed Sep 30 09:32:22 2009 +0000
Commit message:

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 2f1a2ad434d7 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Sep 30 09:32:22 2009 +0000
@@ -0,0 +1,135 @@
+// GPS synchronised data logger
+// Uses the $GPRMC string for time and date
+// synchronisation
+// Code derived from Arduino GPS examples
+// and the MBED GPS library
+// http://www.arduino.cc/
+// Thanks Lady Ada and others!
+
+#include "mbed.h"
+// Commands for Globalsat EM-406A GPS
+// to turn on or off data strings
+#define RMC_ON   "$PSRF103,4,0,1,1*21\r\n"
+#define RMC_OFF  "$PSRF103,4,0,0,1*20\r\n"
+#define GGA_ON   "$PSRF103,0,0,1,1*25\r\n"
+#define GGA_OFF  "$PSRF103,0,0,0,1*24\r\n"
+#define GSA_ON   "$PSRF103,2,0,1,1*27\r\n"
+#define GSA_OFF  "$PSRF103,2,0,0,1*26\r\n"
+#define GSV_ON   "$PSRF103,3,0,1,1*26\r\n"
+#define GSV_OFF  "$PSRF103,3,0,0,1*27\r\n"
+#define WAAS_ON  "$PSRF151,1*3F\r\n"
+#define WAAS_OFF "$PSRF151,0*3E\r\n"
+
+// Set up serial ports and LEDs
+// MBED USB port used for console debug messages
+// EM-406A GPS on Pin9 and Pin10
+Serial pc(USBTX, USBRX); // tx, rx - Default 9600 baud
+Serial gps(p9, p10);     // tx, rx - 4800 baud required
+DigitalOut led1(LED1);   // Seconds LED
+DigitalOut led4(LED4);   // Data sent LED
+
+//char buffidx;
+char msg[256];           // GPS data buffer
+char status;             // GPS status 'V' = Not locked; 'A' = Locked
+char *parseptr;          // Pointer for parsing GPS message
+char time_buff[7] = "000000";
+char date_buff[7] = "000000";
+char sens_buff[7] = "123456";
+
+// Switch off all but $GPRMC string
+void setgps() {
+    gps.printf(RMC_ON);
+    gps.printf(GGA_OFF);
+    gps.printf(GSA_OFF);
+    gps.printf(GSV_OFF);
+    gps.printf(WAAS_OFF);
+    return;
+}
+// Get line of data from GPS
+void getline() {
+    while (gps.getc() != '$'); // Wait for start of line
+    for (int i=0; i<256; i++) {
+        msg[i] = gps.getc();
+// pc.putc(msg[i]);
+        if (msg[i] == '\r') {
+            msg[i] = 0;
+            return;
+        }
+    }
+}
+// Flash LED 1
+void flashled1(void) {
+    led1 = 1;
+    wait(0.05);
+    led1 = 0;
+    wait(0.05);
+}
+// Flash LED4
+void flashled4(void) {
+    led4 = 1;
+    wait(0.1);
+    led4 = 0;
+    wait(0.1);
+}
+void read_sensor() {
+// Insert code here to read sensor
+// and store data in sens_buff[]
+}
+void send_data() {
+// Insert code to send data
+    pc.printf(sens_buff);
+    pc.printf("\r\n");
+}
+
+int main(void) {
+    gps.baud(4800);         // NB GPS baud rate 4800
+    pc.printf("\n\rGPS Logger Running!...\n\r");
+    setgps();
+    while (1) {
+        getline();
+        if (strncmp(msg, "GPRMC",5) == 0) {
+            // Put the time into the time array
+            parseptr = msg+6;
+            for (int i = 0; i < 6; i++) {
+                time_buff[i] = parseptr[i];
+            }
+            // Skip through commas in the data string
+            // Firstly to get to the status flag and
+            // then to pick up the date
+            parseptr = strchr(parseptr, ',')+1;
+            status = parseptr[0];
+            parseptr = strchr(parseptr, ',')+1;
+            parseptr = strchr(parseptr, ',')+1;
+            parseptr = strchr(parseptr, ',')+1;
+            parseptr = strchr(parseptr, ',')+1;
+            parseptr = strchr(parseptr, ',')+1;
+            parseptr = strchr(parseptr, ',')+1;
+            parseptr = strchr(parseptr, ',')+1;
+            // Put the date into the date array
+            for (int i = 0; i < 6; i++) {
+                date_buff[i] = parseptr[i];
+            }
+            // Every second output time, date and lock status
+            // to the console and flash LED1
+            pc.printf(time_buff);
+            pc.printf(",");
+            pc.printf(date_buff);
+            pc.printf(",");
+            pc.putc(status);
+            pc.printf("\r\n");
+            flashled1();
+            // Take a sensor reading every minute
+            // ie is the time hh:mm:00
+            if (time_buff[4] == 0x30 && time_buff[5] == 0x30) {
+                pc.printf("\r\nSensor Reading!\r\n");
+                read_sensor();
+                pc.printf("Sending: ");
+                send_data();
+                pc.printf("\r\n");
+                flashled4();
+
+            }
+        }
+    }
+}
+
diff -r 000000000000 -r 2f1a2ad434d7 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed Sep 30 09:32:22 2009 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/a0336ede94ce