[[2016a/Member]]
*プログラム [#k22b8b3f]

 #define BLACK 43
 #define WHITE 54 
 #define SPEED1 19
 #define go_forward OnFwd(OUT_BC,SPEED1);
 #define turn_left(t,w1,w2) OnFwd(OUT_B,w1); OnRev(OUT_C,w2); Wait(t);Off(OUT_BC);
 #define turn_left1 OnFwd(OUT_B,SPEED1);Off(OUT_C);
 #define turn_left2 OnFwd(OUT_B,SPEED1);OnRev(OUT_C,SPEED1);
 #define turn_right(t,w1,w2) OnFwd(OUT_C,w1); OnRev(OUT_A,w2); Wait(t);Off(OUT_BC);
 #define turn_right1 Off(OUT_B);OnFwd(OUT_C,SPEED1);
 define turn_right2 OnRev(OUT_B,SPEED1);OnFwd(OUT_C,SPEED1);
 #define STEP 1
 #define short_break Off(OUT_BC);Wait(1000);PlaySound(SOUND_UP);
 #define cross_line go_forward;Wait(200);Off(OUT_BC);Wait(1000);
 #define nMAX 350
 void line_trace()
 {
 SetSensorLight(S1);
 int nOnline=0;
     while (nOnline < nMAX ) {
     if (SENSOR_1 < BLACK-5) {       
       turn_right2; 
       nOnline++;                    
     } else {
     if (SENSOR_1 < BLACK) {
     turn_right1;
     } else if (SENSOR_1 < WHITE) { 
       go_forward;
     } else if (SENSOR_1 < WHITE+5) { 
       turn_left1;               
     } else {                         
       turn_left2;                   
     }
     nOnline=0;
     }
     Wait(STEP);
    }
    short_break;
    nOnline=0;
 Off(OUT_BC);
 }
 void line_closs()
 {
	cross_line;
	SetSensorLight(S1);
	do{
	if (SENSOR_1 < BLACK) {       
       turn_right1;                    
	} else if (SENSOR_1 > WHITE) {
	turn_left2;
	}
	}
       while((SENSOR_1 > BLACK)&&(SENSOR_1 < WHITE));
       Off(OUT_BC);
 }
 void line_right()
 {
	cross_line;
	turn_right(1000,40,40);
	SetSensorLight(S1);
	do{
	if (SENSOR_1 < BLACK) {       
       turn_right1;                    
	} else if (SENSOR_1 > WHITE) {
	turn_left2;
	}
	}
       while((SENSOR_1 > BLACK)&&(SENSOR_1 < WHITE));
       Off(OUT_BC);
 }
 void line_left()
 {
	cross_line;
	turn_left(1000,40,40)
	SetSensorLight(S1);
	do{
	if (SENSOR_1 < BLACK) {       
       turn_right1;                    
	} else if (SENSOR_1 > WHITE) {
	turn_left2;
	}
	}
       while((SENSOR_1 > BLACK)&&(SENSOR_1 < WHITE));
       Off(OUT_BC);
 }
 void last_move()
 {
	go_forward;
	Wait(1500);
	Off(OUT_BC);
 }
 task main()
 {
	line_trace();
       line_right();
	line_trace();
	line_closs();
	line_trace();
	line_closs();
	line_trace();
	line_right();
	line_trace();
	line_right();
       line_trace();
       last_move();
 }

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS