[[2016a/Member]]
[[asd:http://yakushi.shinshu-u.ac.jp/robotics/?2016a%2FMember%2FRaikouRK%2FMission2]]
*今回の課題 [#j300978a]

*指針と計画 [#yc06bf5b]
*失敗作と得られた知見 [#q89e7b13]
*完成した機体の解説 [#ldd6e701]
*プログラムの解説 [#j40ae6ea]
*結果とまとめ [#ifec02b2]



 #define Middle 45
 :::
 ~task main()
 {
	setting();
	STARTING_OPERATION();
	repeat(2)
	{
		TRACE();
		zensin();
	}
	//交差点からDへ向かう
	TRACE();	
	OnRev(OUT_C);
	Wait(25);
	TRACE();
	//誤差修正
	OnRev(OUT_A);
	Wait(95);
	Off(OUT_AC);
	//dに到着
	OnFwd(OUT_B);//コップつかむ
	Wait(250);
	start keep;
	TURN_180();//180°回転
	OnFwd(OUT_A);//Qの方向を向く
	OnRev(OUT_C);
	Wait(200);
	Off(OUT_AC);
	OnRev(OUT_AC);//進む
	Wait(100);
	Off(OUT_AC);
	//センサー使って進む
	while(SENSOR_1 > Middle-4)
	OnRev(OUT_AC);
	stop keep;
	//放す
	Off(OUT_AC);
	down();
 }

 sub setting()
 {	
	//初期設定(パワー、センサー)	
	SetSensor(SENSOR_1,SENSOR_LIGHT);			
	SetSensor(SENSOR_2,SENSOR_TOUCH);//モータB止める用
	SetSensor(SENSOR_3,SENSOR_LIGHT);	
	SetPower(OUT_AC,4);//タイヤ
	SetPower(OUT_B,7);//上下、開き
 }


 sub zensin()
 {
       OnRev(OUT_A);
       Wait(106);
       Off(OUT_A);
 }


 sub copjugde()
 //コップが前にくるまで前進
 {
        while(SENSOR_3 < 46)
	OnRev(OUT_AC);
	Off(OUT_AC);
	Wait(100);
 }

 task keep()
 //上でキープしておくただし、ラインとレースと並列動作させるためtaskで定義
 {
	while(1)
        {
		OnRev(OUT_B);
		Wait(1);
		OnFwd(OUT_B);
		Wait(1);
	}
 }

 sub TRACE()
 //トレース用メソッド
 {
	ClearTimer(0);
	while(FastTimer(0)<=42){
		if(SENSOR_1>Middle+4)//白 左旋回
		{
			OnFwd(OUT_C);
			OnRev(OUT_A);
			ClearTimer(0);
		}
		else if(SENSOR_1>Middle+2)//やや白 左折
		{
			Off(OUT_C);
			OnRev(OUT_A);
			ClearTimer(0);
		}
		else if(SENSOR_1>Middle)//直進
		{
			OnRev(OUT_AC);
			ClearTimer(0);
		}
		else if(SENSOR_1>Middle-2)//やや黒 右折
		{
			Off(OUT_A);
			OnRev(OUT_C);
		}
		else //黒 右旋回
		{
			OnFwd(OUT_A);
			OnRev(OUT_C);
		}	
	}
	Off(OUT_AC);
	PlaySound(SOUND_FAST_UP);//トレース終了、交差点認識
 }


 sub down()
 //下に下げる動作
 {
	OnRev(OUT_B);
       Wait(200);
 }



 sub STARTING_OPERATION()
 //スタート地点の四角から脱出する
 {
	while(SENSOR_1<Middle)
	{
		OnRev(OUT_AC);
	}
	while(SENSOR_1>Middle)
	{
		OnRev(OUT_AC);
	}
	OnRev(OUT_AC);
	Wait(50);
	Off(OUT_C);
	OnRev(OUT_A);
	Wait(40);
	while(SENSOR_1<Middle)
	{
		OnRev(OUT_AC);
	}
	Off(OUT_AC);
 }


 sub TURN_180()
 //180ど回転
 {
	OnFwd(OUT_AC);
	Wait(80);
	Off(OUT_AC);
	
	OnRev(OUT_A);
	Wait(130);
	while(SENSOR_1>40)
	{
		OnFwd(OUT_C);
		OnRev(OUT_A);
	}
	Off(OUT_AC);
 }

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS