skipper_raspi_uart_test

Dependencies:   mbed MPU6050_2 HMC5883L_4 SDFileSystem3

Revision:
22:a19be3b505b7
Parent:
21:ca8f35e24e66
Child:
23:29b2722bd753
--- a/main.cpp	Sat Feb 16 09:29:11 2019 +0000
+++ b/main.cpp	Sun Feb 17 12:45:35 2019 +0000
@@ -123,9 +123,9 @@
     setup();
     //コンパスチェック用
     /*while(1){
-        SensingMPU();
+        //SensingMPU();
         SensingHMC();
-        pc.printf("%3.2f\t",nowAngle[2]);
+        //pc.printf("%3.2f\t",nowAngle[2]);
         pc.printf("%3.2f\t",nowAngle_HMC); //HMC
         pc.printf("\r\n");
         wait_ms(30);
@@ -145,13 +145,20 @@
         MoveCameraBoard();
         
         pc.printf("Position\r\n");
+        pc.printf("g_landingcommand=%c\r\n",g_landingcommand);
+        NVIC_DisableIRQ(USART1_IRQn);
+        NVIC_DisableIRQ(USART2_IRQn);
         if(g_landingcommand!='N') MatchPosition();
+        NVIC_EnableIRQ(USART1_IRQn);
+        NVIC_EnableIRQ(USART2_IRQn);
         
         if(jevoisFlag==true) NVIC_DisableIRQ(USART1_IRQn);
         else NVIC_DisableIRQ(USART2_IRQn);
         
         pc.printf("Move Cansat\r\n");
         MoveCansat(g_landingcommand); 
+        if(jevoisFlag==true) NVIC_DisableIRQ(USART1_IRQn);
+        else NVIC_DisableIRQ(USART2_IRQn);
         wait_ms(23);
         
         pc.printf("finish\r\n");
@@ -161,122 +168,139 @@
 }
 
 
-void MoveCansat(char g_landingcommand)
+void MoveCansat(char a)
 {
-    //NVIC_DisableIRQ(USART1_IRQn);
-    //NVIC_DisableIRQ(USART2_IRQn);
-    switch(g_landingcommand){
+    NVIC_DisableIRQ(USART1_IRQn);
+    NVIC_DisableIRQ(USART2_IRQn);
+    switch(a){
         case 'N': //MOVE_NEUTRAL 
             servoR.pulsewidth_us(Servo_NEUTRAL_R);
             servoL.pulsewidth_us(Servo_NEUTRAL_L);
-            //NVIC_EnableIRQ(USART1_IRQn);
-            //NVIC_EnableIRQ(USART2_IRQn);
+            NVIC_EnableIRQ(USART1_IRQn);
+            NVIC_EnableIRQ(USART2_IRQn);
             break;
             
         case 'Y': //MOVE_FORWARD
             servoR.pulsewidth_us(Servo_high_FORWARD_R);
             servoL.pulsewidth_us(Servo_high_FORWARD_L);
-            //NVIC_EnableIRQ(USART1_IRQn);
-            //NVIC_EnableIRQ(USART2_IRQn); 
+            NVIC_EnableIRQ(USART1_IRQn);
+            NVIC_EnableIRQ(USART2_IRQn); 
             break;
             
         case 'l': //MOVE_LEFT Low Speed
             servoR.pulsewidth_us(Servo_slow_FORWARD_R);
-            //NVIC_EnableIRQ(USART1_IRQn);
-            //NVIC_EnableIRQ(USART2_IRQn); 
+            servoL.pulsewidth_us(Servo_NEUTRAL_L);
+            NVIC_EnableIRQ(USART1_IRQn);
+            NVIC_EnableIRQ(USART2_IRQn); 
         
         case 'L': //MOVE_LEFT High Speed
             servoR.pulsewidth_us(Servo_high_FORWARD_R);
-            //NVIC_EnableIRQ(USART1_IRQn);
-            //NVIC_EnableIRQ(USART2_IRQn); 
+            servoL.pulsewidth_us(Servo_NEUTRAL_L);
+            NVIC_EnableIRQ(USART1_IRQn);
+            NVIC_EnableIRQ(USART2_IRQn); 
             
         case 'r': //MOVE_RIGHT Low Speed  
+            servoR.pulsewidth_us(Servo_NEUTRAL_R);
             servoL.pulsewidth_us(Servo_slow_FORWARD_L);
-            //NVIC_EnableIRQ(USART1_IRQn);
-            //NVIC_EnableIRQ(USART2_IRQn); 
+            NVIC_EnableIRQ(USART1_IRQn);
+            NVIC_EnableIRQ(USART2_IRQn); 
             break;
         
         case 'R': //MOVE_RIGHT  High Speed
+            servoR.pulsewidth_us(Servo_NEUTRAL_R);
             servoL.pulsewidth_us(Servo_high_FORWARD_L);
-            //NVIC_EnableIRQ(USART1_IRQn);
-            //NVIC_EnableIRQ(USART2_IRQn); 
+            NVIC_EnableIRQ(USART1_IRQn);
+            NVIC_EnableIRQ(USART2_IRQn); 
             break;
             
         case 'G': //GOAL_FORWARD
             servoR.pulsewidth_us(Servo_slow_FORWARD_R);
             servoL.pulsewidth_us(Servo_slow_FORWARD_L);
-            //NVIC_EnableIRQ(USART1_IRQn);
-            //NVIC_EnableIRQ(USART2_IRQn); 
+            NVIC_EnableIRQ(USART1_IRQn);
+            NVIC_EnableIRQ(USART2_IRQn); 
             break;
         
         case '1': //MOVE_FORWARD Speed Level 1
             servoR.pulsewidth_us(Servo_high_FORWARD_R);
             servoL.pulsewidth_us(Servo_high_FORWARD_L);
-            //NVIC_EnableIRQ(USART1_IRQn);
             wait(1);
             do{
-            }while((nowAngle[PITCH]<20&&nowAngle[PITCH]>-20)&&(nowAngle[ROLL]<20&&nowAngle[ROLL]>-20));
-            //NVIC_EnableIRQ(USART2_IRQn); 
+                SensingMPU();
+                wait_ms(30);
+            }while((nowAngle[PITCH]>20||nowAngle[PITCH]<-20)&&(nowAngle[ROLL]>20||nowAngle[ROLL]<-20));
+            NVIC_EnableIRQ(USART1_IRQn);
+            NVIC_EnableIRQ(USART2_IRQn);  
             break;
         
         case '2': //MOVE_FORWARD Speed Level 2
             servoR.pulsewidth_us(Servo_high_FORWARD_R);
             servoL.pulsewidth_us(Servo_high_FORWARD_L);
-            //NVIC_EnableIRQ(USART1_IRQn);
             wait(2);
             do{
-            }while((nowAngle[PITCH]<20&&nowAngle[PITCH]>-20)&&(nowAngle[ROLL]<20&&nowAngle[ROLL]>-20));
-            //NVIC_EnableIRQ(USART2_IRQn); 
+                SensingMPU();
+                wait_ms(30);
+            }while((nowAngle[PITCH]>20||nowAngle[PITCH]<-20)&&(nowAngle[ROLL]>20||nowAngle[ROLL]<-20));
+            NVIC_EnableIRQ(USART1_IRQn);
+            NVIC_EnableIRQ(USART2_IRQn); 
             break;
         
         case '3': //MOVE_FORWARD Speed Level 3
             servoR.pulsewidth_us(Servo_high_FORWARD_R);
             servoL.pulsewidth_us(Servo_high_FORWARD_L);
-            //NVIC_EnableIRQ(USART1_IRQn);
             wait(3);
             do{
-            }while((nowAngle[PITCH]<20&&nowAngle[PITCH]>-20)&&(nowAngle[ROLL]<20&&nowAngle[ROLL]>-20));
-            //NVIC_EnableIRQ(USART2_IRQn); 
+                SensingMPU();
+                wait_ms(30);
+            }while((nowAngle[PITCH]>20||nowAngle[PITCH]<-20)&&(nowAngle[ROLL]>20||nowAngle[ROLL]<-20));
+            NVIC_EnableIRQ(USART1_IRQn);
+            NVIC_EnableIRQ(USART2_IRQn); 
             break;
         
         case '4': //MOVE_FORWARD Speed Level 4
             servoR.pulsewidth_us(Servo_high_FORWARD_R);
             servoL.pulsewidth_us(Servo_high_FORWARD_L);
-            //NVIC_EnableIRQ(USART1_IRQn);
             wait(4);
             do{
-            }while((nowAngle[PITCH]<20&&nowAngle[PITCH]>-20)&&(nowAngle[ROLL]<20&&nowAngle[ROLL]>-20));
-            //NVIC_EnableIRQ(USART2_IRQn); 
+                SensingMPU();
+                wait_ms(30);
+            }while((nowAngle[PITCH]>20||nowAngle[PITCH]<-20)||(nowAngle[ROLL]>20||nowAngle[ROLL]<-20));
+            NVIC_EnableIRQ(USART1_IRQn);
+            NVIC_EnableIRQ(USART2_IRQn); 
             break;
             
         case '5': //MOVE_FORWARD Speed Level 5
             servoR.pulsewidth_us(Servo_high_FORWARD_R);
             servoL.pulsewidth_us(Servo_high_FORWARD_L);
-            //NVIC_EnableIRQ(USART1_IRQn);
             wait(5);
             do{
-            }while((nowAngle[PITCH]<20&&nowAngle[PITCH]>-20)&&(nowAngle[ROLL]<20&&nowAngle[ROLL]>-20));
-            //NVIC_EnableIRQ(USART2_IRQn); 
+                SensingMPU();
+                wait_ms(30);
+            }while((nowAngle[PITCH]>20||nowAngle[PITCH]<-20)&&(nowAngle[ROLL]>20||nowAngle[ROLL]<-20));
+            NVIC_EnableIRQ(USART1_IRQn);
+            NVIC_EnableIRQ(USART2_IRQn); 
             break;
             
         case 'M': //MatchPosition
             servoR.pulsewidth_us(Matchspeed);
-            //NVIC_EnableIRQ(USART1_IRQn);
-            //NVIC_EnableIRQ(USART2_IRQn); 
+            NVIC_EnableIRQ(USART1_IRQn);
+            NVIC_EnableIRQ(USART2_IRQn); 
             break;
         
         case 'P': //jevoisからraspberry piへの切り替え
             jevoisFlag = false;
-            //NVIC_EnableIRQ(USART2_IRQn); 
+            NVIC_EnableIRQ(USART1_IRQn);
+            NVIC_EnableIRQ(USART2_IRQn); 
             break;
         
         case 'S':
             /*RasPiからの超音波判定(プログラムスタート部)*/
+            NVIC_EnableIRQ(USART1_IRQn);
+            NVIC_EnableIRQ(USART2_IRQn); 
             break;
             
         default :
-            //NVIC_EnableIRQ(USART1_IRQn);
-            //NVIC_EnableIRQ(USART2_IRQn);  
+            NVIC_EnableIRQ(USART1_IRQn);
+            NVIC_EnableIRQ(USART2_IRQn); 
             break;
      
     }
@@ -285,56 +309,83 @@
 }
 
 void MoveCameraBoard(){
-    pc.printf("start\r\n");
+    //pc.printf("start\r\n");
     MoveCansat('N');
-    pc.printf("ok\r\n");
+    //pc.printf("ok\r\n");
     g_landingcommand='N';
     servoTurnTable.pulsewidth_us(Turntable_speed);
     wait_ms(Camera_board_wait);
     servoTurnTable.pulsewidth_us(Turntable_NEUTRAL);
-    pc.printf("zoom1\r\n");
+    //pc.printf("zoom1\r\n");
     if(jevoisFlag == true) FocusAdjust();
     else wait(1);
     if(g_landingcommand!='N') return;
     if(!CameraDegFlag){
         for(int i=30; i<Camera_deg_B-Camera_deg_A;i=i+30){
             servoCameradeg.pulsewidth_us(Camera_deg_A+i);
-            pc.printf("%d\r\n",i);
+            //pc.printf("%d\r\n",i);
             wait_ms(20);
             }
         CameraDegFlag=!CameraDegFlag;
         }else{
             for(int i=30; i<Camera_deg_B-Camera_deg_A;i=i+30){
             servoCameradeg.pulsewidth_us(Camera_deg_B-i);
-            pc.printf("%d\r\n",i);
+            //pc.printf("%d\r\n",i);
             wait_ms(20);
             }
         CameraDegFlag = !CameraDegFlag;
     }
-      
-    pc.printf("zoom2\r\n");  
+    if(g_landingcommand!='N') return;  
+    //pc.printf("zoom2\r\n");  
     if(jevoisFlag == true) FocusAdjust();
     else wait(1);
     
     
-    pc.printf("Move Board Finish\r\n");  
+    //pc.printf("Move Board Finish\r\n");  
     return;
 }
 
 void MatchPosition(){
+    pc.printf("MatchPosition\r\n");
+    int SetLoop=0;
+    
+    while(SetLoop<30){
     SensingMPU();
+    wait_ms(20);
     SensingHMC();
-    DebugPrint();
+    wait_ms(20);
+    //DebugPrint();
+    SetLoop++;
+    //pc.printf("nowAngle_HMC=%f\tMPU=%f\r\n",nowAngle_HMC,nowAngle[YAW]);
+    
+    }
     
     float HighTargetYaw = nowAngle_HMC+5;
     float LowTargetYaw = nowAngle_HMC-5;
     
+    
     if(HighTargetYaw >= 360.0) HighTargetYaw = HighTargetYaw - 360.0;
+    
     if(LowTargetYaw < 0) LowTargetYaw = LowTargetYaw + 360.0;
     
-    while(nowAngle[YAW] <=HighTargetYaw  && nowAngle[YAW] >= LowTargetYaw){
-        MoveCansat('M');
-        SensingMPU();
+    pc.printf("\r\nnow=%f\t,high=%f\t,low=%f\r\n",nowAngle[YAW],HighTargetYaw,LowTargetYaw);
+    
+    MoveCansat('l');
+    
+    if(HighTargetYaw-LowTargetYaw<0){
+        while(nowAngle[YAW] > HighTargetYaw && nowAngle[YAW] < LowTargetYaw){
+            //MoveCansat('r');
+            SensingMPU();
+            wait_ms(30);
+            pc.printf("nowAngle_MPU=%f\r\n",nowAngle[YAW]);
+        }
+    }else{
+        while(nowAngle[YAW] > HighTargetYaw || nowAngle[YAW] < LowTargetYaw){
+            //MoveCansat('r');
+            SensingMPU();
+            wait_ms(30);
+            pc.printf("nowAngle_MPU=%f\r\n",nowAngle[YAW]);
+        }
     }
     return;
 }
@@ -353,6 +404,8 @@
 }     
 
 void getSF_Serial_jevois(){
+    
+    //pc.printf("jevois\r\n");
 
 
     static char SFbuf[16]={'Q','Q','Q','Q','Q','Q','Q','Q','Q','Q','Q','Q','Q','Q','Q','Q'};
@@ -371,7 +424,7 @@
         
                 
         
-        //pc.printf("%c",SFbuf[bufcounter]);
+        pc.printf("%c",SFbuf[bufcounter]);
         
         if(SFbuf[0]=='S' && bufcounter<5)bufcounter++;
             
@@ -486,7 +539,7 @@
         SensingMPU();
         SensingHMC();
         for(uint8_t i=0; i<3; i++) pc.printf("%3.2f\t",nowAngle[i]);
-        pc.printf("%3.2f\t",nowAngle_HMC);
+        pc.printf("\t%3.2f\t",nowAngle_HMC);
         pc.printf("\r\n");
     }
     
@@ -748,7 +801,7 @@
         *Turntable_speed = turntable_speed;
         *Calib_x = calib_x;
         *Calib_y = calib_y;
-        *Camera_board_wait;
+        *Camera_board_wait = camera_board_wait;
         SDerrorcount = -1;
     }
     pc.printf("SDsetup finished.\r\n");