[[2013b/Member]] [[2013b/Member]] a #define THERESHOLD 47 // しきい値の設定 #define HIGHESTPOWER 7 // モーターを一番強く回す時のパワーの大きさ #define HIPOWER 2 // モーターを強く回す時のパワーの大きさ(上一つも含め直進用) #define LOWPOWER 0 // モーターを弱く回す時のパワー(カーブの時に使用) #define set_power_HE SetPower(OUT_AC,HIGHESTPOWER); #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); // 左折1(旋回) #define turn_left0 set_power_L;\ OnFwd(OUT_C); Off(OUT_A); // 左折0(左の車輪を軸に回転) #define turn_right0 set_power_L;\ OnFwd(OUT_A); Off(OUT_C); // 右折0(右の車輪を軸に回転) #define turn_right1 set_power_L;\ OnFwd(OUT_A); OnRev(OUT_C); 右折1(旋回) #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 U_turn1 set_power_HE; OnRev(OUT_A);OnFwd(OUT_C);\ Wait(180); #define U_turn2 set_power_HE; OnRev(OUT_C);OnFwd(OUT_A);\ Wait(150); #define go_back OnRev(OUT_AC); Wait(50); task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_TOUCH); ClearTimer(1); while (FastTimer(1) <= 1000) { if (SENSOR_1 < THERESHOLD -4) { turn_left1; } else { if (SENSOR_1 < THERESHOLD -2) { turn_left0; } else if (SENSOR_1 < THERESHOLD +2) { go_forward; } else if (SENSOR_1 < THERESHOLD +4) { turn_right0; } else { turn_right1; } Wait(STEP); } if (SENSOR_2==1) { go_forward1; U_turn1; go_back; U_turn2; } } ClearTimer(0); ClearTimer(1); while (FastTimer(1) <= 5000) { while (FastTimer(0) < nMAX) { if (SENSOR_1 < THERESHOLD -4) { turn_left1; } else { if (SENSOR_1 < THERESHOLD -2) { turn_left0; } else if (SENSOR_1 < THERESHOLD +2) { go_forward; } else if (SENSOR_1 < THERESHOLD +4) { 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_1 < THERESHOLD -4) { turn_left1; } else { if (SENSOR_1 < THERESHOLD -2) { turn_left0; } else if (SENSOR_1 < THERESHOLD +2) { go_forward; } else if (SENSOR_1 < THERESHOLD +4) { turn_right0; } else { turn_right1; } Wait(STEP); } } }