- 追加された行はこの色です。
- 削除された行はこの色です。
[[2014b/MemberOnly/進行状況]]
*課題 [#mff4bbfd]
#ref(./robotics-mission1-7.jpg,100%)
*ロボット本体 [#q78dcdc0]
写真を撮ってないため、載せられる画像はない。ロボットはライントレース機能だけあれば十分なので、基本となる走るロボットに光センサーをとりつけたものである。
*プログラム [#k2ef213d]
次のように定義する
#define THRESHOLD 51
#define SPEED_H 33
#define SPEED_L 22
#define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OUT_C,speedL);
#define go_forward OnRL(SPEED_H, SPEED_H);
#define turn_left1 onRL(SPEED_L, -SPEED_L); // 左旋回
#define turn_left0 onRL(SPEED_L, 0); // 左折
#define turn_right0 onRL(0, SPEED_L); // 右折
#define turn_right1 OnRL(-SPEED_L, SPEED_L); // 右旋回
#define STEP 1 // 1回の判断で動作させる時間
#define nMAX 300 // 通常のカーブとして許容できる繰り返しの最大値 (調整する)
#define short_break Off(OUT_BC); Wait(1000); // 小休止
#define CROSS_TIME 200 // 交差点通過にかかる時間
#define cross_line OnRL(SPEED_L,SPEED_L);Wait(CROSS_TIME);short_break;
ライントレース時のプログラム
task main()
{
SetSensorLight(S3);
int nOnline=0; // 続けて黒になった回数 (カウンタ)
while (true) {
/* 黒を続けてnMAX回繰り返さない間、通常のライントレースをする */
while (nOnline < nMAX) {
if (SENSOR_3 < THRESHOLD-15) {
turn_left1;
nOnline++; // カウンタを増やす
} else {
if (SENSOR_3 < THRESHOLD-7) {
turn_left0;
} else if (SENSOR_3 < THRESHOLD+7) {
go_forward;
} else if (SENSOR_3 < THRESHOLD+15) {turn_right0;
} else {
turn_right1;
}
nOnline=0; // カウンタをリセット
}
Wait(STEP);
}
あ