Dependencies:   mbed MPU6050_2 SDFileSystem3 HCSR04_2

Revision:
46:ebbe73af073d
Parent:
45:eebdf6fa7b15
Child:
47:b3d78207b08f
--- a/main.cpp	Wed Sep 26 23:43:14 2018 +0000
+++ b/main.cpp	Sat Dec 22 06:27:25 2018 +0000
@@ -159,1579 +159,14 @@
 BombingMode bombing_mode = Takeoff;
 
 static int16_t autopwm[8] = {1455,1450,1176,1628,1417,1452};
-/*
-//1号機
-static int16_t trimpwm[6] = {1580,1600,1176,1404,1440,1448};
-int16_t maxpwm[6] = {1796,1936,1848,1740,1820,1856};
-int16_t minpwm[6] = {1182,1265,1176,1068,1180,1176};
-const int16_t reverce[4] = {Reverce_falfalla[0],Reverce_falfalla[1],Reverce_falfalla[2],Reverce_falfalla[3]};
-*/
 
-//2号機
-
-static int16_t trimpwm[6] = {1455,1450,1176,1628,1417,1452};
-int16_t maxpwm[6] = {1672,1786,1848,1964,1712,1860};
-int16_t minpwm[6] = {1057,1115,1176,1292,1180,1180};
-const int16_t reverce[4] = {Reverce_falfalla[0],Reverce_falfalla[1],Reverce_falfalla[2],Reverce_falfalla[3]};
-
-
-int16_t oldTHR = 1000;
-
-int16_t g_AIL_L_Ratio_rightloop = 0.5;
-
-
-static float nowAngle[3] = {0,0,0};
-const float trimAngle[3] = {0.0, 0.0, 0.0};
-const float maxAngle[2] = {90, 90};
-const float minAngle[2] = {-90, -90};
-
-float FirstROLL = 0.0, FirstPITCH = 0.0 ,FirstYAW = 0.0;
-
-unsigned int g_distance;
-Ticker USsensor;
-static char g_buf[16];
-char g_landingcommand='Z';
-float g_SerialTargetYAW;
-
-Timer t;
-Timer t2;
-Timeout RerurnChickenServo1;
-Timeout RerurnChickenServo2;
-
-/*-----関数のプロトタイプ宣言-----*/
-void setup();
-void loop();
-
-void Init_PWM();
-void Init_servo();              //サーボ初期化
-void Init_sbus();               //SBUS初期化
-void Init_sensors();
-void DisplayClock();            //クロック状態確認
-
-//センサの値取得
-void SensingMPU();
-void UpdateDist();
-
-//void offsetRollPitch(float FirstROLL, float FirstPITCH);
-//void TransYaw(float FirstYAW);
-float TranslateNewYaw(float beforeYaw,  float newzeroYaw);
-void UpdateTargetAngle(float targetAngle[3]);
-void CalculateControlValue(float targetAngle[3], float controlValue[3]);
-void UpdateAutoPWM(float controlValue[3]);
-void ConvertPWMintoRAD(float targetAngle[3]);
-inline float CalcRatio(float value, float trim, float limit);
-bool CheckSW_Up(Channel ch);
-int16_t ThresholdMaxMin(int16_t value, int16_t max, int16_t min);
-inline int16_t SetTHRinRatio(float ratio);
-
-//sbus割り込み
-void Update_PWM();              //マニュアル・自動モードのpwmデータを整形しpwm変数に入力
-void Output_PWM(int16_t pwm[6]);    //pwmをサーボへ出力
-
-//シリアル割り込み
-void getSF_Serial();
-float ConvertByteintoFloat(char high, char low);
-
-
-//SD設定
-int GetParameter(FILE *fp, const char *paramName,char parameter[]);
-int SetOptions(float *g_kpELE, float *g_kiELE, float *g_kdELE,
-               float *g_kpRUD, float *g_kiRUD, float *g_kdRUD,
-               float *g_rightloopROLL, float *g_rightloopPITCH,
-               float *g_leftloopROLL, float *g_leftloopPITCH,
-               float *g_gostraightROLL, float *g_gostraightPITCH,
-               float *g_takeoffTHR, float *g_loopTHR,
-               float *g_rightloopROLLshort, float *g_rightloopPITCHshort,
-               float *g_leftloopROLLshort, float *g_leftloopPITCHshort,
-               float *g_glideloopROLL, float *g_glideloopPITCH,
-               float *g_kpAIL, float *g_kiAIL, float *g_kdAIL,
-               int *g_rightloopRUD, int *g_rightloopshortRUD,
-               int *g_leftloopRUD, int *g_leftloopshortRUD,
-               int *g_glideRUD,
-               float *g_rightloopROLL_approach,float *g_leftloopROLL_approach,
-               int *g_rightloopRUD_approach,int *g_leftloopRUD_approach,
-               float *g_rightloopPITCH_approach,float *g_leftloopPITCH_approach
-               );
-//switch2割り込み
-void ResetTrim();
-
-//自動操縦
-void UpdateTargetAngle_GoStraight(float targetAngle[3]);
-void UpdateTargetAngle_GoStraight_zero(float targetAngle[3]);       //着陸時にスロットルが0の時の直進
-void UpdateTargetAngle_Rightloop(float targetAngle[3]);
-void UpdateTargetAngle_Rightloop_short(float targetAngle[3]);
-void UpdateTargetAngle_Rightloop_zero(float targetAngle[3]);      //着陸時にスロットルが0の時の右旋回
-void UpdateTargetAngle_Leftloop(float targetAngle[3]);
-void UpdateTargetAngle_Leftloop_short(float targetAngle[3]);
-void UpdateTargetAngle_Leftloop_zero(float targetAngle[3]);     //着陸時にスロットルが0の時の左旋回
-void UpdateTargetAngle_Moebius(float targetAngle[3]);
-void UpdateTargetAngle_Glide(float targetAngle[3]);
-void UpdateTargetAngle_Takeoff(float targetAngle[3]);
-void UpdateTargetAngle_Approach(float targetAngle[3]);
-void Take_off_and_landing(float targetAngle[3]);
-
-int Rotate(float targetAngle[3], float TargetYAW);
-
-//投下
-void Chicken_Drop();
-void ReturnChickenServo1();
-void ReturnChickenServo2();
-
-//超音波による高度補正
-void checkHeight(float targetAngle[3]);
-void UpdateTargetAngle_NoseUP(float targetAngle[3]);
-void UpdateTargetAngle_NoseDOWN(float targetAngle[3]);
-
-//デバッグ用
-void Sbusprintf();
-void DebugPrint();
-
-/*---関数のプロトタイプ宣言終わり---*/
-
-int main()
-{   
-    setup();
-    
-    
+int main(void){
     while(1){
-        
-        loop();
-        
-        
-        NVIC_DisableIRQ(USART1_IRQn);
-        if(!CheckSW_Up(Ch7)){
-            led3=0;
-        }else{
-            led3=1;
-        }
-        NVIC_EnableIRQ(USART1_IRQn);
-    }
-    
-}
-
-void setup(){
-    //buzzer = 0;
-    led1 = 1;
-    led2 = 1;
-    led3 = 1;
-    led4 = 1;
-    
-    SetOptions(&g_kpELE, &g_kiELE, &g_kdELE,
-               &g_kpRUD, &g_kiRUD, &g_kdRUD,
-               &g_rightloopROLL, &g_rightloopPITCH,
-               &g_leftloopROLL, &g_leftloopPITCH,
-               &g_gostraightROLL, &g_gostraightPITCH,
-               &g_takeoffTHR, &g_loopTHR,
-               &g_rightloopROLLshort, &g_rightloopPITCHshort,
-               &g_leftloopROLLshort, &g_leftloopPITCHshort,
-               &g_glideloopROLL, &g_glideloopPITCH,
-               &g_kpAIL, &g_kiAIL,&g_kdAIL,
-               &g_rightloopRUD, &g_rightloopshortRUD,
-               &g_leftloopRUD, &g_leftloopshortRUD,
-               &g_glideloopRUD,
-               &g_rightloopROLL_approach,&g_leftloopROLL_approach,
-               &g_rightloopRUD_approach,&g_leftloopRUD_approach,
-               &g_rightloopPITCH_approach,&g_leftloopPITCH_approach
-               );    
-    
-        
-    Init_PWM();
-    Init_servo();
-    Init_sbus();    
-    Init_sensors();
-    //switch2.rise(ResetTrim);
-   
-    USsensor.attach(&UpdateDist, 0.05);
-    
-    NVIC_SetPriority(USART1_IRQn,0);
-    NVIC_SetPriority(EXTI0_IRQn,1);
-    NVIC_SetPriority(TIM5_IRQn,2);
-    NVIC_SetPriority(EXTI9_5_IRQn,3);
-    DisplayClock();
-    t.start();
-    
-    
-    pc.printf("MPU calibration start\r\n");
-    
-    float offsetstart = t.read();
-    while(t.read() - offsetstart < 26){
-        SensingMPU();
-        for(uint8_t i=0; i<3; i++) pc.printf("%3.2f\t",nowAngle[i]);
-        pc.printf("\r\n");
-        led1 = !led1;
-        led2 = !led2;
-        led3 = !led3;
-        led4 = !led4;
-    }
-    
-     pc.attach(getSF_Serial, Serial::RxIrq);
-     NVIC_SetPriority(USART2_IRQn,4);
-    
-    FirstROLL = nowAngle[ROLL];
-    FirstPITCH = nowAngle[PITCH];
-    nowAngle[ROLL] -=FirstROLL;
-    nowAngle[PITCH] -=FirstPITCH;
-    
-    led1 = 0;
-    led2 = 0;
-    led3 = 0;
-    led4 = 0;
-    wait(0.2);
-    
-    
-    pc.printf("All initialized\r\n");
-}
-
-void loop(){
-    static float targetAngle[3] = {0.0, 0.0, 0.0}, controlValue[2] = {0.0, 0.0};
-    SensingMPU();
-    UpdateTargetAngle(targetAngle);
-    CalculateControlValue(targetAngle, controlValue);
-    UpdateAutoPWM(controlValue);
-   
-    
-    //NVIC_SetPriority(TIM5_IRQn,4);
-    //NVIC_SetPriority(USART2_IRQn,2);
-    
-    wait_ms(23);
-    
-    //NVIC_SetPriority(TIM5_IRQn,2);
-    //NVIC_SetPriority(USART2_IRQn,4);
-    
-    
-   // pc.printf("6\r\n");
-    //NVIC_DisableIRQ(USART2_IRQn);
-    //pc.printf("%c",g_landingcommand);
-    //NVIC_EnableIRQ(USART2_IRQn);
-#if DEBUG_PRINT_INLOOP
-    //Sbusprintf();
-    DebugPrint();
-#endif
-}
-
-//サーボ初期化関数
-void Init_servo(){
-    
-    servo1.period_ms(14);
-    servo1.pulsewidth_us(trimpwm[AIL_R]);
-    
-    servo2.period_ms(14);
-    servo2.pulsewidth_us(trimpwm[ELE]);
-    
-    servo3.period_ms(14);
-    servo3.pulsewidth_us(trimpwm[THR]);
-    
-    servo4.period_ms(14);
-    servo4.pulsewidth_us(trimpwm[RUD]);
-    
-    servo5.period_ms(14);
-    servo5.pulsewidth_us(trimpwm[DROP]);
-
-    servo6.period_ms(14);
-    servo6.pulsewidth_us(trimpwm[AIL_L]);
-
-    pc.printf("servo initialized\r\n");
-}
-
-//Sbus初期化
-void Init_sbus(){
-    sbus.initialize();
-    sbus.setLastfuncPoint(Update_PWM);
-    sbus.startInterrupt();
-}
-
-void Init_sensors(){
-    if(mpu6050.setup() == -1){
-        pc.printf("failed initialize\r\n");
-        while(1){
-            led1 = 1; led2 = 0; led3 = 1; led4 = 0;
-            wait(1);
-            led1 = 0; led2 = 1; led3 = 0; led4 = 1;
-            wait(1);
-        }
-    }
-}
-
-void Init_PWM(){
-    pc.printf("PWM initialized\r\n");
-}
-
-void DisplayClock(){
-    pc.printf("System Clock = %d[MHz]\r\n", HAL_RCC_GetSysClockFreq()/1000000);
-    pc.printf("HCLK Clock   = %d[MHz]\r\n", HAL_RCC_GetHCLKFreq()/1000000);
-    pc.printf("PCLK1 Clock  = %d[MHz]\r\n", HAL_RCC_GetPCLK1Freq()/1000000);
-    pc.printf("PCLK2 Clock  = %d[MHz]\r\n", HAL_RCC_GetPCLK2Freq()/1000000);
-    pc.printf("\r\n");
-}
-
-void UpdateTargetAngle(float targetAngle[3]){
-    
-    
-    static int16_t count_op = 0;
-#if DEBUG_SEMIAUTO    
-    switch(operation_mode){
-        case StartUp:
-            if(!CheckSW_Up(Ch7) && CheckSW_Up(Ch8)){
-                count_op++;
-                if(count_op > changeModeCount){
-                    operation_mode = SemiAuto;
-                    pc.printf("Goto SemiAuto mode\r\n");
-                    count_op = 0;
-                }
-            }else count_op = 0;
-            break;
-
-        case SemiAuto:
-        /*  大会用では以下のif文を入れてoperation_modeを変える
-            if(CheckSW_Up(Ch6)){
-                count_op++;
-                if(count_op>changeModeCount){
-                    output_status = XXX;
-                    led2 = 0;
-                    pc.printf("Goto XXX mode\r\n");
-                    count_op = 0;
-                }else count_op = 0;
-                ConvertPWMintoRAD(targetAngle);
-            }
-        */
-            ConvertPWMintoRAD(targetAngle);
-            break;
-
-        default:
-            operation_mode = SemiAuto;
-            break;
-    }
-
-#else
-
-    switch(operation_mode){
-        case StartUp:
-            if(!CheckSW_Up(Ch7) && !CheckSW_Up(Ch8)){        //ch7;自動・手動切り替え ch8;自動操縦モード切替
-                count_op++;
-                if(count_op > changeModeCount){
-                    operation_mode = RightLoop;
-                    pc.printf("Goto RightLoop mode\r\n");
-                    count_op = 0;
-                }
-            }else count_op = 0;
-            break;
-
-        case RightLoop:
-            if(!CheckSW_Up(Ch7) && CheckSW_Up(Ch8)){
-                count_op++;
-                if(count_op > changeModeCount){
-                    operation_mode = LeftLoop;
-                    pc.printf("Goto LeftLoop mode\r\n");
-                    count_op = 0;
-                }
-            }else count_op = 0;
-            UpdateTargetAngle_Rightloop(targetAngle);
-            
-            break;
-
-        case LeftLoop:
-            if(!CheckSW_Up(Ch7) && !CheckSW_Up(Ch8)){
-                count_op++;
-                if(count_op > changeModeCount){
-                    operation_mode = GoStraight;
-                    pc.printf("Goto GoStraight mode\r\n");
-                    count_op = 0;
-                }
-            }else count_op = 0;
-            UpdateTargetAngle_Leftloop(targetAngle);
-            break;
-        
-        case GoStraight:
-            if(!CheckSW_Up(Ch7) && CheckSW_Up(Ch8)){
-                count_op++;
-                if(count_op > changeModeCount){
-                    operation_mode = Moebius;
-                    pc.printf("Goto Moebius mode\r\n");
-                    count_op = 0;
-                }
-            }else count_op = 0;
-            UpdateTargetAngle_GoStraight(targetAngle);
-            break;
-
-        case Moebius:
-            if(!CheckSW_Up(Ch7) && !CheckSW_Up(Ch8)){
-                count_op++;
-                if(count_op > changeModeCount){
-                    operation_mode = Glide;
-                    pc.printf("Goto Glide mode\r\n");
-                    count_op = 0;
-                }
-            }else count_op = 0;
-            UpdateTargetAngle_Moebius(targetAngle);
-            break;
-
-        case Glide:
-            if(!CheckSW_Up(Ch7) && CheckSW_Up(Ch8)){
-                count_op++;
-                if(count_op > changeModeCount){
-                    operation_mode = BombwithPC;
-                    pc.printf("Goto Bombing mode\r\n");
-                    pc.attach(getSF_Serial, Serial::RxIrq);
-                    count_op = 0;
-                }
-            }else count_op = 0;
-            UpdateTargetAngle_Glide(targetAngle);
-            break;
-
-        case BombwithPC:
-            if(!CheckSW_Up(Ch7) && !CheckSW_Up(Ch8)){
-                count_op++;
-                if(count_op > changeModeCount){
-                    operation_mode = RightLoop;
-                    pc.printf("Goto RightLoop mode\r\n");
-                    pc.attach(NULL, Serial::RxIrq);
-                    count_op = 0;
-                }
-            }else count_op = 0;
-            Take_off_and_landing(targetAngle);
-            break;
-
-        default:
-            operation_mode = StartUp;
-            break;
-    }
-#endif
-
-    if(CheckSW_Up(Ch7)){
-            output_status = Auto;
-            led1 = 1;
-        }else{
-            output_status = Manual;
-            led1 = 0;
-        }
-
-   
-}
-
-int GetParameter(FILE *fp, const char *paramName,char parameter[]){
-    int i=0, j=0;
-    int strmax = 200;
-    char str[strmax];
-
-    rewind(fp); //ファイル位置を先頭に
-    while(1){
-        if (fgets(str, strmax, fp) == NULL) {
-            return 0;
-        }
-        if (!strncmp(str, paramName, strlen(paramName))) {
-            while (str[i++] != '=') {}
-            while (str[i] != '\n') {
-                    parameter[j++] = str[i++];
-            }
-            parameter[j] = '\0';
-            return 1;
-        }
-    }
-}
-
-
-//sdによる設定
-int SetOptions(float *g_kpELE, float *g_kiELE, float *g_kdELE,
-               float *g_kpRUD, float *g_kiRUD, float *g_kdRUD,
-               float *g_rightloopROLL, float *g_rightloopPITCH,
-               float *g_leftloopROLL, float *g_leftloopPITCH,
-               float *g_gostraightROLL, float *g_gostraightPITCH,
-               float *g_takeoffTHR, float *g_loopTHR,
-               float *g_rightloopROLLshort, float *g_rightloopPITCHshort,
-               float *g_leftloopROLLshort, float *g_leftloopPITCHshort,
-               float *g_glideloopROLL, float *g_glideloopPITCH,
-               float *g_kpAIL, float *g_kiAIL, float *g_kdAIL,
-               int *g_rightloopRUD, int *g_rightloopshortRUD,
-               int *g_leftloopRUD, int *g_leftloopshortRUD,
-               int *g_glideloopRUD,
-               float *g_rightloopROLL_approach,float *g_leftloopROLL_approach,
-               int *g_rightloopRUD_approach,int *g_leftloopRUD_approach,
-               float *g_rightloopPITCH_approach,float *g_leftloopPITCH_approach
-               ){
-
-    pc.printf("SDsetup start.\r\n");    
-    
-    FILE *fp;
-    char parameter[40]; //文字列渡す用の配列
-    int SDerrorcount = 0;  //取得できなかった数を返す
-    const char *paramNames[] = { 
-        "KP_ELEVATOR",
-        "KI_ELEVATOR",
-        "KD_ELEVATOR",
-        "KP_RUDDER",
-        "KI_RUDDER",
-        "KD_RUDDER",
-        "RIGHTLOOP_ROLL",
-        "RIGHTLOOP_PITCH",
-        "LEFTLOOP_ROLL",
-        "LEFTLOOP_PITCH",
-        "GOSTRAIGHT_ROLL",
-        "GOSTRAIGHT_PITCH",
-        "TAKEOFF_THR_RATE",
-        "LOOP_THR_RATE",
-        "RIGHTLOOP_ROLL_SHORT",
-        "RIGHTLOOP_PITCH_SHORT",
-        "LEFTLOOP_ROLL_SHORT",
-        "LEFTLOOP_PITCH_SHORT",
-        "AUTOGLIDE_ROLL",
-        "AUTOGLIDE PITCH",
-        "KP_AILERON",
-        "KI_AILERON",
-        "KD_AILERON",
-        "RIGHTLOOP_RUDDER",
-        "RIGHTLOOPSHORT_RUDDER",
-        "LEFTLOOP_RUDDER",
-        "LEFTLOOPSHORT_RUDDER",
-        "GLIDELOOP_RUDDER",
-        "RIGHTLOOP_ROLL_APPROACH",        
-        "LEFTLOOP_ROLL_APPROACH",        
-        "RIGHTLOOP_RUDDER_APPROACH",        
-        "LEFTLOOP_RUDDER_APPROACH",
-        "RIGHTLOOP_PITCH_APPROACH",
-        "LEFTLOOP_PITCH_APPROACH",            
-    };
-
-    fp = fopen("/sd/option.txt","r");
-    
-    if(fp != NULL){ //開けたら
-        pc.printf("File was openned.\r\n");
-        if(GetParameter(fp,paramNames[0],parameter)) *g_kpELE = atof(parameter);
-        else{                                        *g_kpELE = KP_ELE;
-                                                     SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[1],parameter)) *g_kiELE = atof(parameter);
-        else{                                        *g_kiELE = KI_ELE;
-                                                      SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[2],parameter)) *g_kdELE = atof(parameter);
-        else{                                        *g_kdELE = KD_ELE;
-                                                     SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[3],parameter)) *g_kpRUD = atof(parameter);
-        else{                                        *g_kpRUD = KP_RUD;
-                                                      SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[4],parameter)) *g_kiRUD = atof(parameter);
-        else{                                        *g_kiRUD = KI_RUD;
-                                                      SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[5],parameter)) *g_kdRUD = atof(parameter);
-        else{                                        *g_kdRUD = KD_RUD;
-                                                      SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[6],parameter)) *g_rightloopROLL = atof(parameter);
-        else{                                        *g_rightloopROLL = RIGHT_ROLL;
-                                                      SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[7],parameter)) *g_rightloopPITCH = atof(parameter);
-        else{                                        *g_rightloopPITCH = RIGHT_PITCH;
-                                                      SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[8],parameter)) *g_leftloopROLL = atof(parameter);
-        else{                                        *g_leftloopROLL = LEFT_ROLL;
-                                                      SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[9],parameter)) *g_leftloopPITCH = atof(parameter);
-        else{                                         *g_leftloopPITCH = LEFT_PITCH;
-                                                      SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[10],parameter)) *g_gostraightROLL = atof(parameter);
-        else{                                         *g_gostraightROLL = STRAIGHT_ROLL;
-                                                      SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[11],parameter)) *g_gostraightPITCH = atof(parameter);
-        else{                                         *g_gostraightPITCH = STRAIGHT_PITCH;
-                                                      SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[12],parameter)) *g_takeoffTHR = atof(parameter);
-        else{                                         *g_takeoffTHR = TAKEOFF_THR;
-                                                      SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[13],parameter)) *g_loopTHR = atof(parameter);
-        else{                                         *g_loopTHR = LOOP_THR;
-                                                      SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[14],parameter)) *g_rightloopROLLshort = atof(parameter);
-        else{                                         *g_rightloopROLLshort = RIGHT_ROLL_SHORT;
-                                                      SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[15],parameter)) *g_rightloopPITCHshort = atof(parameter);
-        else{                                         *g_rightloopPITCHshort = RIGHT_PITCH_SHORT;
-                                                      SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[16],parameter)) *g_leftloopROLLshort = atof(parameter);
-        else{                                         *g_leftloopROLLshort = LEFT_ROLL_SHORT;
-                                                      SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[17],parameter)) *g_leftloopPITCHshort = atof(parameter);
-        else{                                         *g_leftloopPITCHshort = LEFT_PITCH_SHORT;
-                                                      SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[18],parameter)) *g_glideloopROLL = atof(parameter);
-        else{                                         *g_glideloopROLL = GLIDE_ROLL;
-                                                      SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[19],parameter)) *g_glideloopPITCH = atof(parameter);
-        else{                                         *g_glideloopPITCH = GLIDE_PITCH;
-                                                      SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[20],parameter)) *g_kpAIL = atof(parameter);
-        else{                                         *g_kpAIL = KP_AIL;
-                                                      SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[21],parameter)) *g_kiAIL = atof(parameter);
-        else{                                         *g_kiAIL = KI_AIL;
-                                                      SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[22],parameter)) *g_kdAIL = atof(parameter);
-        else{                                         *g_kdAIL = KP_AIL;
-                                                      SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[23],parameter)) *g_rightloopRUD = atof(parameter);
-        else{                                         *g_rightloopRUD = RIGHTLOOP_RUD;
-                                                      SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[24],parameter)) *g_rightloopshortRUD = atof(parameter);
-        else{                                         *g_rightloopshortRUD = RIGHTLOOPSHORT_RUD;
-                                                      SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[25],parameter)) *g_leftloopRUD = atof(parameter);
-        else{                                         *g_leftloopshortRUD = LEFTLOOP_RUD;
-                                                      SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[26],parameter)) *g_leftloopshortRUD = atof(parameter);
-        else{                                         *g_leftloopshortRUD = LEFTLOOPSHORT_RUD;
-                                                      SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[27],parameter)) *g_glideloopRUD = atof(parameter);
-        else{                                         *g_glideloopRUD = GLIDELOOP_RUD;
-                                                      SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[28],parameter)) *g_rightloopROLL_approach = atof(parameter);
-        else{                                         *g_rightloopROLL_approach  = RIGHTLOOPROLL_APPROACH;
-                                                      SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[29],parameter)) *g_leftloopROLL_approach= atof(parameter);
-        else{                                         *g_leftloopROLL_approach = LEFTLOOPROLL_APPROACH;
-                                                      SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[30],parameter)) *g_rightloopRUD_approach = atof(parameter);
-        else{                                         *g_rightloopRUD_approach = RIGHTLOOPRUD_APPROACH;
-                                                      SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[31],parameter)) *g_leftloopRUD= atof(parameter);
-        else{                                         *g_leftloopRUD= LEFTLOOPRUD_APPROACH;
-                                                      SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[32],parameter)) *g_rightloopPITCH_approach = atof(parameter);
-        else{                                         *g_rightloopPITCH_approach = RIGHTLOOPPITCH_APPROACH;
-                                                      SDerrorcount++;
-        }
-        if(GetParameter(fp,paramNames[33],parameter)) *g_leftloopPITCH_approach = atof(parameter);
-        else{                                         *g_leftloopPITCH_approach = LEFTLOOPPITCH_APPROACH;
-                                                      SDerrorcount++;
+        printf("Hello World\r\n");
+        //servo1.period_ms(14);
+        servo1.pulsewidth_us(1300);
+        wait(1);
+        //servo1.period_ms(14);
+        servo1.pulsewidth_us(1200);
         }
-        
-        fclose(fp);
-
-    }else{  //ファイルがなかったら
-        pc.printf("fp was null.\r\n");
-        *g_kpELE = KP_ELE;
-        *g_kiELE = KI_ELE;
-        *g_kdELE = KD_ELE;
-        *g_kpRUD = KP_RUD;
-        *g_kiRUD = KI_RUD;
-        *g_kdRUD = KD_RUD;
-        *g_rightloopROLL = RIGHT_ROLL;
-        *g_rightloopPITCH = RIGHT_PITCH;
-        *g_leftloopROLL = LEFT_ROLL;
-        *g_leftloopPITCH = LEFT_PITCH;
-        *g_gostraightROLL = STRAIGHT_ROLL;
-        *g_gostraightPITCH = STRAIGHT_PITCH;
-        *g_takeoffTHR = TAKEOFF_THR;
-        *g_loopTHR = LOOP_THR;
-        *g_kpAIL = KP_AIL; //パラメータ変えるのお忘れなく!!
-        *g_kiAIL = KI_AIL;
-        *g_kdAIL = KD_AIL;
-        *g_rightloopRUD = RIGHTLOOP_RUD;
-        *g_rightloopshortRUD = RIGHTLOOPSHORT_RUD;
-        *g_leftloopRUD = LEFTLOOP_RUD;
-        *g_leftloopshortRUD = LEFTLOOPSHORT_RUD;
-        *g_glideloopRUD = GLIDELOOP_RUD;
-        *g_rightloopROLL_approach = RIGHTLOOPROLL_APPROACH;
-        *g_leftloopROLL_approach = LEFTLOOPROLL_APPROACH;
-        *g_rightloopRUD_approach = RIGHTLOOPRUD_APPROACH;
-        *g_leftloopRUD_approach = LEFTLOOPRUD_APPROACH;
-        *g_rightloopPITCH_approach = RIGHTLOOPPITCH_APPROACH;
-        *g_leftloopPITCH_approach = LEFTLOOPPITCH_APPROACH;
-        
-        SDerrorcount = -1;
-    }
-    pc.printf("SDsetup finished.\r\n");
-    if(SDerrorcount == 0)  pc.printf("setting option is success\r\n");
-    else if(SDerrorcount == -1) pc.printf("ERROR 1. cannot open option\r\n");
-    else if(SDerrorcount > 0)  pc.printf("ERROR 2. reading parameter is failed[%d]\r\n",SDerrorcount); 
-    
-    pc.printf("kpELE = %f, kiELE = %f, kdELE = %f\r\n", *g_kpRUD, *g_kiRUD, *g_kdRUD);
-    pc.printf("kpRUD = %f, kiRUD = %f, kdRUD = %f\r\n", *g_kpELE, *g_kiELE, *g_kdELE);
-    pc.printf("rightloopROLL = %f, rightloopPITCH = %f\r\n", *g_rightloopROLL, *g_rightloopPITCH);
-    pc.printf("leftloopROLL = %f, g_leftloopPITCH =  %f\r\n", *g_leftloopROLL, *g_leftloopPITCH);
-    pc.printf("gostraightROLL = %f, g_gostraightPITCH = %f\r\n", *g_gostraightROLL, *g_gostraightPITCH);
-    pc.printf("g_takeoffTHR = %f, g_loopTHR = %f\r\n", *g_takeoffTHR, *g_loopTHR);
-    pc.printf("rightloopROLLshort = %f, rightloopPITCHshort = %f\r\n", *g_rightloopROLLshort, *g_rightloopPITCHshort);
-    pc.printf("leftloopROLLshort = %f, g_leftloopPITCHshort =  %f\r\n", *g_leftloopROLLshort, *g_leftloopPITCHshort);
-    pc.printf("glideROLL = %f, glidePITCH = %f\r\n", *g_glideloopROLL, *g_glideloopPITCH);
-    pc.printf("kpAIL = %f,kiAIL = %f,kdAIL = %f\r\n ",*g_kpAIL,*g_kiAIL,*g_kdAIL);
-    pc.printf("RIGHTLOOPRUD = %d,RIGHTLOOPSHORTRUD = %d\r\n",*g_rightloopRUD,*g_rightloopshortRUD);
-    pc.printf("LEFTTLOOPRUD = %d,LEFTLOOPSHORTRUD = %d\r\n",*g_leftloopRUD,*g_leftloopshortRUD);
-    pc.printf("GLIDELOOPRUD = %d\r\n",*g_glideloopRUD);
-    pc.printf("RIGHTLOOP_ROLL_APPROACH = %f, LEFTLOOP_ROLL_APPROACH= %f\r\n",*g_rightloopROLL_approach,*g_leftloopROLL_approach);
-    pc.printf("RIGHTLOOP_RUD_APPROACH = %d, LEFTLOOP_RUD_APPROACH = %d\r\n",*g_rightloopRUD_approach,*g_leftloopRUD_approach);
-    pc.printf("RIGHTLOOP_PITCH_APPROACH = %f, LEFTLOOP_PITCH_APPROACH = %f\r\n",*g_rightloopPITCH_approach,*g_leftloopPITCH_approach);
-    
-    return SDerrorcount;
-}                  
-
-void CalculateControlValue(float targetAngle[3], float controlValue[3]){
-    
-    static int t_last;
-    int t_now;
-    float dt;
-
-    t_now = t.read_us();
-    dt = (float)((t_now - t_last)/1000000.0f) ;
-    t_last = t_now;
-
-
-    //controlValue[ROLL] = pid_RUD.calcPID(nowAngle[ROLL], targetAngle[ROLL], dt);
-    controlValue[ROLL] = pid_AIL.calcPID(nowAngle[ROLL], targetAngle[ROLL], dt);       //エルロンでロール制御   
-    controlValue[PITCH] = pid_ELE.calcPID(nowAngle[PITCH], targetAngle[PITCH], dt);
-    
-}
-
-void UpdateAutoPWM(float controlValue[3]){ 
-    NVIC_DisableIRQ(USART1_IRQn);   
-    int16_t addpwm[2]; //-500~500
-    addpwm[PITCH] = (float)GAIN_CONTROLVALUE_TO_PWM * controlValue[PITCH];    //センサ:機首下げ正    レバー:機首上げ正
-    addpwm[ROLL] = (float)GAIN_CONTROLVALUE_TO_PWM * controlValue[ROLL];           //センサ:右回転正(8月13日時点;左回転が正!)     レバー:右回転正
-    
-    autopwm[ELE] = trimpwm[ELE] + reverce[ELE] * addpwm[PITCH];                 //rewrite
-    autopwm[AIL_R] = trimpwm[AIL_R] - reverce[AIL_R] * addpwm[ROLL];
-    //autopwm[THR] = oldTHR;
-
-    autopwm[ELE] = ThresholdMaxMin(autopwm[ELE], maxpwm[ELE], minpwm[ELE]);
-    autopwm[AIL_R] = ThresholdMaxMin(autopwm[AIL_R], maxpwm[AIL_R], minpwm[AIL_R]);
-    
-    NVIC_EnableIRQ(USART1_IRQn);
-}
-
-inline float CalcRatio(float value, float trim, float limit){
-    return  (value - trim) / (limit - trim);
-}
-
-bool CheckSW_Up(Channel ch){
-    
-    if(SWITCH_CHECK < sbus.manualpwm[ch]){
-        return true;
-    }else{
-        return false;
-    }
-    
-}
-
-int16_t ThresholdMaxMin(int16_t value, int16_t max, int16_t min){
-    if(value > max) return max;
-    if(value < min) return min;
-    return value;
-}
-
-inline int16_t SetTHRinRatio(float ratio){
-    return minpwm[THR] + (int16_t)(2 * lengthdivpwm * ratio);
-}
-
-
-
-/*---SBUS割り込み処理---*/
-
-//udate_Inputで抽出したpwmデータを整形して各変数に代入する。(マニュアルモード)
-//各stabiGylo関数で算出したpwmを各変数に代入する(自動モード)
-void Update_PWM()
-{   
-    NVIC_DisableIRQ(USART1_IRQn); 
-    static int16_t pwm[6];
-    static int16_t temppwm[6]={trimpwm[0],trimpwm[1],trimpwm[2],trimpwm[3],trimpwm[4],trimpwm[5]};
-    static int16_t FailsafeCounter=0;
-    static int16_t ResetCounter=0;
-    static int16_t OKCounter=0;
-    
-    if(sbus.flg_ch_update == true){
-    
-        switch(output_status){    //マニュアルモード,自動モード,自動着陸もモードを切替
-            case Manual:
-        if(OKCounter!=0) break;
-                for(uint8_t i=0;i<6;i++){
-                    pwm[i] = sbus.manualpwm[i];  
-                }
-                oldTHR = sbus.manualpwm[THR];
-                //pc.printf("update_manual\r\n");
-                NVIC_EnableIRQ(USART1_IRQn);
-                break;
-        
-            case Auto:
-        if(OKCounter!=0) break;
-                pwm[AIL_R] = autopwm[AIL_R];               //sbus.manualpwm[AIL];
-                pwm[ELE] = autopwm[ELE];
-                pwm[THR] = autopwm[THR];
-                pwm[RUD] = autopwm[RUD];
-                pwm[DROP] = autopwm[DROP];
-                pwm[AIL_L] = autopwm[AIL_L];
- 
-                NVIC_EnableIRQ(USART1_IRQn);
-                break;
-                
-            default:
-        if(OKCounter!=0) break;
-                for(uint8_t i=0;i<6;i++){
-                    pwm[i] = sbus.manualpwm[i];
-                } //pc.printf("update_manual\r\n");
-                NVIC_EnableIRQ(USART1_IRQn);
-                break;
-        }
-        
-        for(uint8_t i=0;i<6;i++){
-            if(pwm[i]<1000 || pwm[i]>2000) pwm[i]=temppwm[i];
-            temppwm[i]=pwm[i];
-        }
-        
-    }
-    //else(sbus.flg_ch_update == false) pc.printf("0\r\n");
-   /* if(sbus.failsafe_status==SBUS_SIGNAL_OK){
-        pc.printf("OK\r\n");
-        }
-    */
-    //pc.printf("%d\r\n",sbus.failsafe_status);
-                    
-    if(sbus.failsafe_status==SBUS_SIGNAL_LOST||sbus.failsafe_status==SBUS_SIGNAL_FAILSAFE) FailsafeCounter++;
-    else ResetCounter++;
-        
-    if(ResetCounter>7){
-        ResetCounter=0;
-        FailsafeCounter=0;
-    }
-
-        if(FailsafeCounter>10){
-        ResetCounter=0;
-            for(uint8_t i=0;i<6;i++) pwm[i] = trimpwm[i];
-            
-        if(sbus.failsafe_status==SBUS_SIGNAL_OK&&sbus.flg_ch_update == true) OKCounter++;
-        else OKCounter=0;
-        
-        if(OKCounter>10){
-        OKCounter=0;
-                FailsafeCounter=0;   
-        }
-            //pc.printf("OKCounter=%d,  FailsafeCounter=%d,  sbus.failsafe_status=%d\r\n",OKCounter,FailsafeCounter,sbus.failsafe_status);
-        }
-    //if(sbus.failsafe_status==SBUS_SIGNAL_OK){FailsafeCounter=0;}
-    
-    
-    sbus.flg_ch_update = false;   
-    Output_PWM(pwm);  
-}
- 
- 
- 
- 
-//pwmをサーボに出力。
-void Output_PWM(int16_t pwm[5])
-{
-    NVIC_DisableIRQ(USART1_IRQn);
-    servo1.pulsewidth_us(pwm[0]);
-    servo2.pulsewidth_us(pwm[1]);
-    servo3.pulsewidth_us(pwm[2]);
-    servo4.pulsewidth_us(pwm[3]);
-    servo5.pulsewidth_us(pwm[4]);
-    servo6.pulsewidth_us(pwm[5]);
-    NVIC_EnableIRQ(USART1_IRQn);
-
-}
-
-void ResetTrim(){
-    for(uint8_t i=0; i<6; i++){            //i=4から書き換え_投下サーボは入ってない模様
-        trimpwm[i] = sbus.manualpwm[i];
-    }
-    pc.printf("reset PWM trim\r\n");
-}
-
-
-void SensingMPU(){
-    //static int16_t deltaT = 0, t_start = 0;
-    //t_start = t.read_us();
-    
-    float rpy[3] = {0}, oldrpy[3] = {0};
-    static uint16_t count_changeRPY = 0;
-    static bool flg_checkoutlier = false;
-    NVIC_DisableIRQ(USART1_IRQn);
-    NVIC_DisableIRQ(USART2_IRQn);
-    NVIC_DisableIRQ(TIM5_IRQn);
-    NVIC_DisableIRQ(EXTI0_IRQn);//MPU割り込み禁止
-    NVIC_DisableIRQ(EXTI9_5_IRQn);//超音波割り込み禁止
-
-    mpu6050.getRollPitchYaw_Skipper(rpy);
- 
-    NVIC_EnableIRQ(USART1_IRQn);
-    NVIC_EnableIRQ(USART2_IRQn);
-    NVIC_EnableIRQ(TIM5_IRQn);
-    NVIC_EnableIRQ(EXTI0_IRQn);
-    NVIC_EnableIRQ(EXTI9_5_IRQn);
-    
-    
-    //外れ値対策
-    for(uint8_t i=0; i<3; i++) rpy[i] *= 180.0f/PI;
-    rpy[ROLL] -= FirstROLL;
-    rpy[PITCH] -= FirstPITCH;
-    rpy[YAW] -= FirstYAW;
-    
-    for(uint8_t i=0; i<3; i++) {if(rpy[i] < nowAngle[i]-10 || rpy[i] > nowAngle[i]+10) {flg_checkoutlier = true;}}
-    if(!flg_checkoutlier || count_changeRPY >= 2){
-        for(uint8_t i=0; i<3; i++){
-            nowAngle[i] = (rpy[i] + nowAngle[i])/2.0f;  //2つの移動平均
-        }
-        count_changeRPY = 0;
-    }else   count_changeRPY++;
-    flg_checkoutlier = false;
-    
-}
-
-float TranslateNewYaw(float beforeYaw,  float newzeroYaw){
-    float newYaw = beforeYaw - newzeroYaw;
-    
-    if(newYaw<-180.0f) newYaw += 360.0f;
-    else if(newYaw>180.0f) newYaw -= 360.0f;
-    return newYaw;
-}
-
-
-void getSF_Serial(){
-    //NVIC_DisableIRQ(USART1_IRQn);
-    //NVIC_DisableIRQ(EXTI0_IRQn);
-    //NVIC_DisableIRQ(TIM5_IRQn);
-
-
-        static char SFbuf[16]={'Q','Q','Q','Q','Q','Q','Q','Q','Q','Q','Q','Q','Q','Q','Q','Q'};
-
-        static int bufcounter=0;
-        
-       
-        
-        if(pc.readable()) {    // 受信確認
-            
-            SFbuf[bufcounter] = pc.getc();    // 1文字取り出し
-          if(SFbuf[0]!='S'){
-                 //pc.printf("x");
-                 return;
-          }  
-        
-                
-        
-            //pc.printf("%c",SFbuf[bufcounter]);
-            
-            if(SFbuf[0]=='S'&&bufcounter<5)bufcounter++;
-                
-            if(bufcounter==5 && SFbuf[4]=='F'){
-                
-                g_landingcommand = SFbuf[1];
-                //wait_ms(20);
-                //if(g_landingcommand=='Y')g_SerialTargetYAW = ConvertByteintoFloat(SFbuf[2], SFbuf[3]);
-                if(g_landingcommand=='Y')g_SerialTargetYAW =0.0f;
-                bufcounter = 0;
-                memset(SFbuf, 0, sizeof(SFbuf));
-                NVIC_ClearPendingIRQ(USART2_IRQn);
-                //pc.printf("command = %c, commandYAW = %f\r\n", g_landingcommand, g_SerialTargetYAW); 
-            }
-            
-            else if(bufcounter>=5){
-                //pc.printf("Communication Falsed.\r\n");
-                memset(SFbuf, 0, sizeof(SFbuf));
-                bufcounter = 0;
-                NVIC_ClearPendingIRQ(USART2_IRQn);
-            }
-        }
-                    
-            //NVIC_EnableIRQ(TIM5_IRQn);
-            //NVIC_EnableIRQ(EXTI0_IRQn);
-            //NVIC_EnableIRQ(USART1_IRQn); 
-    }
-    
-float ConvertByteintoFloat(char high, char low){
-
-        //int16_t intvalue = (int16_t)high*256 + (int16_t)low;
-        int16_t intvalue = (int16_t)(((int16_t)high << 8) | low);  // Turn the MSB and LSB into a signed 16-bit value
-        float floatvalue = (float)intvalue;
-        return floatvalue;
-}
-
-
-//超音波割り込み
-void UpdateDist(){
-    g_distance = usensor.get_dist_cm();
-    usensor.start();
-}
-
-//8の字旋回
-void UpdateTargetAngle_Moebius(float targetAngle[3]){
-    static uint8_t RotateCounter=0;
-    static bool flg_setInStartAuto = false;
-    static float FirstYAW_Moebius = 0.0;
-    float newYaw_Moebius;
-
-    if(!flg_setInStartAuto && CheckSW_Up(Ch7)){
-        FirstYAW_Moebius = nowAngle[YAW];
-        RotateCounter = 0;
-        flg_setInStartAuto = true;
-    }else if(!CheckSW_Up(Ch7)){
-        flg_setInStartAuto = false;
-        led4 = 0;
-    }
-    autopwm[THR]=oldTHR;
-
-    newYaw_Moebius = TranslateNewYaw(nowAngle[YAW], FirstYAW_Moebius);
-
-    if(RotateCounter == 0 && newYaw_Moebius >90.0 && newYaw_Moebius < 180.0)    {RotateCounter++; led4 = 1; pc.printf("Rotate 90\r\n");}
-    if(RotateCounter == 1 && newYaw_Moebius >-180.0 && newYaw_Moebius < -90.0)  {RotateCounter++; led4 = 0; pc.printf("Rotate 180\r\n");}
-    if(RotateCounter == 2 && newYaw_Moebius >-90.0 && newYaw_Moebius <-10.0)   {RotateCounter++; led4 = 1; pc.printf("Rotate 270\r\n");}
-    if(RotateCounter == 3 && newYaw_Moebius >0.0 && newYaw_Moebius < 90.0)     {RotateCounter++; led4 = 0; pc.printf("Change Rotate direction\r\n");}
-
-
-    if(RotateCounter <= 3) UpdateTargetAngle_Rightloop_short(targetAngle);    
-    else UpdateTargetAngle_Leftloop_short(targetAngle);   //左旋回
-
-}
-
-//自動滑空
-void UpdateTargetAngle_Glide(float targetAngle[3]){
-    static int THRcount = 0;
-    static int t_start = 0;
-    static bool flg_tstart = false;
-    static bool flg_ground = false;
-    int t_diff = 0;
-    static int groundcount = 0;
-    
-    targetAngle[ROLL] = g_glideloopROLL;
-    
-    autopwm[RUD]=g_glideloopRUD;
-   // autopwm[THR]=oldTHR;
-
-    
-    
-    //時間計測開始設定
-    if(!flg_tstart && CheckSW_Up(Ch7)){
-        t_start = t.read();
-        flg_tstart = true;
-        pc.printf("timer start\r\n");
-    }else if(!CheckSW_Up(Ch7)){
-        t_start = 0;
-        flg_tstart = false;
-    }
-
-
-    //フラグが偽であれば計測は行わない    
-    if(flg_tstart){
-        t_diff = t.read() - t_start;
-        //一定高度or15秒でled点灯
-        NVIC_DisableIRQ(EXTI9_5_IRQn);
-        if((groundcount>5 && g_distance>0) || t_diff > 15){
-            led4 = 1;
-            //pc.printf("Call [Stop!] calling!\r\n");
-        }
-        
-        if(g_distance<250 && g_distance > 0) {
-            groundcount++;
-        }
-        NVIC_EnableIRQ(EXTI9_5_IRQn);
-    }else{
-        t_diff = 0;
-        groundcount = 0;
-        led4 = 0;
-    }
-    
-        NVIC_DisableIRQ(EXTI9_5_IRQn);
-        if(t_diff > 17) autopwm[THR] = SetTHRinRatio(0.5);
-        
-        else if(g_distance<150 && g_distance>0 ){
-            NVIC_DisableIRQ(EXTI9_5_IRQn);
-            THRcount++;
-            if(THRcount>5) flg_ground = true;
-        }
-        else THRcount = 0;
-        NVIC_EnableIRQ(EXTI9_5_IRQn);
-        
-        if(flg_ground == true) {
-            autopwm[THR] = SetTHRinRatio(0.6);
-            targetAngle[PITCH] = g_gostraightPITCH;
-            }
-        else {
-            autopwm[THR] = minpwm[THR];
-            targetAngle[PITCH] = g_glideloopPITCH;
-            }
-        
-        NVIC_DisableIRQ(USART1_IRQn);
-        if(!CheckSW_Up(Ch7)){
-            flg_ground = false;
-            }
-        NVIC_EnableIRQ(USART1_IRQn);
-}
-
-//離陸-投下-着陸一連
-void Take_off_and_landing(float targetAngle[3]){
-    
-    if(!CheckSW_Up(Ch7)) bombing_mode = Takeoff;
-    
-    switch(bombing_mode){
-        case Takeoff:
-            static bool flg_setFirstYaw = false;
-            static int TakeoffCount = 0;
-
-            if(!flg_setFirstYaw && CheckSW_Up(Ch7)){
-                FirstYAW = nowAngle[YAW];
-                flg_setFirstYaw = true;
-            }else if(flg_setFirstYaw && !CheckSW_Up(Ch7)){
-                flg_setFirstYaw = false;
-            }
-            
-            UpdateTargetAngle_Takeoff(targetAngle);
-            NVIC_DisableIRQ(EXTI9_5_IRQn);
-            if(g_distance>150) TakeoffCount++;
-            else TakeoffCount = 0;
-            NVIC_EnableIRQ(EXTI9_5_IRQn);
-            if(TakeoffCount>5){
-                autopwm[THR] = 1180+320*2*0.5;
-                targetAngle[PITCH]=g_gostraightPITCH;
-                autopwm[RUD]=trimpwm[RUD];
-                //pc.printf("Now go to Approach mode!!");
-                bombing_mode = Approach;
-            }
-            break;
-           
-        //case Chicken:    
-            //break;
-        /*    
-        case Transition:
-            static int ApproachCount = 0;
-            targetAngle[YAW]=180.0;
-            int Judge = Rotate(targetAngle, g_SerialTargetYAW);
-            
-            if(Judge==0) ApproachCount++;
-            if(ApproachCount>5) bombing_mode = Approach;
-            break;
-            */
-        case Approach:
-        
-            autopwm[THR] = SetTHRinRatio(g_loopTHR); //0.7;スロットルの割合
-            UpdateTargetAngle_Approach(targetAngle);
-            
-            break;
-            
-        default:
-            bombing_mode = Takeoff;
-            break;    
-    }
-    
-}
-
-//離陸モード
-void UpdateTargetAngle_Takeoff(float targetAngle[3]){
-    //pc.printf("%d \r\n",g_distance);
-    static int tELE_start = 0;
-    static bool flg_ELEup = false;
-    int t_def = 0;
-    
-    autopwm[RUD] = trimpwm[RUD];
-    
-    
-    if(!flg_ELEup && CheckSW_Up(Ch7)){
-        tELE_start = t.read_ms();
-        flg_ELEup = true;
-        pc.printf("timer start\r\n");
-    }else if(!CheckSW_Up(Ch7)){
-        tELE_start = 0;
-        flg_ELEup = false;
-    }
-    if(flg_ELEup){
-        t_def = t.read_ms() - tELE_start;
-        
-        //1.5秒経過すればELE上げ舵へ
-        if(t_def>500) targetAngle[PITCH]=-35.0;
-        else{
-            t_def = 0;
-            targetAngle[PITCH]=g_gostraightPITCH;
-        }
-    }
-    targetAngle[ROLL] = g_gostraightROLL;
-    //targetAngle[PITCH] = g_loopTHR;
-    autopwm[THR] = SetTHRinRatio(g_takeoffTHR); //0.7;スロットルの割合
-}
-
-
-//ヨーを目標値にして許容角度になるまで水平旋回
-int Rotate(float targetAngle[3], float TargetYAW){
-    float diffYaw = TranslateNewYaw(TargetYAW, nowAngle[YAW]);
-
-    if(diffYaw > LIMIT_STRAIGHT_YAW){
-        /*
-        if(diffYaw > THRESHOLD_TURNINGRADIUS_YAW) UpdateTargetAngle_Rightloop_short(targetAngle);
-        else UpdateTargetAngle_Rightloop(targetAngle);
-        */
-        UpdateTargetAngle_Rightloop_short(targetAngle);
-        return 1;
-    }else if(diffYaw < -LIMIT_STRAIGHT_YAW){
-        UpdateTargetAngle_Leftloop_short(targetAngle);
-        /*
-        if(diffYaw < -THRESHOLD_TURNINGRADIUS_YAW) UpdateTargetAngle_Leftloop_short(targetAngle);
-        else UpdateTargetAngle_Leftloop(targetAngle);
-        */
-        return 1;
-    }else{
-        UpdateTargetAngle_GoStraight(targetAngle);
-        return 0;
-    }
-}
-
-//チキラー投下
-void Chicken_Drop(){
-    if(CheckSW_Up(Ch7)){
-        autopwm[DROP] = 1712;
-        pc.printf("Bombed!\r\n");
-        //RerurnChickenServo1.attach(&ReturnChickenServo1, 3);
-        //operation_mode = Approach;
-        //buzzer = 0;
-        pc.printf("Goto LeftLoop mode\r\n");
-    }
-}
-
-void ReturnChickenServo1(){
-    autopwm[DROP] = 1344;
-    pc.printf("first reverse\r\n");
-    RerurnChickenServo2.attach(&ReturnChickenServo2, 1);
-}
-
-void ReturnChickenServo2(){
-    autopwm[DROP] = 1392;
-    pc.printf("second reverse\r\n");
-    }
-    
-    //着陸モード(PCからの指令に従う)
-void UpdateTargetAngle_Approach(float targetAngle[3]){
-       
-       static bool zeroTHR=true;//着陸時のスロットル動作確認用
-       
-       if(CheckSW_Up(Ch7)){
-            output_status = Auto;
-            led1 = 1;
-        }else{
-            output_status = Manual;
-            led1 = 0;
-            zeroTHR=true;
-        }
-    
-    
-       NVIC_DisableIRQ(USART2_IRQn);
-        switch(g_landingcommand){
-            case 'R':   //右旋回セヨ
-            if(zeroTHR==false){
-                UpdateTargetAngle_Rightloop_zero(targetAngle);
-                }
-                else{
-                targetAngle[ROLL] = g_rightloopROLL_approach;
-        targetAngle[PITCH] = g_rightloopPITCH_approach ;
-        autopwm[RUD]=g_rightloopRUD_approach; //RUD固定
-            if(autopwm[AIL_R]<trimpwm[AIL_R]){                                                                                  //エルロン上がりやすさ調節
-                autopwm[AIL_L]=trimpwm[AIL_L]+AIL_L_correctionrightloop+(autopwm[AIL_R]-trimpwm[AIL_R])*AIL_L_RatioRising;
-                }
-            else {autopwm[AIL_L]=trimpwm[AIL_L]+AIL_L_correctionrightloop+(autopwm[AIL_R]-trimpwm[AIL_R])*AIL_L_RatioDescent;
-            autopwm[AIL_R]=autopwm[AIL_R]+AIL_R_correctionrightloop;
-            }
-        }
-        NVIC_EnableIRQ(USART2_IRQn);
-                break;
-                
-                case 'L':   //左旋回セヨ
-                if(zeroTHR==false){
-                    UpdateTargetAngle_Leftloop_zero(targetAngle);
-                }
-                    else{
-                        targetAngle[ROLL] = g_leftloopROLL_approach;
-                        targetAngle[PITCH] = g_leftloopPITCH_approach;
-                        autopwm[RUD]=g_leftloopRUD_approach;
-                        if(autopwm[AIL_R]<trimpwm[AIL_R]){
-                            autopwm[AIL_L]=trimpwm[AIL_L]+AIL_L_correctionleftloop+(autopwm[AIL_R]-trimpwm[AIL_R])*AIL_L_RatioRising;
-                        }
-                        else autopwm[AIL_L]=trimpwm[AIL_L]+AIL_L_correctionleftloop+(autopwm[AIL_R]-trimpwm[AIL_R])*AIL_L_RatioDescent;
-                    }
-                NVIC_EnableIRQ(USART2_IRQn);
-                break;
-                    
-                case 'G':   //直進セヨ
-                if(zeroTHR==false){
-                    UpdateTargetAngle_GoStraight_zero(targetAngle);
-                    }
-                    else{
-                    targetAngle[ROLL] = g_gostraightROLL;
-                    targetAngle[PITCH] = g_gostraightPITCH;
-    }
-                    NVIC_EnableIRQ(USART2_IRQn);
-                    break;
-                
-                case 'Y':   //指定ノヨー方向ニ移動セヨ
-                    Rotate(targetAngle, g_SerialTargetYAW);
-                    NVIC_EnableIRQ(USART2_IRQn);
-                    break;
-                    
-                case 'U':   //機首ヲ上ゲヨ
-                    static int UpCounter=0;
-                    UpCounter++;
-                    if(UpCounter==3){
-                        while(1){
-                            targetAngle[ROLL] = g_gostraightROLL;
-                            autopwm[THR] = minpwm[THR];
-                            autopwm[ELE] = minpwm[ELE];
-                            if(CheckSW_Up(Ch7)){
-                                output_status = Auto;
-                                led1 = 1;
-                            }else{
-                                output_status = Manual;
-                                led1 = 0;
-                                zeroTHR=true;
-                            }
-                        }
-                        
-                    }
-                        NVIC_EnableIRQ(USART2_IRQn);
-                        
-                    break;
-                
-                /*case 'B':   //ブザーヲ鳴ラセ
-                    //buzzer = 1;
-                    NVIC_EnableIRQ(USART2_IRQn);
-                    break;*/
-                    
-                case 'B':   //物資ヲ落トセ
-                    Chicken_Drop();
-                    NVIC_EnableIRQ(USART2_IRQn);
-                    break;
-                            
-                case 'C':   //停止セヨ
-                    targetAngle[ROLL] = 0.0;
-                    targetAngle[PITCH] = -3.0;
-                    autopwm[THR] = minpwm[THR];
-                    zeroTHR=false;
-                    NVIC_EnableIRQ(USART2_IRQn);
-                    break;
-                    
-                default :
-                NVIC_EnableIRQ(USART2_IRQn);
-                break;
-                
-            
-            }
-            
-}
-        
-void checkHeight(float targetAngle[3]){
-        
-        static int targetHeight = 200; 
-       
-        NVIC_DisableIRQ(EXTI9_5_IRQn);
-        if(g_distance < targetHeight + ALLOWHEIGHT){
-            UpdateTargetAngle_NoseUP(targetAngle);
-            if(CheckSW_Up(Ch7)) led2 = 1;
-        }
-        else if(g_distance > targetHeight - ALLOWHEIGHT){
-            UpdateTargetAngle_NoseDOWN(targetAngle);
-            if(CheckSW_Up(Ch7)) led2 = 1;
-        }
-        else led2=0;
-        NVIC_EnableIRQ(EXTI9_5_IRQn);
-    }
-    
-    void UpdateTargetAngle_NoseUP(float targetAngle[3]){
-    
-    //targetAngle[PITCH] += 2.0f;
-    //if(nowAngle[PITCH]<targetAngle[PITCH]) autopwm[THR] = SetTHRinRatio(0.6);
-    autopwm[THR] = SetTHRinRatio(g_loopTHR+0.05);
-    //pc.printf("nose UP");
-}
-
-void UpdateTargetAngle_NoseDOWN(float targetAngle[3]){
-    
-    //targetAngle[PITCH] -= 2.0f;
-    autopwm[THR] = SetTHRinRatio(g_loopTHR-0.05);
-    //pc.printf("nose DOWN");
-}
-
-//直進
-void UpdateTargetAngle_GoStraight(float targetAngle[3]){
-
-    autopwm[RUD] = trimpwm[RUD];
-    targetAngle[ROLL] = g_gostraightROLL;
-    targetAngle[PITCH] = g_gostraightPITCH;
-    autopwm[THR] = SetTHRinRatio(g_loopTHR);
-    
-    //pc.printf("Roll = %f, PITCH = %f, THR = %d \r\n", targetAngle[ROLL], targetAngle[PITCH], autopwm[THR]);
-}
-
-//直進(着陸時スロットル0のとき)
-void UpdateTargetAngle_GoStraight_zero(float targetAngle[3]){
-
-    autopwm[RUD] =  trimpwm[RUD];
-    targetAngle[ROLL] = g_gostraightROLL;
-    targetAngle[PITCH] = g_gostraightPITCH;
-    autopwm[THR] = minpwm[THR];
-    
-    //pc.printf("Roll = %f, PITCH = %f, THR = %d \r\n", targetAngle[ROLL], targetAngle[PITCH], autopwm[THR]);
-}
-
-//右旋回
-void UpdateTargetAngle_Rightloop(float targetAngle[3]){ //右旋回
-
-    targetAngle[PITCH] = g_rightloopPITCH ;
-    autopwm[RUD]=g_rightloopRUD;              //RUD固定
-    autopwm[THR] = SetTHRinRatio(0.45);                  //手動スロットル記憶
-    
-    /*
-    if (nowAngle[ROLL]>20.0||nowAngle[ROLL]<-20.0){
-        t2.start();
-        pc.printf("Timer start.");
-    }
-    if(0.0<t2.read()<5.0){
-            //pc.printf("tagetAngle is changed.");
-            targetAngle[ROLL] = rightloopROLL2;
-            }
-        else {
-            t2.stop();
-            t2.reset();
-            pc.printf("Timer stopped.");
-            targetAngle[ROLL] = g_rightloopROLL;
-        }    
-*/
-    if(autopwm[AIL_R]<trimpwm[AIL_R]){                                                                                  //エルロン上がりやすさ調節
-        autopwm[AIL_L]=trimpwm[AIL_L]+AIL_L_correctionrightloop+(autopwm[AIL_R]-trimpwm[AIL_R])*AIL_L_RatioRising;
-        }
-    else autopwm[AIL_L]=trimpwm[AIL_L]+AIL_L_correctionrightloop+(autopwm[AIL_R]-trimpwm[AIL_R])*AIL_L_RatioDescent;
-    autopwm[AIL_R]=autopwm[AIL_R]+AIL_R_correctionrightloop;
-    
-    
-    //checkHeight(targetAngle);
-    //pc.printf("Roll = %f, PITCH = %f, THR = %d \r\n", targetAngle[ROLL], targetAngle[PITCH], autopwm[THR]);
-}
-
-//右旋回(着陸時スロットル0の時)
-void UpdateTargetAngle_Rightloop_zero(float targetAngle[3]){ //右旋回
-    autopwm[THR]=minpwm[THR];
-    targetAngle[ROLL] = g_rightloopROLL_approach;
-    targetAngle[PITCH] = g_rightloopPITCH_approach ;
-    autopwm[RUD]=g_rightloopRUD_approach;              //RUD固定
-    if(autopwm[AIL_R]<trimpwm[AIL_R]){                                                                                  //エルロン上がりやすさ調節
-            autopwm[AIL_L]=trimpwm[AIL_L]+AIL_L_correctionrightloop+(autopwm[AIL_R]-trimpwm[AIL_R])*AIL_L_RatioRising;
-            }
-        else autopwm[AIL_L]=trimpwm[AIL_L]+AIL_L_correctionrightloop+(autopwm[AIL_R]-trimpwm[AIL_R])*AIL_L_RatioDescent;
-        autopwm[AIL_R]=autopwm[AIL_R]+AIL_R_correctionrightloop;
-
-    //checkHeight(targetAngle);
-    //pc.printf("Roll = %f, PITCH = %f, THR = %d \r\n", targetAngle[ROLL], targetAngle[PITCH], autopwm[THR]);
-}
-
-void UpdateTargetAngle_Rightloop_short(float targetAngle[3]){ //右旋回
-
-    targetAngle[ROLL] = g_rightloopROLLshort;
-    targetAngle[PITCH] = g_rightloopPITCHshort;
-    autopwm[RUD]=g_rightloopshortRUD;
-    autopwm[THR] = SetTHRinRatio(0.45);
-    if(autopwm[AIL_R]<trimpwm[AIL_R]){
-        autopwm[AIL_L]=trimpwm[AIL_L]+AIL_L_correctionrightloopshort+(autopwm[AIL_R]-trimpwm[AIL_R])*AIL_L_RatioRising;
-        }
-    else autopwm[AIL_L]=trimpwm[AIL_L]+AIL_L_correctionrightloopshort+(autopwm[AIL_R]-trimpwm[AIL_R])*AIL_L_RatioDescent;
-    
-    //pc.printf("Roll = %f, PITCH = %f, THR = %d \r\n", targetAngle[ROLL], targetAngle[PITCH], autopwm[THR]);
-}
-
-//左旋回
-void UpdateTargetAngle_Leftloop(float targetAngle[3]){
-    
-    targetAngle[ROLL] = g_leftloopROLL;
-    targetAngle[PITCH] = g_leftloopPITCH;
-    autopwm[RUD]=g_leftloopRUD;
-    autopwm[THR] = SetTHRinRatio(0.45);
-    if(autopwm[AIL_R]<trimpwm[AIL_R]){
-        autopwm[AIL_L]=trimpwm[AIL_L]+g_AIL_L_correctionleftloop+(autopwm[AIL_R]-trimpwm[AIL_R])*AIL_L_RatioRising;
-        }
-    else autopwm[AIL_L]=trimpwm[AIL_L]+g_AIL_L_correctionleftloop+(autopwm[AIL_R]-trimpwm[AIL_R])*AIL_L_RatioDescent;
-    //checkHeight(targetAngle);
-
-    //printf("Roll = %f, PITCH = %f, THR = %d \r\n", targetAngle[], targetAngle[PITCH], autopwm[THR]);
-}
-
-//左旋回(着陸時スロットル0のとき)
-void UpdateTargetAngle_Leftloop_zero(float targetAngle[3]){
-    
-    targetAngle[ROLL] = g_leftloopROLL_approach;
-    targetAngle[PITCH] = g_leftloopPITCH_approach;
-    autopwm[RUD]=g_leftloopRUD_approach;
-    autopwm[THR] = minpwm[THR];
-    if(autopwm[AIL_R]<trimpwm[AIL_R]){
-        autopwm[AIL_L]=trimpwm[AIL_L]+AIL_L_correctionleftloop+(autopwm[AIL_R]-trimpwm[AIL_R])*AIL_L_RatioRising;
-        }
-    else autopwm[AIL_L]=trimpwm[AIL_L]+AIL_L_correctionleftloop+(autopwm[AIL_R]-trimpwm[AIL_R])*AIL_L_RatioDescent;
-    //autopwm[AIL_L]=trimpwm[AIL_L]+AIL_L_correctionleftloopshort+(autopwm[AIL_R]-trimpwm[AIL_R])*AIL_L_Ratio_leftloop;
-    //checkHeight(targetAngle);
-
-    //printf("Roll = %f, PITCH = %f, THR = %d \r\n", targetAngle[], targetAngle[PITCH], autopwm[THR]);
-}
-
-void UpdateTargetAngle_Leftloop_short(float targetAngle[3]){
-    
-    targetAngle[ROLL] = g_leftloopROLLshort;
-    targetAngle[PITCH] = g_leftloopPITCHshort;
-    autopwm[RUD]=g_leftloopRUD;
-    autopwm[THR] = SetTHRinRatio(0.45);
-    if(autopwm[AIL_R]<trimpwm[AIL_R]){
-        autopwm[AIL_L]=trimpwm[AIL_L]+AIL_L_correctionleftloopshort+(autopwm[AIL_R]-trimpwm[AIL_R])*AIL_L_RatioRising;
-        }
-    else autopwm[AIL_L]=trimpwm[AIL_L]+AIL_L_correctionleftloopshort+(autopwm[AIL_R]-trimpwm[AIL_R])*AIL_L_RatioDescent;
-
-    //pc.printf("Roll = %f, PITCH = %f, THR = %d \r\n", targetAngle[ROLL], targetAngle[PITCH], autopwm[THR]);
-}
-
-void Sbusprintf(){
-    
-    for(uint8_t i=0; i<8; i++) pc.printf("ch.%d = %d ",i+1,sbus.manualpwm[i]);
-    pc.printf("\r\n");
-    
-    }
-
-
-
-//デバッグ用
-void DebugPrint(){    
-    /*
-    static int16_t deltaT = 0, t_start = 0;
-    deltaT = t.read_u2s() - t_start;
-    pc.printf("t:%d us, ",deltaT);
-    pc.printf("\r\n");
-    t_start = t.read_us();
-    */
-    //for(uint8_t i=0; i<8; i++) pc.printf("%d ",sbus.manualpwm[i]);
-    //for(uint8_t i=1; i<4; i++) pc.printf("%d ",sbus.manualpwm[i]);
-    //pc.printf("\r\n");
-    //for(uint8_t i=0; i<3; i++) pc.printf("%3.2f\t",nowAngle[i]);
-    //for(uint8_t i=0; i<2; i++) pc.printf("%3.2f\t",nowAngle[i]); //ロール、ピッチのみ 小数点以下2ケタ
-    //pc.printf("%d\t",autopwm[AIL_L]);  
-    //pc.printf("%d\t",autopwm[RUD]);
-    //pc.printf("%d",g_distance);
-    //NVIC_DisableIRQ(EXTI9_5_IRQn); 
-    //pc.printf("g_distance = %d",g_distance);
-    //NVIC_EnableIRQ(EXTI9_5_IRQn);
-    //pc.printf("Mode: %c: ",g_buf[0]);
-    //if(g_buf[0] == 'Y') pc.printf(" %3.1f",g_SerialTargetYAW);
-    //pc.printf("\r\n");
-}
\ No newline at end of file
+    }
\ No newline at end of file