- 追加された行はこの色です。
- 削除された行はこの色です。
目次
#contents
*課題の説明 [#w9d35255]
詳しい説明は[[2014a/Mission1]]
*ロボット本体 [#m8994562]
**プログラム
#define THRESHOLD 40
#define HIPOWER 7
#define LOWPOWER 2
#define set_power_H SetPower(OUT_AC,HIPOWER);
#define set_power_L SetPower(OUT_AC,LOWPOWER);
#define go_forward set_power_H; OnFwd(OUT_AC); // 前進
#define turn_left1 set_power_L; OnFwd(OUT_C); OnRev(OUT_A); // 左折(強め)
#define turn_left0 set_power_L; OnFwd(OUT_C); Off(OUT_A); // 左折(弱め)
#define turn_right1 set_power_L; OnFwd(OUT_A); OnRev(OUT_C); // 右折(強め)
#define turn_right0 set_power_L; OnFwd(OUT_A); Off(OUT_C); // 右折(弱め)
#define STEP 1 // 1回の判断で動作させる時間
#define Max 50 // カーブでの繰り返し最大値
#define short_break Off(OUT_AC); Wait(500) // 小休憩
#define cross_time 200 // 交差点通過にかかる時間
#define cross_line set_power_L; Wait(cross_time) // 交差点進行
task main()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
int n;
n=0; //続けて黒になった回数をカウント
while(true) { // 黒検出の回数がMax回未満の時、ライントレースする
while( n < Max ) {
if (SENSOR_2 < THRESHOLD-15) {
turn_left1;
n++; // カウントを増やす }
else {
if(SENSOR_2 < THRESHOLD-8) {
turn_left1;
} else if (SENSOR_2 < THRESHOLD-3) {
turn_left0;
} else if (SENSOR_2 < THRESHOLD+3) {
go_forward;
} else if (SENSOR_2 < THRESHOLD+8) {
turn_right0;
} else {
turn_right1; }
n=0; }
Wait(STEP); }
short_break; // 小休憩
turn_right1;
Wait(Max*STEP); // 進路修正
cross_line; 交差点進行
n=0; // カウントをリセット
}
}
**画像