- 追加された行はこの色です。
- 削除された行はこの色です。
[[2016a/Member]]
*プログラム [#k22b8b3f]
#define BLACK 46
#define WHITE 54
#define SPEED1 19
#define SPEED2 30
#define go_forward OnFwd(OUT_BC,SPEED1);
#define turn_left(t,w1,w2) OnFwd(OUT_B,w1); OnRev(OUT_C,w2); Wait(t);Off(OUT_BC);
#define turn_left1 OnFwd(OUT_B,SPEED1);Off(OUT_C);
#define turn_left2 OnFwd(OUT_B,SPEED1);OnRev(OUT_C,SPEED1);
#define turn_right(t,w1,w2) OnFwd(OUT_C,w1); OnRev(OUT_A,w2); Wait(t);Off(OUT_BC);
#define turn_right1 Off(OUT_B);OnFwd(OUT_C,SPEED1);
define turn_right2 OnRev(OUT_B,SPEED1);OnFwd(OUT_C,SPEED1);
#define STEP 1
#define short_break Off(OUT_BC);Wait(1000);PlaySound(SOUND_UP);
#define cross_line go_forward;Wait(200);Off(OUT_BC);Wait(1000);
#define nMAX 350
void line_trace()
{
SetSensorLight(S1);
int nOnline=0;
while (nOnline < nMAX ) {
if (SENSOR_1 < BLACK-5) {
turn_right2;
nOnline++;
} else {
if (SENSOR_1 < BLACK) {
turn_right1;
} else if (SENSOR_1 < WHITE) {
go_forward;
} else if (SENSOR_1 < WHITE+5) {
turn_left1;
} else {
turn_left2;
}
nOnline=0;
}
Wait(STEP);
}
short_break;
nOnline=0;
Off(OUT_BC);
}
void line_closs()
{
cross_line;
SetSensorLight(S1);
do{
if (SENSOR_1 < BLACK) {
turn_right1;
} else if (SENSOR_1 > WHITE) {
turn_left2;
}
}
while((SENSOR_1 > BLACK)&&(SENSOR_1 < WHITE));
Off(OUT_BC);
}
void line_right()
{
cross_line;
turn_right(1000,40,40);
SetSensorLight(S1);
do{
if (SENSOR_1 < BLACK) {
turn_right1;
} else if (SENSOR_1 > WHITE) {
turn_left2;
}
}
while((SENSOR_1 > BLACK)&&(SENSOR_1 < WHITE));
Off(OUT_BC);
}
void line_left()
{
cross_line;
turn_left(1000,40,40)
SetSensorLight(S1);
do{
if (SENSOR_1 < BLACK) {
turn_right1;
} else if (SENSOR_1 > WHITE) {
turn_left2;
}
}
while((SENSOR_1 > BLACK)&&(SENSOR_1 < WHITE));
Off(OUT_BC);
}
void last_move()
{
go_forward;
Wait(1500);
Off(OUT_BC);
}
task main()
{
line_trace();
line_right();
line_trace();
line_closs();
line_trace();
line_closs();
line_trace();
line_right();
line_trace();
line_right();
line_trace();
last_move();
}