*目次 [#m9e8d242]
#contents
*課題 [#k6c01612]
各チームで作成したコースに沿って動くロボットを作成。
~
 *速さと正確さを追求すること 
 *交差点で優先側を走っていない場合には、一時停止すること 
 *前方にあるもう一台のロボットに接触した場合には停止して相手のロボットが行き過ぎる、あるいは距離が離れるのを待つこと 
 *コースを3周したら自動的に止まること

*ロボッ [#f1cda9ad]
#ref(2008a/A8/課題2左/DSC_0155.jpg,CENTER)
~
~
~
#ref(2008a/A8/課題2左/DSC_0157.jpg,CENTER)
~
~
~
#ref(2008a/A8/課題2左/DSC_0158.jpg,CENTER)
~
~
~
#ref(2008a/A8/課題2左/DSC_0156.jpg,CENTER)
~
~
~
#ref(2008a/A8/課題2左/DSC_0161.jpg,CENTER)
~
~
~
#ref(2008a/A8/課題2左/DSC_0159.jpg,CENTER)
~
~
~
#ref(2008a/A8/課題2左/DSC_0160.jpg,CENTER)
~
~
~

*プログラム [#u5597e55]
 #define DEGREE_OF_LIGHT	40
 #define STOP_TIME		100
 #define BACK_TIME		70
 #define GO_TIME		200
 #define RUN_TIME		5000
 #define NUMOFCROSS		2
 #define RIGHT			0
 #define LEFT			1
 #define AWARE			20			
 
 int	iRun_Time = RUN_TIME * 3;
 int	iNumOfCross = 0;
 int	iDirection = LEFT; 
 
 task main ( )
 {
 
 	SetSensor ( SENSOR_1, SENSOR_LIGHT );
 	SetSensor ( SENSOR_2, SENSOR_TOUCH );
 	SetSensor ( SENSOR_3, SENSOR_LIGHT );
 	
 	PlaySound ( SOUND_UP );
 	ClearTimer ( 0 );
 		
 	//while ( Timer ( 0 ) <= iRun_Time ) {
 	while ( iNumOfCross < NUMOFCROSS ) {
 		if ( SENSOR_1 > DEGREE_OF_LIGHT ) {
 			if ( SENSOR_3 > DEGREE_OF_LIGHT )  {		 	
 				if ( Timer ( 0 ) >=  AWARE) {
 					until ( SENSOR_1 < DEGREE_OF_LIGHT ||
 						SENSOR_3 < DEGREE_OF_LIGHT ) {
 						OnRev ( OUT_A );
 						OnRev ( OUT_C );
 					}
 					if ( iDirection == LEFT ) {
 						OnRev ( OUT_C );
 						OnFwd ( OUT_A );
 						Wait ( 40 );
 						until (  SENSOR_1 > DEGREE_OF_LIGHT &&
 							SENSOR_3 > DEGREE_OF_LIGHT ) {
 							OnRev ( OUT_C );
 							OnFwd ( OUT_A );
 						}
 					}
 					else {
 						OnRev ( OUT_A );
 						OnFwd ( OUT_C );
 						Wait ( 40 );
 						until (  SENSOR_1 > DEGREE_OF_LIGHT &&
 							SENSOR_3 > DEGREE_OF_LIGHT ) {
 							OnRev ( OUT_A );
 							OnFwd ( OUT_C);
 						}
 					}
 					//OnFwd ( OUT_A + OUT_C );
 					//Wait ( 30 );
 					ClearTimer ( 0 );
 				}	 
 				OnFwd ( OUT_A );
 				OnFwd ( OUT_C );
 			}			
 			else {
 				iDirection = RIGHT;
 				ClearTimer ( 0 );
 				OnRev ( OUT_C );
 				OnFwd ( OUT_A );
 				
 			}
 		} 
 		else {
 			if ( SENSOR_3 > DEGREE_OF_LIGHT ) {
 				iDirection = LEFT;
 				ClearTimer ( 0 );
 				OnFwd ( OUT_C );
 				OnRev ( OUT_A );
 				
 			}
 			else {
 				iNumOfCross++;
 				ClearTimer ( 0 );
 				OnRev ( OUT_A );
 				OnRev (  OUT_C );
 				PlaySound ( SOUND_DOUBLE_BEEP );
 				Wait ( BACK_TIME );
 				Off ( OUT_A );
 				Off ( OUT_C );
 				Wait ( STOP_TIME );
 				OnFwd ( OUT_A );
 				OnFwd ( OUT_C );
 				Wait ( GO_TIME );
 				iRun_Time += ( BACK_TIME + STOP_TIME );
 				 				
 			}
 		}
 		
 		if ( SENSOR_2 == 1 ) {
 			Off ( OUT_A );
 			Off ( OUT_C );
 			PlaySound ( SOUND_CLICK );
 			Wait ( STOP_TIME );
 			iRun_Time += STOP_TIME;
 		}
 	}	
 	
 	Off ( OUT_A + OUT_C );
 	PlaySound ( SOUND_LOW_BEEP );	
 
 } 



*難しかったところ [#c384cee6]

*コメントをどうぞ [#qa4f7958]
#comment


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