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: main.cpp
- Revision:
- 8:0ce247da6370
- Parent:
- 7:af9f373ac87b
- Child:
- 9:7dcfa24d5e7a
diff -r af9f373ac87b -r 0ce247da6370 main.cpp --- a/main.cpp Sat May 25 14:29:36 2013 +0000 +++ b/main.cpp Mon May 27 17:22:36 2013 +0000 @@ -17,10 +17,9 @@ SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board -//------------ interrupt and variable setup --------------------------// +//------------ variables setup ---------------------------------------// Ticker tick; Timer t; -int counter=0; int flag=0; // interupt function for processing uart messages --------------------// @@ -33,7 +32,6 @@ //------------ LogData interrupt function ----------------------------// void LogData() { - counter++; flag=1; } @@ -50,32 +48,53 @@ //---------- setup sd card -----------------------------// mkdir("/sd/mydir", 0777); - FILE *fp = fopen("/sd/mydir/sdtest.csv", "w"); + FILE *fp = fopen("/sd/mydir/log1.csv", "w"); if(fp == NULL) { error("Could not open file for write\n"); } -//////////// FILE *fp = fopen("/local/log1.csv", "w"); - fprintf(fp,"time(s),count,Yaw(deg),Accel(m/s2),GPS Speed(m/s) \r"); +//////////////////////////// FILE *fp = fopen("/local/log1.csv", "w"); + // print TEST signals to file, header +// fprintf(fp,"time(s),Yaw(deg),Accel(m/s2),GPS Speed(m/s) \r"); + // print ALL signals to file, header + fprintf(fp, "time(s),Yaw(deg),Roll(deg),Pitch(deg),GyroX(deg/s),GyroY(deg/s),GyroZ(deg/s),AccelX(g),AccelY(g),AccelZ(g),GPScourse(deg),GPSspeed(m/s),Latitude(deg),Longitude(deg) \r"); // sends header to file + //---- main while loop ----------------------------------// //--(interrupt sets flag that causes variables to be logged) while(1) { - if(flag==1) { // prints counter value every interrupt raises flag + if(flag==1) { log_led=1; // turns on LED3 to indicate logging + float time=t.read(); float Yaw=data.Yaw; - float AccelX=data.Accel_Proc_X; - float GPSspeed=data.GPS_speed; - fprintf(fp,"%.3f,%d,%f,%f,%f \r",t.read(),counter,Yaw,AccelX,GPSspeed); - pc.printf("time %.3f, count %d,Yaw %f,Accel %f, Speed %f \n",t.read(),counter,Yaw,AccelX,GPSspeed); - flag=0; - pc_led = !pc_led; // Lights LED1 when uart RxBuff has > 40 bytes + float Roll=data.Roll; + float Pitch=data.Pitch; + float GyroX=data.Gyro_Proc_X; + float GyroY=data.Gyro_Proc_Y; + float GyroZ=data.Gyro_Proc_Z; + float AccelX=data.Accel_Proc_X; + float AccelY=data.Accel_Proc_Y; + float AccelZ=data.Accel_Proc_Z; + double GPSlong=data.GPS_long; // currently I can get GPS longitude to out data + double GPSlat=data.GPS_lat; // currently I can get GPS latitude to out data + float GPScourse=data.GPS_course; + float GPSspeed=data.GPS_speed; + + //----- print TEST signals to file -------------------// + // fprintf(fp,"%.3f,%.2f,%.4f,%.2f \r",time,Yaw,AccelX,GPSspeed); + pc.printf("time %.3f,Yaw %f, Speed %f, Lat %f, Long %f \n",time,Yaw,GPSspeed,GPSlat,GPSlong); + // pc.printf("0x%08X, %f\n", *(int *)&GPSlong, GPSlong); + + //----- print ALL signals to file --------------------// + fprintf(fp, "%3.3f, %3.1f,%3.1f,%3.1f, %3.2f,%3.2f,%3.2f, %3.4f,%3.4f,%3.4f, %3.1f,%3.2f,%f,%f\r",time,Yaw,Roll,Pitch,GyroX,GyroY,GyroZ,AccelX,AccelY,AccelZ,GPScourse,GPSspeed,GPSlat,GPSlong); + flag=0; // recents LogData interrupt flag + pc_led = !pc_led; // Lights LED1 when transmitting to PC screen } // end if(flag=1) loop if(enable==0) { - break; // breaks while loop in enable switched off + break; // breaks while loop if enable switched off } } // end while(1) loop - pc.printf(" done. "); // prints 'done when logging is finished/enable switched off + pc.printf(" done. \n"); // prints 'done when logging is finished/enable switched off log_led=0; // turns off LED logging is finished/enable switched off wait(0.5); // debug wait for pc.printf fclose(fp); // closes log file