- 追加された行はこの色です。
- 削除された行はこの色です。
[[2013b/Member]]
#define BLACK1 34 //閾値の設定
#define BLACK2 40
#define WHITE1 46
#define WHITE2 49
#define HIPOWER 5 //ハイパワーでのモーターの強さ
#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_H;\
OnFwd(OUT_C); OnRev(OUT_A); //急な右折の定義
#define turn_left0 set_power_L;\
OnFwd(OUT_C); Off(OUT_A); // //ゆるやかな右折の定義
#define turn_right0 set_power_L;\
OnFwd(OUT_A); Off(OUT_C); //ゆるやかな左折の定義
#define turn_right1 set_power_H;\
OnFwd(OUT_A); OnRev(OUT_C); //急な右折の定義
#define STEP 1 //一回の判定で進む時間を定義
#define nMAX 35 //交差点判断の基準値の定義
#define short_break Off(OUT_AC); Wait(100);
#define cross_line go_forward set_power_H;\
OnFwd(OUT_AC); Wait(20); short_break; //交差点時の動きの定義
#define go_forward1 OnFwd(OUT_AC); Wait(50);
#define go_back OnRev(OUT_AC); Wait(50);
試験
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
ClearTimer(1);
while (FastTimer(1) <= 1000) {
if (SENSOR_2 < BLACK1) {
turn_left1;
} else {
if (SENSOR_2 < BLACK2) {
turn_left0;
} else if (SENSOR_2 < WHITE1) {
go_forward;
} else if (SENSOR_2 < WHITE2) {
turn_right0;
} else {
turn_right1;
}
Wait(STEP);
}
}
ClearTimer(0);
ClearTimer(1);
while (FastTimer(1) <= 4500) { //45秒間以下の行動を続ける
while (FastTimer(0) < nMAX) {
if (SENSOR_2 < BLACK1) {
turn_left1;
} else {
if (SENSOR_2 < BLACK2) {
turn_left0;
} else if (SENSOR_2 < WHITE1) {
go_forward;
} else if (SENSOR_2 < WHITE2) {
turn_right0;
} else {
turn_right1;
}
ClearTimer(0);
}
Wait(STEP);
}
turn_right1; Wait(nMAX*STEP);
cross_line;
ClearTimer(0);
}
ClearTimer(0);
ClearTimer(1);
while (true) {
if (SENSOR_2 < BLACK1) {
turn_left1;
} else {
if (SENSOR_2 < BLACK2) {
turn_left0;
} else if (SENSOR_2 < WHITE1) {
go_forward;
} else if (SENSOR_2 < WHITE2) {
turn_right0;
} else {
turn_right1;
}
Wait(STEP);
}
}
}