[[2011a]]

*ハードウェア [#f69f9e3c]
*ソフトウェア [#s2af5312]
**hiros [#gfa35d61]
***作戦(ロータリー) [#wbec58d9]
2つの光センサを使って、黒線を挟み、適時修正しながら進めていく。
まずはロータリーについては考えない事にした。
交差点に到達したら、まっすぐ先に進んでいくというプログラムを考えた。
交差点の判定は、「右も左も黒であれば、交差点」と考えた。
***コード [#af8f3e5f]
 #define isBlack <40
 #define isWhite >40
 #define R SENSOR_3
 #define L SENSOR_1
 #define RM OUT_C
 #define LM OUT_A
 #define LINE 8
 
 void go(){
 	OnFwd(RM+LM);
 }
 void tr(){
 	OnFwd(LM);
 	//Off(RM);
 	OnRev(RM);
 }
 void tl(){
 	OnFwd(RM);
 //	Off(LM);
 	OnRev(LM);
 }
 
 void move(){
 	if (L isWhite && R isWhite) go();
 	else if (L isWhite && R isBlack) tr();
 	else if (L isBlack && R isWhite) tl();
 	else if (L isBlack && R isBlack){
 /*	        PlaySound(SOUND_CLICK);
 		go();
 		Wait(LINE);
 	}
 }
 
 task main (){
 	SetSensor (R, SENSOR_LIGHT);
 	SetSensor (L, SENSOR_LIGHT);
 	while (1){
 		move();
 	}
 }

***作戦(ロータリー改) [#w644155f]
上のコードでは、直角な交差点ではまっすぐに進むが、私たちの交差点はかなり斜めで、「右も左も黒」、という判定になりにくい。よって、コードを新しく考える必要があった。
例えば、右が黒で、左は白であるとき、上のコードでは「右に道がある」ということになり、すぐ右に回転をしてしまう。これだと、斜めな交差点にさしかかると「右に回転ー>左に回転」の無限ループに陥って、その場から動かなくなってしまう。
なので、判定を入れる事にした。
***コード [#zdd515b3]


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