nakao kanaki / Mbed 2 deprecated Eco_ziguzagu

Dependencies:   mbed

Revision:
9:dbfcdf1b20c1
Parent:
8:340da692d865
Child:
10:82f5a6e95dc2
--- a/main.cpp	Mon Mar 07 07:12:21 2016 +0000
+++ b/main.cpp	Tue Mar 08 15:04:10 2016 +0000
@@ -6,9 +6,9 @@
 
 /*ここで切り替え(強制)*/
 
-#define SLOPE
-//#define TURN
-//#define RIVER 
+//#define SLOPE
+#define TURN
+#define RIVER 
 //#define RIVER2
 #define DOWNHILL 
 
@@ -66,32 +66,32 @@
     while(1){if(push_switch==1)break;}
     
     /*ファイル*/
-    if(switch_1==1){
-      //if ( NULL == (fp = fopen( "/local/test.csv", "w" )) )error( "" );
-      //file=1;
+    if(switch_1==0){
+      if ( NULL == (fp = fopen( "/local/test.csv", "w" )) )error( "" );
+      file=1;
     }
 /*    
-if(switch_1==1&&switch_2==0&&switch_3==0){  //最初から
+if(switch_1==0&&switch_2==1&&switch_3==1){  //最初から
     #define SLOPE
     #define TURN
     #define RIVER
     #define DOWNHILL 
     }  
     
-else if(switch_1==0&&switch_2==1&&switch_3==0){  //リバーから
+else if(switch_1==1&&switch_2==0&&switch_3==1){  //リバーから
     #define RIVER
     #define DOWNHILL 
     }  
     
-else if(switch_1==0&&switch_2==0&&switch_3==1){  //ダウンヒルから
+else if(switch_1==1&&switch_2==1&&switch_3==0){  //ダウンヒルから
     kyori_reset();
     #define DOWNHILL 
     }   
 */
 #ifdef SLOPE
+   yellow_pin=0;
 while(1){
-    //pc.printf("%f\r\n",kyori_nobori);
-    judge_color();
+    //pc.printf("%f,%d\r\n",kyori_nobori,fixed_rot_data);
     pc.printf("data=%d red=%d blue=%d yellow=%d white_l=%d ml=%d m=%d mr=%d r=%d\r\n",data_1,red,blue,yellow,white_l,white_ml,white_m,white_mr,white_r);
     //pc.printf("out=%d,dir=%d,sa_dh=%d,now=%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\r\n",out,dir,sa_dh,now,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12);       
     if(file==1)fprintf(fp,"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",out,now,fixed_rot_data,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12);   
@@ -146,12 +146,13 @@
 #ifdef RIVER
 /*0*/    
        blue_led=1;
+       yellow_pin=0;
     while(1){   //ライントレース
         LF();
-        out-=50;
+        //out-=50;
         judge_color();
         servo.pulsewidth_us(out);
-        //pc.printf("kyori_m45=%f,theta=%d linetrace\r\n",kyori_m45,fixed_rot_data);
+        pc.printf("river kyori_m45=%f,theta=%d linetrace\r\n",kyori_m45,fixed_rot_data);
         //pc.printf("out=%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\r\n",out,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12);
         
         if(blue==1){    //青になったらリバースタート
@@ -168,11 +169,11 @@
      //gyro_keisan();
      
      LF();     //基本的にライントレース
-     if(fixed_rot_data<-60)out=gyro_pid(-45,5,0,0);//out=naka-150;   //最初は角度も利用
+     if(fixed_rot_data<-60)out=gyro_pid(-45,6,0,0);//500   //最初は角度も利用
      //if(fixed_rot_data<-75)out=naka-250;
     
      led1=1;
-     //pc.printf("kyori_m45=%f,theta=%d\r\n",kyori_m45,fixed_rot_data);
+     pc.printf("kyori_m45=%f,theta=%d\r\n",kyori_m45,fixed_rot_data);
      if(river_flag==1){   
         kyori_reset();
         river_flag=0; 
@@ -190,8 +191,8 @@
     while(1){     //向きを90度に合わせる。
        gyro_keisan();
        led2=1;
-       //pc.printf("2 theta=%d\r\n",fixed_rot_data);
-       out=gyro_pid(-90-phai,7,0,0);//705
+       pc.printf("2 theta=%d\r\n",fixed_rot_data);
+       out=gyro_pid(-90-phai,6,0,2);//705
        save_servo();
        servo.pulsewidth_us(out);
        if(river_flag==1){
@@ -208,8 +209,8 @@
     while(1){    //直進する
      led3=1;
      gyro_keisan();
-     //pc.printf("%f,%f,theta=%d,phai=%f,out=%d\r\n",kyori_m90,Z,fixed_rot_data,phai,out);
-     out=gyro_pid(-90-phai,6,0.1,0);
+     pc.printf("%f,%f,theta=%d,phai=%f,out=%d\r\n",kyori_m90,Z,fixed_rot_data,phai,out);
+     out=gyro_pid(-90-phai,5,0,0);//6 0.1 0
      save_servo();
      servo.pulsewidth_us(out);
      if(kyori_m90>Z){   //Zmm進んだら
@@ -228,7 +229,9 @@
          LF();
          lf_downhill();
          //pc.printf("%f,%d,%d\r\n",kyori_m90,Ec_count,sa_dh);
-         if(white_r==1||white_l==1||white_mr==1||white_ml==1||white_m==1||kyori_m90>T)break;    
+         static int haku;
+         if(white_r==1||white_l==1||white_mr==1||white_ml==1||white_m==1||kyori_m90>T)haku++;
+         if(haku>5)break;    
          }      
         
      if(kyori_m90>T){   
@@ -259,11 +262,12 @@
 ////////////////////////////////////////////////////////////////////////////
 
 #ifdef DOWNHILL
+    yellow_pin=0;
 while(1){
     static int q;
     q++;
     blue_led=1;
-   // pc.printf("a kyori_dh=%f, theta=%d, out=%d,dir=%d,sa=%f,now=%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\r\n",kyori_dh,fixed_rot_data,out,dir,sa,now,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12);  
+    //pc.printf("downhill kyori_dh=%f, theta=%d, out=%d,dir=%d,sa=%f,now=%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\r\n",kyori_dh,fixed_rot_data,out,dir,sa,now,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12);  
     judge_color();
     LF();
     back_cds();
@@ -306,13 +310,13 @@
     
     yellow_pin=1;
     if(file==1)fprintf(fp,"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%f,%f,%f\n",out,now,fixed_rot_data,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,kyori_dh,kyori,kyori_f);   
-    if(file==1&&switch_1==0)fclose( fp );
+    if(file==1&&switch_1==1)fclose( fp );
     LF();
     gyro_keisan();
     lf_downhill();
     judge_color();
     back_cds();
-    //pc.printf("kyori_f=%f,sa_dh=%d, theta=%d, out=%d,dir=%d,sa=%f,now=%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\r\n",kyori_f,sa_dh,fixed_rot_data,out,dir,sa,now,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12);  
+   // pc.printf("kyori_f=%f,sa_dh=%d, theta=%d, out=%d,dir=%d,sa=%f,now=%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\r\n",kyori_f,sa_dh,fixed_rot_data,out,dir,sa,now,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12);  
     
     if(kyori_dh>50){
     static int f;
@@ -328,10 +332,16 @@
         }
        }
     
-    if(kyori_dh>600&&kyori_dh<900){out-=75;led1=1;}
+    if(kyori_dh>600&&kyori_dh<900){out-=75;led1=1;
+                                    if(kyori_f>23)out-=25;
+                                    }
     else if(kyori_dh>1200&&kyori_dh<1700){out+=25;led2=1;}
-    else if(kyori_dh>1700&&kyori_dh<2700){out+=250;led3=1;}
-    else if(kyori_dh>2800&&kyori_dh<3300){out-=50;led4=1;}
+    else if(kyori_dh>1700&&kyori_dh<2700){out+=250;led3=1;
+                                    if(kyori_f>23)out+=25;
+                                    }
+    else if(kyori_dh>2800&&kyori_dh<3300){out-=50;led4=1;
+                                    if(kyori_f>23)out-=25;
+                                    }
     else{
         led1=0;
         led2=0;
@@ -344,9 +354,13 @@
           led2=1;
           led3=1;
           led4=1;
-          if(abs(kyori_f)<1)end++;
           blue_led=0;
           if(file==1)fclose( fp );
+          
+          if(out<naka-200)out=naka-200;      //曲がりすぎを防ぐ
+          else if(out>naka+200)out=naka+200;
+          
+          if(abs(kyori_f)<1)end++;
           if(end>30)while(1){}    
          } 
     save_servo();