- 追加された行はこの色です。
- 削除された行はこの色です。
[[2013b/MemberOnly/進行状況]]
[[缶の除去を行うロボット]]
*ソースコード [#g1c4cf30]
#define THRESHOLD 60
#define SPEED_A 10
#define SPEED_B 20
#define SPEED_C 30
#define SPEED_D 40
#define SPEED_E 50
#define SPEED_F 60
#define SPEED_G 70
#define SPEED_H 80
#define SPEED_I 90
#define SPEED_J 100
#define STEP 1
#define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OUT_C,speedL);
#define go_forward OnRL(SPEED_C,SPEED_C);
#define turn_first_curve OnRL(SPEED_H,-SPEED_H);
#define turn_left0 OnRL(SPEED_C,0);
#define turn_left0_2 OnRL(SPEED_B,0);
#define turn_left1 OnRL(SPEED_B,-SPEED_B);
#define turn_left2 OnRL(SPEED_H,-SPEED_H);
#define turn_right0 OnRL(0,SPEED_B);
#define turn_right00 OnRL(0,SPEED_F);
#define turn_right000 OnRL(0,SPEED_H);
#define turn_right1 OnRL(-SPEED_B,SPEED_B);
#define turn_right2 OnRL(-SPEED_D,SPEED_D);
#define nMAX_A 150
#define nMAX_B 200
#define nMAX_C 250
#define nMAX_D 300
#define short_break Off(OUT_BC);Wait(1000);
#define CROSS_TIME 400
#define cross_line OnRL(SPEED_C,SPEED_C);Wait(CROSS_TIME);short_break;
#define udefuri OnFwd(OUT_A,SPEED_B);Wait(400); //アーム用
task main()
{
SetSensorLight(S1);
SetSensorLowspeed(S2);
long t0=CurrentTick();
int nOnline=0;
while(CurrentTick()-t0<17000){ //第一セクション
if(SENSOR_1<THRESHOLD-15){
turn_right000;
}else{
if(SENSOR_1<THRESHOLD-8){
turn_right00;
}else if(SENSOR_1<THRESHOLD+5){
go_forward;
}else if(SENSOR_1<THRESHOLD+10){
turn_left1;
}else{
turn_left1;
}
nOnline=0;
}
Wait(STEP);
if(SensorUS(S2)<6){ //缶を移動させるプログラム
Off(OUT_BC);Wait(1000);
udefuri;
Off(OUT_BC);Wait(1000);
OnFwd(OUT_B,40);OnRev(OUT_C,40);Wait(1500);
Off(OUT_BC);Wait(2000);
OnRev(OUT_BC,SPEED_B);
Wait(4000);
Off(OUT_BC);Wait(2000);
OnRev(OUT_A,SPEED_B);Wait(400);
Off(OUT_BC);Wait(1000);
OnRev(OUT_BC,SPEED_B);Wait(2500);
Off(OUT_BC);Wait(1000);
OnFwd(OUT_C,40);OnRev(OUT_B,40);Wait(1500);
Off(OUT_BC);Wait(2000);
}
}
while(CurrentTick()-t0<30000){ //第二セクション
PlaySound(SOUND_UP);
while(nOnline<140){
if(SENSOR_1<THRESHOLD-15){
turn_right2;
nOnline++;
}else{
if(SENSOR_1<THRESHOLD-8){
turn_right2;
}else if (SENSOR_1<THRESHOLD){
go_forward;
}else if(SENSOR_1<THRESHOLD+10){
turn_left0_2;
}else{
turn_left0;
}
nOnline=0;
}
Wait(STEP);
}
short_break;
turn_right1;
Wait(100);
cross_line;
long t1=CurrentTick(); //ここから最初の円用のプログラム
while(CurrentTick()-t1<7800){
if(SENSOR_1<THRESHOLD-15){
turn_right1;
}else{
if(SENSOR_1<THRESHOLD-8){
turn_right0;
}else if (SENSOR_1<THRESHOLD+5){
go_forward;
}else if(SENSOR_1<THRESHOLD+10){
turn_left0;
}else{
turn_left1;
}
nOnline=0;
}
Wait(STEP);
}
PlaySound(SOUND_DOWN);
nOnline=0;
}
while(CurrentTick()-t0<39000){ //第三セクション
PlaySound(SOUND_UP);
while(nOnline<160){
if(SENSOR_1<THRESHOLD-15){
turn_right1;
nOnline++;
}else{
if(SENSOR_1<THRESHOLD-8){
turn_right0;
}else if (SENSOR_1<THRESHOLD+5){
go_forward;
}else if(SENSOR_1<THRESHOLD+10){
turn_left0;
}else{
turn_left1;
}
nOnline=0;
}
Wait(STEP);
}
short_break;
turn_left1;
Wait(100);
cross_line;
PlaySound(SOUND_DOWN);
nOnline=0;
}
}