Quad X Type Multicopter

Dependencies:   IAP

Revision:
3:27407c4984cf
Parent:
2:59ac9df97701
Child:
4:4060309b9cc0
--- a/config.cpp	Fri Nov 15 20:53:36 2013 +0000
+++ b/config.cpp	Thu Feb 13 16:07:07 2014 +0000
@@ -92,11 +92,13 @@
                 break;
             case CALIBURATE+1:        //Calibrate Transmitter
                 LCD_printf("Start Calibrate");
+                wait(1);
                 for(i=0; i<4; i++)  {
                     conf.Stick_Ref[i] = 0;
                 }
                 for(i=0; i<16; i++) {
-                    wait(0.3);
+                    wait(0.03);
+                    Get_Stick_Pos();                   
                     conf.Stick_Ref[ROL] += AIL;
                     conf.Stick_Ref[PIT] += ELE;
                     conf.Stick_Ref[YAW] += RUD;
@@ -193,21 +195,21 @@
                 hmax = 3;
                 break;
             case ACCELCORRECT+1:
-                Param_Set_Prompt1("Accel>ROL",&conf.Accel_Ref[ROL],2,-10.0,10.0f,0.01f,sw);
+                Param_Set_Prompt1("Accel>Rol",&conf.Accel_Ref[ROL],2,-10.0,10.0f,0.001f,sw);
                 break;
             case ACCELCORRECT+2:
-                Param_Set_Prompt1("Accel>PIT",&conf.Accel_Ref[PIT],2,-10.0,10.0f,0.01f,sw);
+                Param_Set_Prompt1("Accel>Pitch",&conf.Accel_Ref[PIT],2,-10.0,10.0f,0.001f,sw);
                 break;
             case ACCELCORRECT+3:
-                Param_Set_Prompt1("Accel>YAW",&conf.Accel_Ref[YAW],3,-10.0,10.0f,0.01f,sw);
+                Param_Set_Prompt1("Accel>Yaw",&conf.Accel_Ref[YAW],3,-10.0,10.0f,0.001f,sw);
                 break;
             case PIDSET:        //PID Setting
                 LCD_printf("PID Setting");
                 Set_Arrow(1);
-                hmax = 8;
+                hmax = 9;
                 break;
             case PIDSET+1:
-                Param_Set_Prompt1("PID>RoolPitch>kp",&conf.kp[0],2,0.00f,5.00f,0.01f,sw);
+                Param_Set_Prompt1("PID>RoolPitch>kp",&conf.kp[0],2,0.00f,15.00f,0.01f,sw);
                 conf.kp[1] = conf.kp[0];
                 break;
             case PIDSET+2:                               
@@ -219,7 +221,7 @@
                 conf.kd[1] = conf.kd[0];
                 break;
             case PIDSET+4:
-                Param_Set_Prompt1("PID>YAW>kp",&conf.kp[2],2,0.00f,5.00f,0.01f,sw);
+                Param_Set_Prompt1("PID>YAW>kp",&conf.kp[2],2,0.00f,15.00f,0.01f,sw);
                 break;
             case PIDSET+5:                               
                 Param_Set_Prompt1("PID>YAW>ki",&conf.ki[2],2,0.00f,5.00f,0.01f,sw);
@@ -228,10 +230,13 @@
                 Param_Set_Prompt1("PID>YAW>kd",&conf.kd[2],2,0.00f,5.00f,0.01f,sw);
                 break;
             case PIDSET+7:                                
+                Param_Set_Prompt1("PID Interval",&conf.PID_Interval,2,0.002f,0.015f,0.001f,sw);
+                break;
+            case PIDSET+8:                                
                 Param_Set_Prompt1("PID Limit",&conf.PID_Limit,2,0.00f,400.00f,10.00f,sw);
                 break;
-            case PIDSET+8:                                
-                Param_Set_Prompt1("Integral Limit",&conf.Integral_Limit,3,0.00f,100.00f,1.00f,sw);
+            case PIDSET+9:                                
+                Param_Set_Prompt1("differential Lim",&conf.Differential_Limit,3,0.00f,300.00f,10.00f,sw);
                 break;
             case STICKMIX:        //Set Stick Mixing
                 LCD_printf("Set Stick Mixing");
@@ -278,32 +283,37 @@
                 hmax = 7;
                 for ( i=0; i<3; i++ )   {
                     pid[i].init(conf.kp[i],conf.ki[i],conf.kd[i]*(float)abs(Stick[GAIN])/50.0
-                            ,conf.PID_Limit,conf.Integral_Limit);
+                            ,conf.PID_Limit,conf.Differential_Limit);
                     Angle[i] = 0;
                 }
                 break;
             case DISPSENSOR+1:        //Gyro
-                Get_Gyro();
+//                Get_Gyro();
+                if ( conf.Gyro_Dir[3] ==1 ) i2c.angular(&x,&y,&z);
+                else i2c.angular(&y,&x,&z);
+                x -= Gyro_Ref[0];
+                y -= Gyro_Ref[1];
+                z -= Gyro_Ref[2];
                 LCD_locate(0,0);
-                sprintf(str,"[Gyro]X=%5.1f",Gyro[ROL]);
+                sprintf(str,"[Gyro]X=%5.1f",x);
                 LCD_printf(str);
                 LCD_locate(0,1);
-                sprintf(str,"y=%5.1f,Z=%5.1f",Gyro[PIT],Gyro[YAW]);
+                sprintf(str,"y=%5.1f,Z=%5.1f",y,z);
                 LCD_printf(str);
                 ret_mode = 'R';
                 break;
             case DISPSENSOR+2:            //Accelerometer
-                Get_Accel();
+//                Get_Accel();
                 if ( conf.Gyro_Dir[3] ==1 ) i2c.Acceleration(&x,&y,&z);
                 else i2c.Acceleration(&y,&x,&z);
                 x -= conf.Accel_Ref[0];
                 y -= conf.Accel_Ref[1];
                 z -= conf.Accel_Ref[2];
                 LCD_locate(0,0);
-                sprintf(str,"[Accel]X=%5.1f",x);
+                sprintf(str,"[Accel]X=%5.2f",x);
                 LCD_printf(str);
                 LCD_locate(0,1);
-                sprintf(str,"Y=%5.1f,Z=%5.1f",y,z);
+                sprintf(str,"Y=%5.2f,Z=%5.2f",y,z);
                 LCD_printf(str);
 //                Set_Arrow(2);
                 ret_mode = 'R';
@@ -336,7 +346,7 @@
                 Get_Pressure();
                 elaps.stop();
                 LCD_locate(0,0);
-                sprintf(str,"Press=%9.3f",Press/4096);
+                sprintf(str,"Press=%9.1f",Press/4096);
                 LCD_printf(str);
                 LCD_locate(0,1);
                 sprintf(str,"Elaps=%6d",elaps.read_us());
@@ -439,9 +449,9 @@
                 hmax = 3;
                 break;
             case CONFRESET+1:
-                LCD_printf("If want to reset");
+                LCD_printf("Ailron stick");
                 LCD_locate(0,1);
-                LCD_printf("Aileron right");
+                LCD_printf("Move to right");
                 Set_Arrow(2);
                 break;
             case CONFRESET+2:       //E2PROM reset
@@ -581,7 +591,7 @@
     LCD_locate(0,0);
     LCD_printf(hd);
     LCD_locate(0,1);
-    sprintf(str,"%7.2f",*num);
+    sprintf(str,"%7.3f",*num);
     LCD_printf(str);
     Set_Arrow(arrow);
     switch ( sw ) {
@@ -651,3 +661,11 @@
 
 
 
+
+
+
+
+
+
+
+