For Cansat EM

Dependencies:   IMU_I2C IMUfilter SCP1000 SDFileSystem mbed nmea0813 myCAN_logger

Files at this revision

API Documentation at this revision

Comitter:
YSB
Date:
Fri Aug 16 08:23:45 2013 +0000
Parent:
3:33a9e207e309
Commit message:
20130816ver

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
myCAN.lib Show annotated file Show diff for this revision Revisions of this file
nmea0813.lib Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Sat Jul 27 10:01:33 2013 +0000
+++ b/main.cpp	Fri Aug 16 08:23:45 2013 +0000
@@ -26,6 +26,7 @@
     Ticker logging;
 //for communication with mission_mbed
     myCAN can(p30, p29);
+    Ticker can_msg;
 
 //for pc_msg
     #define PC_BAUD 9600
@@ -36,6 +37,10 @@
     #define LOG_RATE 0.3//0.04
     char log_flg;
     void log_flg_on(void);
+//for can_msg
+    #define CAN_RATE 0.1
+    void can_flg_on(void);
+    char can_flg = 0;
 
 //Offsets for the gyroscope and the accelerometer.
     double w_xBias;
@@ -214,6 +219,10 @@
     pc_flg = 1;
 }
 
+void can_flg_on(void){
+    can_flg = 1;
+}
+
 void log_flg_on(void){
     log_flg = 1;
 }
@@ -241,19 +250,31 @@
     //for PC
         pc.baud(PC_BAUD);
         pc_msg.attach(&pc_flg_on,PC_RATE);
+        
+    //for CAN
+        can_msg.attach(&can_flg_on,CAN_RATE);
     
     //for logging
         logging.attach(&log_flg_on,LOG_RATE);
     
-    int a_zi;
-    a_zi=0;
+    int roll,pitch;
+    float g;
+    roll = 0;
+    pitch = 0;
     
     while(1){
         //for can send
-            if(a_z > 9.6){a_zi=1;}
-            else{a_zi=0;}         
-            can.make_logger_senddata(gps.get_time(),gps.get_satelite_number(),gps.get_str_latitude(),gps.get_str_longitude(),a_zi,(int)(scp1000.readTemperature()*20),scp1000.readPressure());
-            can.send(LOGGER);
+            if(can_flg == 1){
+                g = sqrt(a_x*a_x + a_y*a_y + a_z*a_z);
+                roll = (int)(acos(a_y/g)*180/3.1415926535 - 90.0); 
+                pitch = (int)(acos(a_x/g)*180/3.1415926535 - 90.0); 
+                if(roll<0){roll=roll+360.0;}
+                if(a_z<0){roll=-1*roll+180.0;} 
+                if(roll<0){roll=roll+360.0;}
+                can.make_logger_senddata(gps.get_time(),gps.get_satelite_number(),gps.get_str_latitude(),gps.get_str_longitude(),roll,pitch,(int)(scp1000.readTemperature()*20),scp1000.readPressure());
+                can.send(LOGGER);
+                can_flg = 0;
+            }
         //for logging
             if(log_flg == 1){
                 if(SD == 1){
@@ -263,10 +284,13 @@
                         //error("Could not open file for write\n");
                         pc.printf("SD_error");
                     }else{
-                        fprintf(fp,"time:%s,latitude:%f,longitude:%f,status:%c,satelite:%c,speed:%f,",gps.get_time(),gps.get_latitude(),gps.get_longitude(),gps.get_status(),gps.get_satelite_number(),gps.get_speed());
-                        //fprintf(fp,"roll:%f,pitch:%f,",toDegrees(imuFilter.getRoll()),toDegrees(imuFilter.getPitch()));
-                        fprintf(fp,"pressure:%d,temperature:%f\r\n", scp1000.readPressure(), scp1000.readTemperature());
-                        fprintf(fp,"%s,%f,%f,%f,%f,%f,%f\r\n",gps.get_time(),w_y, w_x, w_z, a_y, a_x, a_z);
+                        fprintf(fp,"%s,%f,%f,",gps.get_time(),gps.get_latitude(),gps.get_longitude());
+                        fprintf(fp,"%c,%d,%f,",gps.get_status(),gps.get_satelite_number(),gps.get_speed());
+                        fprintf(fp,"%d,%f,", scp1000.readPressure(), scp1000.readTemperature());
+                        fprintf(fp,"%f,%f,%f,%f,%f,%f,",w_y, w_x, w_z, a_y, a_x, a_z);
+                        fprintf(fp,"%d,%d,",roll,pitch);
+                        fprintf(fp,"%d",can.get_mission_status());
+                        fprintf(fp,"\r\n",can.get_mission_status());
                         fclose(fp);
                     }
                 }
@@ -274,13 +298,12 @@
         
         //for pc debug
             if(pc_flg == 1){
-                pc.printf("%f,%f,%f,%f,%f,%f\r\n",w_y, w_x, w_z, a_y, a_x, a_z);
-                pc.printf("%d\r\n",a_zi);
+                //pc.printf("%f,%f,%f,%f,%f,%f\r\n",w_y, w_x, w_z, a_y, a_x, a_z);
+                pc.printf("%d,%d\r\n",roll,pitch);
                 //pc.printf("%f,%f,%f,%f,%f,%f\r\n",a_xBias, a_yBias, a_zBias, w_xBias, w_yBias, w_zBias);
                 //pc.printf("pressure:%d,temperature:%f\r\n", scp1000.readPressure(), scp1000.readTemperature());
-                pc.printf("time:%s,latitude:%f,longitude:%f,status:%c,satelite:%c,speed:%f\r\n",gps.get_time(),gps.get_latitude(),gps.get_longitude(),gps.get_status(),gps.get_satelite_number(),gps.get_speed());
-                //pc.printf("%f,%f,%d,%f\r\n",toDegrees(imuFilter.getRoll()),toDegrees(imuFilter.getPitch()),scp1000.readPressure(), scp1000.readTemperature());
-                pc.printf("\n\r");
+                //pc.printf("time:%s,latitude:%f,longitude:%f,status:%c,satelite:%d,speed:%f\r\n",gps.get_time(),gps.get_latitude(),gps.get_longitude(),gps.get_status(),gps.get_satelite_number(),gps.get_speed());
+                //pc.printf("\n\r");
                 pc_flg =0;
             }
     }
--- a/myCAN.lib	Sat Jul 27 10:01:33 2013 +0000
+++ b/myCAN.lib	Fri Aug 16 08:23:45 2013 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/YSB/code/myCAN_logger/#89073e0112db
+http://mbed.org/users/YSB/code/myCAN_logger/#3804d83c7377
--- a/nmea0813.lib	Sat Jul 27 10:01:33 2013 +0000
+++ b/nmea0813.lib	Fri Aug 16 08:23:45 2013 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/YSB/code/nmea0813/#84d63345eb80
+http://mbed.org/users/YSB/code/nmea0813/#7be9581d0734