目次
'2013b/Member/wei/Mission2/' には、下位層のページがありません。
#define left_kuro 28//黒とみなす最大の値
#define right_kuro 34//黒とみなす最大の値
#define left_sen 38//線上とみなす
#define right_sen 43//線上とみなす
#define sekkin 40//缶が接近したときの値
#define HIPOWER 7//強い力
#define LOWPOWER 5//弱い力
#define set_power_H SetPower(OUT_AC,HIPOWER);//モーターを強い力に設定
#define set_power_L SetPower(OUT_AC,LOWPOWER);//モーターを弱い力に設定
#define senkai_left set_power_L;OnRev(OUT_A);OnFwd(OUT_C);//左旋回
#define senkai_right set_power_L;OnRev(OUT_C);OnFwd(OUT_A);//右旋回
#define go_forward set_power_H;OnFwd(OUT_AC);//前進
#define back set_power_L;OnRev(OUT_AC);//後退
#define CROSS(t,p,q) set_power_L;go_forward;Wait(t);senkai_left;Wait(p);senkai_left;Wait(q);//T字路や交差点を渡る時のプログラム
#define STEP 1 //ライントレースで判断された動作を0.01秒間続ける。
#define SAIDAI 3 //T字路や交差点付近である条件に3連続でなったらT字路や交差点と判断
#define short_break Off(OUT_AC);Wait(80);//小休憩
#define counter3 PlaySound(SOUND_CLICK);//3回鳴ると交差点を渡る
#define GO 1//もうひとつのRCXからこのメッセージが送られてきたらこのRCXのプログラムが再始動する
#define HOLD 2//1つ目の缶を持ち上げる動作をもうひとつのRCXに送るメッセージ
#define TUMU_UP 3//1つ目の缶を2つ目の缶に積んで2つ目の缶を持ち上げる動作をもうひとつの RCXに送るメッセージ
#define TUMU 4//1,2目の缶を3つ目の缶に積んで3つ目の缶を挟む動作をもうひとつのRCXに送るメッセージ
#define HASAMI 5//ハサミを広げる動作をもうひとつのRCXに送るメッセージ sub line_race() //普通の黒線を走るプログラム {
if(SENSOR_1<=left_kuro){ if(SENSOR_3<=right_kuro){ go_forward;} else if(SENSOR_3<=right_sen){ senkai_left;} else{senkai_left;}} else if(SENSOR_1<=left_sen){ if(SENSOR_3<=right_kuro){ senkai_right;} else if(SENSOR_3<=right_sen){ go_forward;} else{senkai_left;}} else{ if(SENSOR_3<=right_kuro){ senkai_right;} else if(SENSOR_3<=right_sen){ senkai_right;} else{go_forward;}}Wait(STEP);}
sub before_cross_line_1() //T字路付近の黒線を走るプログラム {
int nOnline=0;
while (nOnline < SAIDAI){ if(SENSOR_3<=right_kuro){ if(SENSOR_1<=left_kuro){ go_forward;} else if(SENSOR_1<=left_sen){ senkai_right;} else{senkai_right;} nOnline++; }else{ if(SENSOR_3<=right_sen){ if(SENSOR_1<=left_kuro){ senkai_left;} else if(SENSOR_1<=left_sen){ go_forward;} else{senkai_right;}} else{ if(SENSOR_1<=left_kuro){ senkai_left} else if(SENSOR_1<=left_sen){ senkai_left;} else{go_forward;}} nOnline=0;} Wait(STEP); } //while(<saidai)文終わり
}
sub before_cross_line_2() //T字路付近の黒線を走るプログラム {
int nOnline=0;
while (nOnline < SAIDAI){ if(SENSOR_1<=left_kuro){ if(SENSOR_3<=right_kuro){ go_forward;} else if(SENSOR_3<=right_sen){ senkai_left;} else{senkai_left;} nOnline++; }else{ if(SENSOR_1<=left_sen){ if(SENSOR_3<=right_kuro){ senkai_right;} else if(SENSOR_3<=right_sen){ go_forward;} else{senkai_left;}} else{ if(SENSOR_3<=right_kuro){ senkai_right;} else if(SENSOR_3<=right_sen){ senkai_right;} else{go_forward;}} nOnline=0;} Wait(STEP); } //while(<saidai)文終わり
}
sub before_cross_line_3() //T字路or十字路付近の黒線を走るプログラム { int nOnline=0; while (nOnline < SAIDAI){
if(SENSOR_1<=left_kuro&&SENSOR_3<=right_kuro){ go_forward;nOnline++;} else if(SENSOR_1<=left_sen&&SENSOR_3<=right_sen){ go_forward;nOnline++;} else if(SENSOR_1<=left_kuro){ if(SENSOR_3<=right_sen){ senkai_left;} else{senkai_left;}nOnline==0;} else if(SENSOR_1<=left_sen){ if(SENSOR_3<=right_kuro){ senkai_right;} else{senkai_left;}nOnline==0;} else{ if(SENSOR_3<=right_kuro){ senkai_right;} else if(SENSOR_3<=right_sen){ senkai_right;} else{go_forward;}nOnline==0;} Wait(STEP);
} //while(<saidai)文終わり } task main(){
SetSensor(SENSOR_1,SENSOR_LIGHT);//左側の光センサー SetSensor(SENSOR_2,SENSOR_LIGHT);//缶の判断用 SetSensor(SENSOR_3,SENSOR_LIGHT);//右側の光センサー int nCross=0;
while(nCross<=8){
if(nCross==0){ senkai_right;Wait(50); go_forward; until(SENSOR_3<=left_sen); senkai_left;Wait(60); //ここでラインの上に乗っかる while(SENSOR_2>=sekkin){ line_race();} Off(OUT_AC); while(Message() != GO){SendMessage(HOLD);Wait(40);} //缶をつかむ&上に持ち上げる senkai_left;Wait(410); nCross++; }
else if(nCross==1){ while(SENSOR_2>=sekkin){ line_race();} Off(OUT_AC); while(Message() != GO){SendMessage(TUMU_UP);Wait(40);}//缶を積む&上に持ち上げる ClearTimer(0); while(FastTimer(0)<300){ line_race();} before_cross_line_1(); CROSS(50,0,0); nCross++; }
else if(nCross==2){ while(SENSOR_2>=sekkin){ line_race();} Off(OUT_AC); while(Message() != GO){SendMessage(TUMU);Wait(40);} //缶を積む ClearTimer(0); while(FastTimer(0)<830){ line_race();} before_cross_line_3(); CROSS(150,0,0); senkai_right;Wait(130); Off(OUT_AC); while(Message() != GO){SendMessage(HASAMI);Wait(40);} //ハサミを広げる back;Wait(100); senkai_right;Wait(235); go_forward;Wait(150); nCross++; }
else if(nCross==3){ ClearTimer(0); while(FastTimer(0)<1000){ line_race();} before_cross_line_2(); CROSS(50,150,0); nCross++; }
else if(nCross==4){ ClearTimer(0); while(FastTimer(0)<200){ line_race();} before_cross_line_3(); CROSS(50,0,150); nCross++; }
else if(nCross==5){ while(SENSOR_2>=sekkin){ line_race();} Off(OUT_AC); while(Message() != GO){SendMessage(HOLD);Wait(40);} //缶をつかむ&上に持ち上げる ClearTimer(0); while(FastTimer(0)<1600){ line_race();} before_cross_line_3(); go_forward;Wait(50); CROSS(50,0,0); nCross++; }
else if(nCross==6){ while(SENSOR_2>=sekkin){ line_race();} Off(OUT_AC); while(Message() != GO){SendMessage(TUMU_UP);Wait(40);} //缶を積む&上に持ち上げる while(SENSOR_2>=sekkin){ line_race();} Off(OUT_AC); while(Message() != GO){SendMessage(TUMU);Wait(40);} //缶を積む ClearTimer(0); while(FastTimer(0)<300){ line_race();} before_cross_line_1(); go_forward;Wait(50); senkai_right;Wait(150); CROSS(50,0,150); nCross++; }
else if(nCross==7){ ClearTimer(0); while(FastTimer(0)<200){ line_race();} before_cross_line_3(); go_forward;Wait(50); senkai_right;Wait(150); CROSS(50,0,150); nCross++; }
else if(nCross==8){ ClearTimer(0); while(FastTimer(0)<1000){ line_race();} before_cross_line_3(); CROSS(50,0,0); senkai_right;Wait(100); Off(OUT_AC); while(Message() != GO){SendMessage(HASAMI);Wait(40);} //ハサミを広げる back;Wait(500); nCross++; }
} //while(nCross<=8)終わり stop main; //task main()を終了 }
#define GO 1//このメッセージを送るともう一つのRCXが再始動する
#define HOLD 2//もう一つのRCXからこのメッセージが送られると1つ目の缶を持ち上げる動作をする
#define TUMU_UP 3//もう一つのRCXからこのメッセージが送られると1つ目の缶を2つ目の缶に積んで2つ目の缶を持ち上げる動作をする
#define TUMU 4//もう一つのRCXからこのメッセージが送られると1,2目の缶を3つ目の缶に積んで3つ目の缶を挟む動作をする
#define HASAMI 5//もう一つのRCXからこのメッセージが送られるとハサミを広げる動作をする
#define hasamu OnRev(OUT_A);Wait(50);Off(OUT_A);//ハサミを閉じる
#define hirogeru OnFwd(OUT_A);Wait(50);//ハサミを広げる
#define up OnRev(OUT_C);Wait(150);Off(OUT_C);//エレベータを上げる
#define down(t) OnFwd(OUT_C);Wait(t);Off(OUT_C);//エレベータを下げる
#define go_sin PlaySound(SOUND_UP);//goというサインを出したときわかりやすく音を鳴らす sub send_go(){ //goというサインを出すサブルーチン
ClearTimer(0); while(FastTimer(0)<=200){SendMessage(GO);Wait(5);}} task main(){ int n=1; while(true){
ClearMessage(); SetPower(OUT_A,4); SetPower(OUT_C,5); if(Message() == HOLD){ //1つ目の缶を持ち上げる n=0; hasamu; up; go_sin; send_go(); } else if(Message() == TUMU_UP){ //1つ目の缶を2つ目の缶に積んで2つ目の缶を持ち上げる n=0; down(20); hirogeru; down(130); hasamu; up; go_sin; send_go(); }
else if(Message() == TUMU){ //1,2目の缶を3つ目の缶に積んで3つ目の缶を挟む down(20); hirogeru; down(130); hasamu; go_sin; send_go(); n=1; }
else if(Message() == HASAMI){ //ハサミを広げる hirogeru; go_sin; send_go(); n=1; }
if(n==0){SetPower(OUT_C,1);OnRev(OUT_C);Wait(100);Off(OUT_C);Wait(100);}
} }
↑
ロボットを作る過程はみんな一緒に協力する、自分自身に対していい経験です。また、外国人の私に対して交流面問題がある、でもみんな根気がよいてわたしの意見を聞いた。とてもありがどうございます。とりあいず、ロボット制作に関する知識は工科の私に対していい経験です