[[2011a]]

#define R OUT_A
#define L OUT_C
#define SLIDE OUT_B
#define RL SENSOR_1
#define LL SENSOR_3
#define NINETY 10
#define isWhite <40
#define isBlack >40
#define ANGLE 10
#define GOAL 500

void go_straight(){
	OnFwd (R+L);
}

void go_straight_s(){
	OnFwd (R+L);
	Off (R+L);
	Wait (1);
}

void go_back(){
	OnRev (R+L);
}

void go_back_s(){
        OnRev (R+L);
        Off(R+L);
        Wait(1);
}

void tr(){
	OnFwd (L);
	OnRev (R);
	Off (R+L);
	Wait (1);
}

void tl(){
	OnFwd (R);
	OnRev (L);
	Off (R+L);
	Wait (1);
}

void stop_moving(){
	Off (R+L);
	Wait (100);
}

void out(){
	OnFwd (SLIDE);
	Wait (50);
	Off (SLIDE);
}

void set_in(){
	OnRev (SLIDE);
	Wait (50);
	Off (SLIDE);
}

task main (){
	SetSensor (RL, SENSOR_LIGHT);
	SetSensor (LL, SENSOR_LIGHT);
	
	int blackline = 0;
	while (1){
		go_straight_s();
		if (blackline >= 2) break;
		if (RL isBlack && LL isBlack){
			PlaySound (SOUND_CLICK);
			blackline++;
			while (RL isBlack || LL isBlack) go_straight_s();
		}
	}
	
	stop_moving();
        PlaySound (SOUND_CLICK);
        OnRev(R+L);
        Wait(5);
	Off (R+L);
	OnFwd(R);
	OnRev(L);
        Wait(20);
	Off (R+L);
	while (1){
		if (RL isBlack && LL isBlack) break;
	        if (RL isWhite && LL isWhite) {
                        go_back_s();
		} else if (RL isBlack && LL isWhite) {
			tr();
		} else if (RL isWhite && LL isBlack) {
			tl();
		}
	}
        PlaySound(SOUND_UP);
	while (1){
		stop_moving();
		SendMessage (1);
		
		tl();
		Wait (NINETY);
		stop_moving();
		
		Wait (300);
		
		tr();
		Wait (70);
		go_straight_s();
		Wait (GOAL);
		
		stop_moving();
		out();
		
		set_in();
		go_back();
		Wait (GOAL);
		tl();
		Wait (ANGLE);
		Wait (ANGLE);
		stop_moving();
	}
}


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