A project similar to http://mbed.org/users/lhiggs/code/UM6_IMU_AHRS_2012/, where I'm trying to log data from a UM6 (CH Robotics orientation sensor) and a GPS transceiver to an sd card. I've adapted LHiggs code to include ModGPS. For sum reason a soon as I pick up a gps signal the UM6 data freezes i.e. the time and gps signals continue to print out but the UM6 signals fixes on a single value.

Dependencies:   MODGPS MODSERIAL SDFileSystem mbed

Revision:
9:7dcfa24d5e7a
Parent:
8:0ce247da6370
Child:
10:d96e068f3595
--- a/UM6_config/UM6_config.h	Mon May 27 17:22:36 2013 +0000
+++ b/UM6_config/UM6_config.h	Thu May 30 13:32:54 2013 +0000
@@ -1,6 +1,6 @@
 /* ------------------------------------------------------------------------------
   File: UM6_config.h
-  Author: CH Robotics, edited by Nathan Ewin
+  Author: CH Robotics, edited by LHiggs, & Nathan Ewin
   Version: 1.0
 
   Description: Preprocessor definitions and function declarations for UM6 configuration
@@ -142,10 +142,12 @@
 float Roll;
 float Pitch;
 float Yaw;
-double GPS_long;
-double GPS_lat;
+float GPS_long;
+float GPS_lat;
 float GPS_course;
 float GPS_speed;
+int32_t GPS_lat_raw;
+
 };
 UM6 data;
 
@@ -166,8 +168,14 @@
 int16_t MY_DATA_EULER_PHI;
 int16_t MY_DATA_EULER_THETA;
 int16_t MY_DATA_EULER_PSI;
-double MY_DATA_GPS_LONG;
-double MY_DATA_GPS_LAT;
+int32_t MY_DATA_GPS_LONG;
+int32_t MY_DATA_GPS_LONG0;
+int32_t MY_DATA_GPS_LONG1;
+int32_t MY_DATA_GPS_LONG2;
+int32_t MY_DATA_GPS_LAT;
+int32_t MY_DATA_GPS_LAT0;
+int32_t MY_DATA_GPS_LAT1;
+int32_t MY_DATA_GPS_LAT2;
 int16_t MY_DATA_GPS_COURSE;
 int16_t MY_DATA_GPS_SPEED;
 
@@ -476,16 +484,23 @@
                                 // GPS long
                                if (new_packet.address == UM6_GPS_LONGITUDE) {
                                     // Longitude
-                                   MY_DATA_GPS_LONG = (int32_t)new_packet.packet_data;                                  
-                                   data.GPS_long = MY_DATA_GPS_LAT;
+                                   MY_DATA_GPS_LONG0 = (int32_t)new_packet.packet_data[0]<<24;
+                                   MY_DATA_GPS_LONG1 = (int32_t)new_packet.packet_data[1]<<16;
+                                   MY_DATA_GPS_LONG2 = (int32_t)new_packet.packet_data[2]<<8;
+                                   MY_DATA_GPS_LONG = MY_DATA_GPS_LONG0|MY_DATA_GPS_LONG1|MY_DATA_GPS_LONG2|new_packet.packet_data[3];                                                                                                                                      
+                                   memcpy(&data.GPS_long,&MY_DATA_GPS_LONG,sizeof(int)); 
                                }  
                                 //------------------------------------------------------------
                                //-------------------------------------------------------------------
                                 // GPS lat
                                if (new_packet.address == UM6_GPS_LATITUDE) {
                                     // Latitude                                 
-                                   MY_DATA_GPS_LAT = (int32_t)new_packet.packet_data;   
-                                   data.GPS_lat = MY_DATA_GPS_LONG;  
+                                   MY_DATA_GPS_LAT0 = (int32_t)new_packet.packet_data[0]<<24;
+                                   MY_DATA_GPS_LAT1 = (int32_t)new_packet.packet_data[1]<<16;                                 
+                                   MY_DATA_GPS_LAT2 = (int32_t)new_packet.packet_data[2]<<8;
+                                   MY_DATA_GPS_LAT = MY_DATA_GPS_LAT0|MY_DATA_GPS_LAT1|MY_DATA_GPS_LAT2|new_packet.packet_data[3];                                                                                                                                                                                                          
+                                   memcpy(&data.GPS_lat,&MY_DATA_GPS_LAT,sizeof(int));
+                                   data.GPS_lat_raw = MY_DATA_GPS_LAT;
                                }  
                                 //------------------------------------------------------------ 
                             }    // end if(ADDRESS_TYPE_DATA)
@@ -524,4 +539,13 @@
 Long -2.000001
 Long -2.000001
 Long -26815635079454453000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+
+//code 
+int32_t GPS_long;
+int32_t MY_DATA_GPS_LONG;
+MY_DATA_GPS_LONG = (int32_t)new_packet.packet_data;                                  
+data.GPS_long = MY_DATA_GPS_LAT;
+//print out
+Long nan
+Long 0.000000
 */
\ No newline at end of file