nakao kanaki / Mbed 2 deprecated Eco_ziguzagu

Dependencies:   mbed

Committer:
namikosaito
Date:
Thu Mar 03 13:20:50 2016 +0000
Revision:
7:3c273b3b19b1
Parent:
6:c28aa7d26eba
Child:
8:340da692d865
3_3???????????????????????????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
namikosaito 0:77188ca200ce 1 #include "mbed.h"
namikosaito 0:77188ca200ce 2 #include "math.h"
namikosaito 0:77188ca200ce 3 #include "LF2.h"
namikosaito 0:77188ca200ce 4 #include "color.h"
namikosaito 0:77188ca200ce 5 #include "enc_gyro.h"
namikosaito 0:77188ca200ce 6
namikosaito 0:77188ca200ce 7 /*ここで切り替え(強制)*/
namikosaito 3:04f6fe153dbc 8
namikosaito 6:c28aa7d26eba 9 //#define SLOPE
namikosaito 6:c28aa7d26eba 10 //#define TURN
namikosaito 6:c28aa7d26eba 11 //#define RIVER
namikosaito 0:77188ca200ce 12 //#define RIVER2
namikosaito 0:77188ca200ce 13 #define DOWNHILL
namikosaito 3:04f6fe153dbc 14
namikosaito 0:77188ca200ce 15
namikosaito 0:77188ca200ce 16 /*白との差*/
namikosaito 3:04f6fe153dbc 17 #define bw 450 //blueとwhite
namikosaito 4:795055e031c3 18 #define yw 400 //yellow ちょっと厳しめにすること。
namikosaito 1:f9c953ddc87a 19 #define rw 200 //red(orange)
namikosaito 0:77188ca200ce 20
namikosaito 4:795055e031c3 21 LocalFileSystem local("local");
namikosaito 4:795055e031c3 22 FILE *fp;
namikosaito 4:795055e031c3 23 int file;
namikosaito 0:77188ca200ce 24 Serial pc(USBTX, USBRX);
namikosaito 0:77188ca200ce 25 PwmOut servo(p25);
namikosaito 0:77188ca200ce 26 PwmOut blue_led(p21);
namikosaito 0:77188ca200ce 27
namikosaito 0:77188ca200ce 28 void save_servo(void){ //サーボの振れすぎを防ぐ。
namikosaito 0:77188ca200ce 29 if(out>2250)out=2250;
namikosaito 0:77188ca200ce 30 else if(out<650)out=650;
namikosaito 0:77188ca200ce 31 }
namikosaito 0:77188ca200ce 32
namikosaito 0:77188ca200ce 33
namikosaito 0:77188ca200ce 34 /*関数*/
namikosaito 0:77188ca200ce 35 void field(void); //フィールドの色を見る
namikosaito 0:77188ca200ce 36 int wr_flag,wl_flag;
namikosaito 0:77188ca200ce 37 int lf_downhill(void); //ダウンヒルのライントレース用。他のところでも使ってるけど。cdsの最大値、最小値、その差を出す。
namikosaito 0:77188ca200ce 38 int sa_dh,max_dh,min_dh; //lf_downhillで使う変数。
namikosaito 7:3c273b3b19b1 39 void back_cds(void); //白線の左右どちらに振れたのか見る。(cds)
namikosaito 0:77188ca200ce 40 int river_turn(void); //リバーの最初の曲がりをcdsで線を読みとる
namikosaito 0:77188ca200ce 41
namikosaito 0:77188ca200ce 42 int back_r_flag=0;
namikosaito 0:77188ca200ce 43 int back_l_flag=0;
namikosaito 0:77188ca200ce 44
namikosaito 0:77188ca200ce 45 float yoko; //上りラインに対しての左右の振れ
namikosaito 0:77188ca200ce 46 int kakudo;
namikosaito 0:77188ca200ce 47
namikosaito 0:77188ca200ce 48 int start_flag=1; //fieldで使用
namikosaito 0:77188ca200ce 49 int rg_flag_1,rg_flag_2,rg_count=0;
namikosaito 0:77188ca200ce 50 int gr_flag_1,gr_flag_2,gr_count=0;
namikosaito 0:77188ca200ce 51
namikosaito 0:77188ca200ce 52 ///////////////////////////////////////////////////////////////////////////////////////////////
namikosaito 0:77188ca200ce 53
namikosaito 0:77188ca200ce 54
namikosaito 0:77188ca200ce 55 int main(){
namikosaito 0:77188ca200ce 56 mcp.format(7,0);
namikosaito 0:77188ca200ce 57 mcp.frequency(1000000);
namikosaito 0:77188ca200ce 58 pc.baud(115200);
namikosaito 0:77188ca200ce 59 gyro.format(16,3);
namikosaito 0:77188ca200ce 60 Enc.attach(&distance, sp_t);
namikosaito 0:77188ca200ce 61 servo.period_ms(20); //サーボ周期
namikosaito 0:77188ca200ce 62 servo.pulsewidth_us(naka);
namikosaito 6:c28aa7d26eba 63 //while(1){}
namikosaito 0:77188ca200ce 64 /*キャリブレーション*/
namikosaito 0:77188ca200ce 65 calibration();
namikosaito 6:c28aa7d26eba 66
namikosaito 6:c28aa7d26eba 67 /*ファイル*/
namikosaito 7:3c273b3b19b1 68 if(switch_1==1){
namikosaito 5:f90bd93f8558 69 if ( NULL == (fp = fopen( "/local/test.csv", "w" )) )error( "" );
namikosaito 5:f90bd93f8558 70 file=1;
namikosaito 5:f90bd93f8558 71 }
namikosaito 3:04f6fe153dbc 72 /*
namikosaito 1:f9c953ddc87a 73 if(switch_1==1&&switch_2==0&&switch_3==0){ //最初から
namikosaito 0:77188ca200ce 74 #define SLOPE
namikosaito 0:77188ca200ce 75 #define TURN
namikosaito 0:77188ca200ce 76 #define RIVER
namikosaito 0:77188ca200ce 77 #define DOWNHILL
namikosaito 0:77188ca200ce 78 }
namikosaito 0:77188ca200ce 79
namikosaito 3:04f6fe153dbc 80 else if(switch_1==0&&switch_2==1&&switch_3==0){ //リバーから
namikosaito 0:77188ca200ce 81 #define RIVER
namikosaito 0:77188ca200ce 82 #define DOWNHILL
namikosaito 0:77188ca200ce 83 }
namikosaito 0:77188ca200ce 84
namikosaito 3:04f6fe153dbc 85 else if(switch_1==0&&switch_2==0&&switch_3==1){ //ダウンヒルから
namikosaito 3:04f6fe153dbc 86 kyori_reset();
namikosaito 0:77188ca200ce 87 #define DOWNHILL
namikosaito 2:864b823b1735 88 }
namikosaito 3:04f6fe153dbc 89 */
namikosaito 0:77188ca200ce 90 #ifdef SLOPE
namikosaito 0:77188ca200ce 91 while(1){
namikosaito 1:f9c953ddc87a 92 //pc.printf("%f\r\n",kyori_nobori);
namikosaito 0:77188ca200ce 93 //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);
namikosaito 3:04f6fe153dbc 94 //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);
namikosaito 4:795055e031c3 95 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);
namikosaito 7:3c273b3b19b1 96 if(file==1&&switch_1==0)fclose( fp );
namikosaito 0:77188ca200ce 97 field();
namikosaito 0:77188ca200ce 98 LF();
namikosaito 0:77188ca200ce 99 //back();
namikosaito 1:f9c953ddc87a 100 back_cds();
namikosaito 0:77188ca200ce 101 save_servo();
namikosaito 0:77188ca200ce 102 servo.pulsewidth_us(out);
namikosaito 0:77188ca200ce 103
namikosaito 6:c28aa7d26eba 104 if(rg_count==0&&gr_count==1){led1=1;blue_led=1;}
namikosaito 4:795055e031c3 105 if(rg_count==1&&gr_count==1){led2=1;blue_led=0;}
namikosaito 6:c28aa7d26eba 106 if(rg_count==1&&gr_count==2){led3=1;blue_led=1;}
namikosaito 4:795055e031c3 107 if(rg_count==2&&gr_count==2){led4=1;blue_led=0;}
namikosaito 0:77188ca200ce 108 if(rg_count==2&&gr_count==3){
namikosaito 0:77188ca200ce 109 led1=0;
namikosaito 0:77188ca200ce 110 led2=0;
namikosaito 0:77188ca200ce 111 led3=0;
namikosaito 0:77188ca200ce 112 led4=0;
namikosaito 0:77188ca200ce 113 break;
namikosaito 0:77188ca200ce 114 }
namikosaito 0:77188ca200ce 115 }
namikosaito 0:77188ca200ce 116 #endif
namikosaito 0:77188ca200ce 117
namikosaito 0:77188ca200ce 118 /////////////////////////////////////////////////////////////////////////////////////
namikosaito 0:77188ca200ce 119
namikosaito 0:77188ca200ce 120 #ifdef TURN
namikosaito 6:c28aa7d26eba 121 blue_led=1;
namikosaito 0:77188ca200ce 122 while(1){
namikosaito 5:f90bd93f8558 123 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);
namikosaito 7:3c273b3b19b1 124 if(file==1&&switch_1==0)fclose( fp );
namikosaito 1:f9c953ddc87a 125 gyro_keisan();
namikosaito 6:c28aa7d26eba 126 out=naka+325;//300;
namikosaito 0:77188ca200ce 127 servo.pulsewidth_us(out);
namikosaito 0:77188ca200ce 128 led4=1;
namikosaito 3:04f6fe153dbc 129 if(fixed_rot_data<-60)break;//前は60°だった
namikosaito 0:77188ca200ce 130 }
namikosaito 0:77188ca200ce 131
namikosaito 0:77188ca200ce 132 while(1){
namikosaito 5:f90bd93f8558 133 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);
namikosaito 7:3c273b3b19b1 134 if(file==1&&switch_1==0)fclose( fp );
namikosaito 0:77188ca200ce 135 judge_color();
namikosaito 1:f9c953ddc87a 136 lf_downhill();
namikosaito 0:77188ca200ce 137 led3=1;
namikosaito 1:f9c953ddc87a 138 if(white_l==1||white_r==1||white_mr==1||white_ml==1||white_m==1||sa_dh<rw)break;
namikosaito 0:77188ca200ce 139 }
namikosaito 0:77188ca200ce 140
namikosaito 0:77188ca200ce 141 #endif
namikosaito 0:77188ca200ce 142
namikosaito 0:77188ca200ce 143 ////////////////////////////////////////////////////////////////////////////////////
namikosaito 0:77188ca200ce 144
namikosaito 0:77188ca200ce 145 #ifdef RIVER
namikosaito 0:77188ca200ce 146 /*0*/
namikosaito 6:c28aa7d26eba 147 blue_led=1;
namikosaito 0:77188ca200ce 148 while(1){ //ライントレース
namikosaito 0:77188ca200ce 149 LF();
namikosaito 0:77188ca200ce 150 out-=50;
namikosaito 0:77188ca200ce 151 judge_color();
namikosaito 0:77188ca200ce 152 servo.pulsewidth_us(out);
namikosaito 2:864b823b1735 153 //pc.printf("kyori_m45=%f,theta=%d linetrace\r\n",kyori_m45,fixed_rot_data);
namikosaito 0:77188ca200ce 154 //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);
namikosaito 0:77188ca200ce 155
namikosaito 0:77188ca200ce 156 if(blue==1){ //青になったらリバースタート
namikosaito 0:77188ca200ce 157 river_flag=1;
namikosaito 3:04f6fe153dbc 158 blue_led=0;
namikosaito 0:77188ca200ce 159 out=naka-250;
namikosaito 0:77188ca200ce 160 servo.pulsewidth_us(out);
namikosaito 0:77188ca200ce 161 break;
namikosaito 0:77188ca200ce 162 }
namikosaito 3:04f6fe153dbc 163 }
namikosaito 0:77188ca200ce 164
namikosaito 0:77188ca200ce 165 /*1*/
namikosaito 0:77188ca200ce 166 while(1){ //初めに曲がる直前まで
namikosaito 0:77188ca200ce 167 //gyro_keisan();
namikosaito 0:77188ca200ce 168
namikosaito 0:77188ca200ce 169 LF(); //基本的にライントレース
namikosaito 0:77188ca200ce 170 if(fixed_rot_data<-60)out=gyro_pid(-45,5,0,0);//out=naka-150; //最初は角度も利用
namikosaito 0:77188ca200ce 171 //if(fixed_rot_data<-75)out=naka-250;
namikosaito 0:77188ca200ce 172
namikosaito 0:77188ca200ce 173 led1=1;
namikosaito 0:77188ca200ce 174 //pc.printf("kyori_m45=%f,theta=%d\r\n",kyori_m45,fixed_rot_data);
namikosaito 0:77188ca200ce 175 if(river_flag==1){
namikosaito 0:77188ca200ce 176 kyori_reset();
namikosaito 0:77188ca200ce 177 river_flag=0;
namikosaito 0:77188ca200ce 178 }
namikosaito 0:77188ca200ce 179 servo.pulsewidth_us(out);
namikosaito 0:77188ca200ce 180 if((river_turn()==1&&kyori_m45>Runder)||kyori>400||kyori_m45>R){ //Rmm進んだらorcdsで直角検知
namikosaito 0:77188ca200ce 181 river_theta=fixed_rot_data;
namikosaito 0:77188ca200ce 182 river_flag=1;
namikosaito 0:77188ca200ce 183 break;
namikosaito 0:77188ca200ce 184 }}
namikosaito 0:77188ca200ce 185
namikosaito 0:77188ca200ce 186 river_keisan(); //角度と距離の補正(いらないかも・・)
namikosaito 0:77188ca200ce 187
namikosaito 0:77188ca200ce 188 /*2*/
namikosaito 0:77188ca200ce 189 while(1){ //向きを90度に合わせる。
namikosaito 0:77188ca200ce 190 gyro_keisan();
namikosaito 0:77188ca200ce 191 led2=1;
namikosaito 0:77188ca200ce 192 //pc.printf("2 theta=%d\r\n",fixed_rot_data);
namikosaito 1:f9c953ddc87a 193 out=gyro_pid(-90-phai,7,0,0);//705
namikosaito 0:77188ca200ce 194 save_servo();
namikosaito 0:77188ca200ce 195 servo.pulsewidth_us(out);
namikosaito 0:77188ca200ce 196 if(river_flag==1){
namikosaito 0:77188ca200ce 197 kyori_reset();
namikosaito 0:77188ca200ce 198 river_flag=0;
namikosaito 0:77188ca200ce 199 }
namikosaito 0:77188ca200ce 200 if(fixed_rot_data<-85-phai){ //ジャイロの角度が合ったら
namikosaito 0:77188ca200ce 201 out=naka;
namikosaito 0:77188ca200ce 202 break;
namikosaito 0:77188ca200ce 203 }
namikosaito 0:77188ca200ce 204 }
namikosaito 0:77188ca200ce 205
namikosaito 0:77188ca200ce 206 /*3*/
namikosaito 0:77188ca200ce 207 while(1){ //直進する
namikosaito 0:77188ca200ce 208 led3=1;
namikosaito 0:77188ca200ce 209 gyro_keisan();
namikosaito 1:f9c953ddc87a 210 //pc.printf("%f,%f,theta=%d,phai=%f,out=%d\r\n",kyori_m90,Z,fixed_rot_data,phai,out);
namikosaito 0:77188ca200ce 211 out=gyro_pid(-90-phai,6,0.1,0);
namikosaito 0:77188ca200ce 212 save_servo();
namikosaito 0:77188ca200ce 213 servo.pulsewidth_us(out);
namikosaito 0:77188ca200ce 214 if(kyori_m90>Z){ //Zmm進んだら
namikosaito 0:77188ca200ce 215 out=naka-200; //前は100
namikosaito 0:77188ca200ce 216 white_r=0;
namikosaito 0:77188ca200ce 217 white_l=0;
namikosaito 0:77188ca200ce 218 break;
namikosaito 0:77188ca200ce 219 }
namikosaito 0:77188ca200ce 220 }
namikosaito 0:77188ca200ce 221
namikosaito 0:77188ca200ce 222 /*4*/
namikosaito 0:77188ca200ce 223 while(1){ //白線を見つけるまでそのまま
namikosaito 0:77188ca200ce 224 gyro_keisan();
namikosaito 0:77188ca200ce 225 led4=1;
namikosaito 0:77188ca200ce 226 judge_color();
namikosaito 0:77188ca200ce 227 LF();
namikosaito 0:77188ca200ce 228 lf_downhill();
namikosaito 4:795055e031c3 229 //pc.printf("%f,%d,%d\r\n",kyori_m90,Ec_count,sa_dh);
namikosaito 3:04f6fe153dbc 230 if(white_r==1||white_l==1||white_mr==1||white_ml==1||white_m==1||kyori_m90>T)break;
namikosaito 0:77188ca200ce 231 }
namikosaito 0:77188ca200ce 232
namikosaito 0:77188ca200ce 233 if(kyori_m90>T){
namikosaito 4:795055e031c3 234 servo.pulsewidth_us(naka-400);
namikosaito 0:77188ca200ce 235 wait(0.5);
namikosaito 0:77188ca200ce 236 }
namikosaito 0:77188ca200ce 237
namikosaito 0:77188ca200ce 238 /*5*/
namikosaito 0:77188ca200ce 239 while(1){ //ライントレースに戻る
namikosaito 0:77188ca200ce 240 gyro_keisan();
namikosaito 0:77188ca200ce 241 LF();
namikosaito 0:77188ca200ce 242 back_cds();
namikosaito 0:77188ca200ce 243 out-=50;
namikosaito 0:77188ca200ce 244 if(fixed_rot_data<-45)out-=50;
namikosaito 0:77188ca200ce 245 if(fixed_rot_data<-75)out-=100;
namikosaito 0:77188ca200ce 246
namikosaito 0:77188ca200ce 247 servo.pulsewidth_us(out);
namikosaito 0:77188ca200ce 248 judge_color();
namikosaito 0:77188ca200ce 249 led1=0;
namikosaito 0:77188ca200ce 250 led2=0;
namikosaito 0:77188ca200ce 251 led3=0;
namikosaito 0:77188ca200ce 252 led4=0;
namikosaito 0:77188ca200ce 253 if(red==1){kyori_reset();break;}
namikosaito 0:77188ca200ce 254 }
namikosaito 0:77188ca200ce 255
namikosaito 0:77188ca200ce 256 #endif
namikosaito 0:77188ca200ce 257
namikosaito 0:77188ca200ce 258 ////////////////////////////////////////////////////////////////////////////
namikosaito 0:77188ca200ce 259
namikosaito 0:77188ca200ce 260 #ifdef DOWNHILL
namikosaito 0:77188ca200ce 261 while(1){
namikosaito 0:77188ca200ce 262 static int q;
namikosaito 0:77188ca200ce 263 q++;
namikosaito 7:3c273b3b19b1 264 blue_led=1;
namikosaito 4:795055e031c3 265 // 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);
namikosaito 0:77188ca200ce 266 judge_color();
namikosaito 0:77188ca200ce 267 LF();
namikosaito 0:77188ca200ce 268 back_cds();
namikosaito 7:3c273b3b19b1 269 if(file==1)fprintf(fp,"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%f,%f\n",out,now,fixed_rot_data,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,kyori_dh,kyori);
namikosaito 0:77188ca200ce 270 servo.pulsewidth_us(out);
namikosaito 0:77188ca200ce 271 if(yellow==1&&q>30){ //黄色に入る
namikosaito 0:77188ca200ce 272 kyori_reset();
namikosaito 6:c28aa7d26eba 273 yellow_pin=1;
namikosaito 0:77188ca200ce 274 downhill=1;
namikosaito 0:77188ca200ce 275 break;
namikosaito 0:77188ca200ce 276 }
namikosaito 4:795055e031c3 277 }
namikosaito 7:3c273b3b19b1 278
namikosaito 7:3c273b3b19b1 279 if(file==1)fprintf(fp,"downhill\n");
namikosaito 7:3c273b3b19b1 280
namikosaito 0:77188ca200ce 281 while(1){
namikosaito 7:3c273b3b19b1 282 /*PID調整*/
namikosaito 7:3c273b3b19b1 283 if(kyori_f<5){
namikosaito 7:3c273b3b19b1 284 zure1=35;//25;
namikosaito 7:3c273b3b19b1 285 zure2=65;//50;
namikosaito 7:3c273b3b19b1 286 zure3=125;//100;
namikosaito 7:3c273b3b19b1 287 zure4=200;//175;
namikosaito 7:3c273b3b19b1 288 zure5=300;
namikosaito 7:3c273b3b19b1 289 }
namikosaito 7:3c273b3b19b1 290 else{
namikosaito 7:3c273b3b19b1 291 zure3=150;
namikosaito 7:3c273b3b19b1 292 zure4=250;
namikosaito 7:3c273b3b19b1 293 zure5=350;
namikosaito 7:3c273b3b19b1 294 }
namikosaito 7:3c273b3b19b1 295
namikosaito 7:3c273b3b19b1 296
namikosaito 6:c28aa7d26eba 297 yellow_pin=1;
namikosaito 6:c28aa7d26eba 298 if(file==1)fprintf(fp,"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%f,%f\n",out,now,fixed_rot_data,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,kyori_dh,kyori);
namikosaito 7:3c273b3b19b1 299 if(file==1&&switch_1==0)fclose( fp );
namikosaito 0:77188ca200ce 300 LF();
namikosaito 0:77188ca200ce 301 lf_downhill();
namikosaito 0:77188ca200ce 302 judge_color();
namikosaito 2:864b823b1735 303 back_cds();
namikosaito 7:3c273b3b19b1 304 //pc.printf("kyori_dh=%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);
namikosaito 0:77188ca200ce 305
namikosaito 2:864b823b1735 306 if(kyori_dh>50){
namikosaito 2:864b823b1735 307 static int f;
namikosaito 2:864b823b1735 308 if(sa_dh>yw+50){
namikosaito 2:864b823b1735 309 f=now;
namikosaito 2:864b823b1735 310 }
namikosaito 2:864b823b1735 311 else if(sa_dh<yw&&f>2){
namikosaito 3:04f6fe153dbc 312 out+=200;//naka+300;
namikosaito 2:864b823b1735 313 }
namikosaito 2:864b823b1735 314 else if(sa_dh<yw&&f<-2){
namikosaito 3:04f6fe153dbc 315 out-=200;//naka-300;
namikosaito 3:04f6fe153dbc 316
namikosaito 2:864b823b1735 317 }
namikosaito 3:04f6fe153dbc 318 }
namikosaito 2:864b823b1735 319
namikosaito 1:f9c953ddc87a 320 if(kyori_dh>600&&kyori_dh<900){out-=75;led1=1;}
namikosaito 1:f9c953ddc87a 321 else if(kyori_dh>1200&&kyori_dh<1700){out+=25;led2=1;}
namikosaito 7:3c273b3b19b1 322 else if(kyori_dh>1700&&kyori_dh<2800){out+=250;led3=1;}
namikosaito 1:f9c953ddc87a 323 else{
namikosaito 0:77188ca200ce 324 led1=0;
namikosaito 0:77188ca200ce 325 led2=0;
namikosaito 0:77188ca200ce 326 led3=0;
namikosaito 0:77188ca200ce 327 }
namikosaito 3:04f6fe153dbc 328
namikosaito 7:3c273b3b19b1 329 if(blue_pin==1&&kyori_dh>2800){ //最後の青に入ったら。
namikosaito 7:3c273b3b19b1 330 static int end;
namikosaito 7:3c273b3b19b1 331 if(abs(kyori_f)<1)end++;
namikosaito 7:3c273b3b19b1 332 blue_led=0;
namikosaito 7:3c273b3b19b1 333 if(file==1)fclose( fp );
namikosaito 7:3c273b3b19b1 334 if(end>30)while(1){}
namikosaito 6:c28aa7d26eba 335 }
namikosaito 0:77188ca200ce 336 save_servo();
namikosaito 0:77188ca200ce 337 servo.pulsewidth_us(out);
namikosaito 0:77188ca200ce 338 }
namikosaito 0:77188ca200ce 339 #endif
namikosaito 0:77188ca200ce 340
namikosaito 0:77188ca200ce 341 }
namikosaito 0:77188ca200ce 342
namikosaito 0:77188ca200ce 343
namikosaito 0:77188ca200ce 344
namikosaito 0:77188ca200ce 345
namikosaito 0:77188ca200ce 346 //////////////////////////////////////////////////////////
namikosaito 0:77188ca200ce 347 int river_turn(void){
namikosaito 0:77188ca200ce 348 static int ritu,ritu_flag;
namikosaito 0:77188ca200ce 349 ritu=0;
namikosaito 0:77188ca200ce 350 ritu_flag=0;
namikosaito 0:77188ca200ce 351 if(s1-s12>bw&&s1-s11>bw)ritu++;
namikosaito 0:77188ca200ce 352 if(s2-s12>bw&&s2-s11>bw)ritu++;
namikosaito 0:77188ca200ce 353 if(s3-s12>bw&&s3-s11>bw)ritu++;
namikosaito 0:77188ca200ce 354 if(s4-s12>bw&&s4-s11>bw)ritu++;
namikosaito 0:77188ca200ce 355 if(s5-s12>bw&&s5-s11>bw)ritu++;
namikosaito 0:77188ca200ce 356
namikosaito 0:77188ca200ce 357 if(ritu>3)ritu_flag=1;
namikosaito 0:77188ca200ce 358 //pc.printf("ritu=%d",ritu);
namikosaito 0:77188ca200ce 359
namikosaito 0:77188ca200ce 360 return ritu_flag;
namikosaito 0:77188ca200ce 361 }
namikosaito 0:77188ca200ce 362
namikosaito 0:77188ca200ce 363 int lf_downhill(void){
namikosaito 0:77188ca200ce 364 /*cdsの値の最大*/
namikosaito 0:77188ca200ce 365 max_dh=s1;
namikosaito 0:77188ca200ce 366 if(max_dh<s2)max_dh=s2;
namikosaito 0:77188ca200ce 367 if(max_dh<s3)max_dh=s3;
namikosaito 0:77188ca200ce 368 if(max_dh<s4)max_dh=s4;
namikosaito 0:77188ca200ce 369 if(max_dh<s5)max_dh=s5;
namikosaito 0:77188ca200ce 370 if(max_dh<s6)max_dh=s6;
namikosaito 0:77188ca200ce 371 if(max_dh<s7)max_dh=s7;
namikosaito 0:77188ca200ce 372 if(max_dh<s8)max_dh=s8;
namikosaito 0:77188ca200ce 373 if(max_dh<s9)max_dh=s9;
namikosaito 0:77188ca200ce 374 if(max_dh<s10)max_dh=s10;
namikosaito 0:77188ca200ce 375 if(max_dh<s11)max_dh=s11;
namikosaito 0:77188ca200ce 376 if(max_dh<s12)max_dh=s12;
namikosaito 0:77188ca200ce 377
namikosaito 0:77188ca200ce 378 /*cdsの値の最小*/
namikosaito 0:77188ca200ce 379 min_dh=s1;
namikosaito 0:77188ca200ce 380 if(min_dh>s2)min_dh=s2;
namikosaito 0:77188ca200ce 381 if(min_dh>s3)min_dh=s3;
namikosaito 0:77188ca200ce 382 if(min_dh>s4)min_dh=s4;
namikosaito 0:77188ca200ce 383 if(min_dh>s5)min_dh=s5;
namikosaito 0:77188ca200ce 384 if(min_dh>s6)min_dh=s6;
namikosaito 0:77188ca200ce 385 if(min_dh>s7)min_dh=s7;
namikosaito 0:77188ca200ce 386 if(min_dh>s8)min_dh=s8;
namikosaito 0:77188ca200ce 387 if(min_dh>s9)min_dh=s9;
namikosaito 0:77188ca200ce 388 if(min_dh>s10)min_dh=s10;
namikosaito 0:77188ca200ce 389 if(min_dh>s11)min_dh=s11;
namikosaito 0:77188ca200ce 390 if(min_dh>s12)min_dh=s12;
namikosaito 0:77188ca200ce 391
namikosaito 0:77188ca200ce 392 sa_dh=max_dh-min_dh;
namikosaito 0:77188ca200ce 393 return sa_dh;
namikosaito 0:77188ca200ce 394 }
namikosaito 0:77188ca200ce 395
namikosaito 0:77188ca200ce 396 void back_cds(void){ //cdsでラインのどちらにずれたのか検知する。
namikosaito 0:77188ca200ce 397 Find_White();
namikosaito 0:77188ca200ce 398
namikosaito 0:77188ca200ce 399 static int back_cds_l,back_cds_l2,back_cds_r,back_cds_r2,flag_loop;
namikosaito 0:77188ca200ce 400
namikosaito 0:77188ca200ce 401 if(now==-3||now==-4){
namikosaito 0:77188ca200ce 402 back_cds_l=0;
namikosaito 0:77188ca200ce 403 back_cds_r=1;
namikosaito 0:77188ca200ce 404 }
namikosaito 0:77188ca200ce 405 if(back_cds_r==1&&(now==-5||now==-6)){
namikosaito 0:77188ca200ce 406 back_cds_r2=1;
namikosaito 0:77188ca200ce 407 back_cds_r=0;
namikosaito 0:77188ca200ce 408 }
namikosaito 0:77188ca200ce 409
namikosaito 1:f9c953ddc87a 410 if(back_cds_r2==1&&now!=-6&&now!=-5){
namikosaito 0:77188ca200ce 411 while(1){
namikosaito 6:c28aa7d26eba 412 if(file==1)fprintf(fp,"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%f,%f\n",out,now,fixed_rot_data,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,kyori_dh,kyori);
namikosaito 7:3c273b3b19b1 413 if(file==1&&switch_1==0)fclose( fp );
namikosaito 0:77188ca200ce 414 LF();
namikosaito 0:77188ca200ce 415 gyro_keisan();
namikosaito 0:77188ca200ce 416 lf_downhill();
namikosaito 0:77188ca200ce 417 Find_White(); //いらないはず
namikosaito 7:3c273b3b19b1 418 out=naka-zure5-50;
namikosaito 0:77188ca200ce 419 save_servo();
namikosaito 0:77188ca200ce 420 servo.pulsewidth_us(out);
namikosaito 0:77188ca200ce 421 judge_color();
namikosaito 0:77188ca200ce 422 field();
namikosaito 4:795055e031c3 423 if(now==-6||now==-5)flag_loop=1;//6
namikosaito 4:795055e031c3 424 if((flag_loop==1&&(now==-4||now==-3))||white_r==1||white_mr==1||white_m==1||white_ml==1||white_l==1){//45
namikosaito 0:77188ca200ce 425 back_cds_r2=0;
namikosaito 0:77188ca200ce 426 flag_loop=0;
namikosaito 0:77188ca200ce 427 break;
namikosaito 0:77188ca200ce 428 }
namikosaito 1:f9c953ddc87a 429 }
namikosaito 1:f9c953ddc87a 430
namikosaito 1:f9c953ddc87a 431 if(now==3||now==4){
namikosaito 1:f9c953ddc87a 432 back_cds_l=1;
namikosaito 1:f9c953ddc87a 433 back_cds_r=0;
namikosaito 1:f9c953ddc87a 434 }
namikosaito 1:f9c953ddc87a 435
namikosaito 1:f9c953ddc87a 436 if(back_cds_l==1&&(now==5||now==6)){
namikosaito 1:f9c953ddc87a 437 back_cds_l=0;
namikosaito 1:f9c953ddc87a 438 back_cds_l2=1;
namikosaito 1:f9c953ddc87a 439 }
namikosaito 1:f9c953ddc87a 440
namikosaito 1:f9c953ddc87a 441 if(back_cds_l2==1&&now!=6&&now!=5){
namikosaito 1:f9c953ddc87a 442 while(1){
namikosaito 6:c28aa7d26eba 443 if(file==1)fprintf(fp,"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%f,%f\n",out,now,fixed_rot_data,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,kyori_dh,kyori);
namikosaito 7:3c273b3b19b1 444 if(file==1&&switch_1==0)fclose( fp );
namikosaito 1:f9c953ddc87a 445 LF();
namikosaito 1:f9c953ddc87a 446 gyro_keisan();
namikosaito 1:f9c953ddc87a 447 Find_White();
namikosaito 1:f9c953ddc87a 448 lf_downhill();
namikosaito 7:3c273b3b19b1 449 out=naka+zure5+50;
namikosaito 1:f9c953ddc87a 450 save_servo();
namikosaito 1:f9c953ddc87a 451 servo.pulsewidth_us(out);//1900
namikosaito 1:f9c953ddc87a 452 judge_color();
namikosaito 1:f9c953ddc87a 453 field();
namikosaito 4:795055e031c3 454 if(now==6||now==5)flag_loop=1;
namikosaito 4:795055e031c3 455 if((flag_loop==1&&(now==4||now==3))||white_r==1||white_mr==1||white_m==1||white_ml==1||white_l==1){ //調べて
namikosaito 1:f9c953ddc87a 456 back_cds_l2=0;
namikosaito 1:f9c953ddc87a 457 flag_loop=0;
namikosaito 1:f9c953ddc87a 458 break;
namikosaito 1:f9c953ddc87a 459 }
namikosaito 1:f9c953ddc87a 460 }
namikosaito 1:f9c953ddc87a 461 }
namikosaito 1:f9c953ddc87a 462 }
namikosaito 1:f9c953ddc87a 463 }
namikosaito 1:f9c953ddc87a 464
namikosaito 1:f9c953ddc87a 465
namikosaito 0:77188ca200ce 466 void field(void){ //上りにおいてフィールドの色を判断し、数えていく。
namikosaito 0:77188ca200ce 467 judge_color();
namikosaito 0:77188ca200ce 468
namikosaito 0:77188ca200ce 469 if((white_r==1||white_l==1||white_mr==1||white_ml==1||white_m==1)&&downhill==0)kyori_reset();
namikosaito 0:77188ca200ce 470 if((gr_flag_1==1&&red==1&&kyori_nobori>500)||(start_flag==1&&red==1)){
namikosaito 0:77188ca200ce 471 gr_flag_2=1;
namikosaito 0:77188ca200ce 472 }
namikosaito 0:77188ca200ce 473 if(gr_flag_2==1){
namikosaito 0:77188ca200ce 474 kyori_nobori_reset();
namikosaito 0:77188ca200ce 475 start_flag=0;
namikosaito 0:77188ca200ce 476 gr_flag_1=0;
namikosaito 0:77188ca200ce 477 gr_flag_2=0;
namikosaito 0:77188ca200ce 478 rg_flag_1=1;
namikosaito 0:77188ca200ce 479 gr_count++;
namikosaito 0:77188ca200ce 480 }
namikosaito 0:77188ca200ce 481 if(blue==1&&rg_flag_1==1&&kyori_nobori>500){
namikosaito 0:77188ca200ce 482 rg_flag_2=1;
namikosaito 0:77188ca200ce 483 }
namikosaito 0:77188ca200ce 484 if(rg_flag_2==1){
namikosaito 0:77188ca200ce 485 kyori_nobori_reset();
namikosaito 0:77188ca200ce 486 rg_flag_1=0;
namikosaito 0:77188ca200ce 487 rg_flag_2=0;
namikosaito 0:77188ca200ce 488 gr_flag_1=1;
namikosaito 0:77188ca200ce 489 rg_count++;
namikosaito 0:77188ca200ce 490 }
namikosaito 0:77188ca200ce 491 }