- 追加された行はこの色です。
- 削除された行はこの色です。
[[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]