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
Diff: UM6_config/UM6_config.h
- Revision:
- 9:7dcfa24d5e7a
- Parent:
- 8:0ce247da6370
- Child:
- 10:d96e068f3595
diff -r 0ce247da6370 -r 7dcfa24d5e7a UM6_config/UM6_config.h --- 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