2006b/A4/第弐稿
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
アーム
#define ARM_TIME 30 アームを開閉する時間を設定します。
#define UP_TIME 70 アームを上下させる時間を設定します。
task main(){
SetSensor(SENSOR_1,SENSOR_LIGHT); 光センサーを設定します。
SetSensor(SENSOR_3,SENSOR_TOUCH); タッチセンサーを設定します。
while(true){
ClearMessage();
if(SENSOR_1<40){OnFwd(OUT_C); Wait(ARM_TIME); アームを閉じます。
OnFwd(OUT_A); Wait(UP_TIME); アームを上げます。
Off(OUT_A+OUT_C);Wait(10);
if(SENSOR_3==1){SendMessage(2); Wait(50);} 缶のときは、タッチセンサーが反応するので、2のメッセージを送ります。
else{SendMessage(1); Wait(50);} } 缶でない時(箱)は、1のメッセージを送ります。
if(Message()==3){OnRev(OUT_A); Wait(75);
OnRev(OUT_C); Wait(35);Off(OUT_A+OUT_C);} 3のメッセージを受け取ったらアームを下ろして、アームを開きます。
}
}
足回り
#define line_h_l while (Timer(0) <= 260) {if(SENSOR_1<42){OnFwd(OUT_A); OnRev(OUT_C); Wait(10);} if(SENSOR_2<42){OnFwd(OUT_C); OnRev(OUT_A); Wait(10);} else {OnFwd(OUT_C+OUT_A); Wait(10);} if((SENSOR_1<43)&&(SENSOR_2<43)){OnFwd(OUT_C); OnRev(OUT_A); Wait(40); }} ライントレースを2.6秒します。三叉路では、左 に曲がります。
#define line_k_r while (Timer(0) <= 260) {if(SENSOR_1<42){OnFwd(OUT_A); OnRev(OUT_C); Wait(10);} if(SENSOR_2<42){OnFwd(OUT_C); OnRev(OUT_A); Wait(10);} else{OnFwd(OUT_C+OUT_A); Wait(10);} if((SENSOR_1<43)&&(SENSOR_2<43)){OnFwd(OUT_A); OnRev(OUT_C); Wait(40); }} ライントレースを2.6秒します。三叉路では、右に曲がります。
#define line_h_r_1 while (Timer(0) <= 200) {if(SENSOR_1<42){OnFwd(OUT_A); OnRev(OUT_C); Wait(10);} if(SENSOR_2<42){OnFwd(OUT_C); OnRev(OUT_A); Wait(10);} else{OnFwd(OUT_C+OUT_A); Wait(10);} if((SENSOR_1<43)&&(SENSOR_2<43)){OnFwd(OUT_A); OnRev(OUT_C); Wait(40); }} ライントレースを2秒します。三叉路では、右に曲がります。
#define line_h_r_2 while (Timer(1) <= 70) {if(SENSOR_1<42){OnFwd(OUT_A); OnRev(OUT_C); Wait(10);} if(SENSOR_2<42){OnFwd(OUT_C); OnRev(OUT_A); Wait(10);} else{OnFwd(OUT_C+OUT_A); Wait(10);} if((SENSOR_1<43)&&(SENSOR_2<43)){OnFwd(OUT_C); OnRev(OUT_A); Wait(40); }} ライントレースを0.7秒します。三叉路では、左に曲がります。
#define line_k_l_1 while (Timer(0) <= 200) {if(SENSOR_1<42){OnFwd(OUT_A); OnRev(OUT_C); Wait(10);} if(SENSOR_2<42){OnFwd(OUT_C); OnRev(OUT_A); Wait(10);} else{OnFwd(OUT_C+OUT_A); Wait(10);} if((SENSOR_1<43)&&(SENSOR_2<43)){OnFwd(OUT_A); OnRev(OUT_C); Wait(40); }} ライントレースを2秒します。三叉路では、右に曲がります。
#define line_k_l_2 while (Timer(1) <= 70) {if(SENSOR_1<42){OnFwd(OUT_A); OnRev(OUT_C); Wait(10);} if(SENSOR_2<42){OnFwd(OUT_C); OnRev(OUT_A); Wait(10);} else{OnFwd(OUT_C+OUT_A); Wait(10);} if((SENSOR_1<43)&&(SENSOR_2<43)){OnFwd(OUT_C); OnRev(OUT_A); Wait(40); }} ライントレースを0.7秒します。三叉路では、左に曲がります。
int i;
int turn_time; 変数iと変数turn_timeを設定します。
task hako_l() { 左側で箱を取ったとき
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_LIGHT); 光センサーを設定します。
while(true){
ClearMessage();
ClearTimer(0);
Off(OUT_A+OUT_C); Wait(40); OnRev(OUT_A+OUT_C); Wait(50); 停止した後後退します。
OnFwd(OUT_C); OnRev(OUT_A); Wait(200); 反転します。
OnFwd(OUT_A+OUT_C); Wait(10);
line_h_l; SendMessage(3); Wait(50); ライントレースをして、3のメッセージを送ります。
Float(OUT_A+OUT_C); Wait(100); OnRev(OUT_A+OUT_C); Wait(50);
OnFwd(OUT_A); OnRev(OUT_C); Wait(190); OnFwd(OUT_A+OUT_C); Wait(300);
Off(OUT_A+OUT_C);} } 停止後に後退し、元の位置に戻ります。
task hako_r() { 右側で箱を取ったとき
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_LIGHT); 光センサーを設定します。
while(true){
ClearMessage();
ClearTimer(0);
ClearTimer(1);
Off(OUT_A+OUT_C); Wait(40); OnRev(OUT_A+OUT_C); Wait(50); 停止した後後退します。
OnFwd(OUT_C); OnRev(OUT_A); Wait(200); 反転します。
OnFwd(OUT_A+OUT_C); Wait(10);
line_h_r_1; line_h_r_2;SendMessage(3); Wait(50); ライントレースをして、3のメッセージを送ります。
Float(OUT_A+OUT_C); Wait(100); OnRev(OUT_A+OUT_C); Wait(50);
OnFwd(OUT_A); OnRev(OUT_C); Wait(190); OnFwd(OUT_A+OUT_C); Wait(300);
Off(OUT_A+OUT_C);} } 停止後に後退し、元の位置に戻ります。
task hako_m(){ 中央で箱を取ったとき
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_LIGHT); 光センサーを設定します。
while(true){
ClearMessage();
ClearTimer(1);
Off(OUT_A+OUT_C); Wait(40); OnRev(OUT_A+OUT_C); Wait(50); 停止した後後退します。
OnFwd(OUT_C); OnRev(OUT_A); Wait(210); 反転します。
OnFwd(OUT_A+OUT_C); Wait(150);
line_h_r_2;SendMessage(3); Wait(50); ライントレースをして、3のメッセージを送ります。
Float(OUT_A+OUT_C); Wait(100); OnRev(OUT_A+OUT_C); Wait(50);
OnFwd(OUT_A); OnRev(OUT_C); Wait(190); OnFwd(OUT_A+OUT_C); Wait(300);
Off(OUT_A+OUT_C);} } 停止後に後退し、元の位置に戻ります。
task kann_r() { 右側で缶を取ったとき
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_LIGHT); 光センサーを設定します。
while(true){
ClearMessage();
ClearTimer(0);
Off(OUT_A+OUT_C); Wait(40); OnRev(OUT_A+OUT_C); Wait(50); 停止した後後退します。
OnFwd(OUT_A); OnRev(OUT_C); Wait(200); 反転します。
OnFwd(OUT_A+OUT_C); Wait(10);
line_k_r; SendMessage(3); Wait(50); ライントレースをして、3のメッセージを送ります。
Float(OUT_A+OUT_C); Wait(100); OnRev(OUT_A+OUT_C); Wait(50);
OnFwd(OUT_C); OnRev(OUT_A); Wait(200); OnFwd(OUT_A+OUT_C); Wait(450);
Off(OUT_A+OUT_C);} } 停止後に後退し、元の位置に戻ります。
task kann_l() { 左側で缶を取ったとき
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_LIGHT); 光センサーを設定します。
while(true){
ClearMessage();
ClearTimer(0);
Off(OUT_A+OUT_C); Wait(40); OnRev(OUT_A+OUT_C); Wait(50); 停止した後後退します。
OnFwd(OUT_A); OnRev(OUT_C); Wait(200); 反転します。
OnFwd(OUT_A+OUT_C); Wait(10);
line_k_l_1; line_k_l_2; SendMessage(3); Wait(50); ライントレースをして、3のメッセージを送ります。
Float(OUT_A+OUT_C); Wait(100); OnRev(OUT_A+OUT_C); Wait(50);
OnFwd(OUT_C); OnRev(OUT_A); Wait(200); OnFwd(OUT_A+OUT_C); Wait(450);
Off(OUT_A+OUT_C);} } 停止後に後退し、元の位置に戻ります。
task kann_m() { 中央で缶を取ったとき
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_LIGHT); 光センサーを設定します。
while(true){
ClearMessage();
ClearTimer(1);
Off(OUT_A+OUT_C); Wait(40); OnRev(OUT_A+OUT_C); Wait(50); 停止した後後退します。
OnFwd(OUT_A); OnRev(OUT_C); Wait(210); 反転します。
OnFwd(OUT_A+OUT_C); Wait(150);
line_k_l_2; SendMessage(3); Wait(50); ライントレースをして、3のメッセージを送ります。
Float(OUT_A+OUT_C); Wait(100); OnRev(OUT_A+OUT_C); Wait(50);
OnFwd(OUT_C); OnRev(OUT_A); Wait(200); OnFwd(OUT_A+OUT_C); Wait(450);
Off(OUT_A+OUT_C);} } 停止後に後退し、元の位置に戻ります。
task main() {
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_LIGHT); 光センサーを設定します。
turn_time=10;
i=0; turn_timeを10・iを0とおきます。
while(true){
ClearMessage();
ClearTimer(0);
OnFwd(OUT_A+OUT_C); Wait(50); 前進します。
if(Message()==1){ メッセージが1で且つ
if((i==1)||(i==3)||(i==5)) iが1・3・5のときhako_lをはじめます。
{start hako_l;}
if((i==2)||(i==4)||(i==6)) iが2・4・6のときhako_rをはじめます。
{start hako_r;}
else その他のときは、hako_mをはじめます。
{start hako_m;}}
if(Message()==2){ メッセージが2で且つ
if((i==1)||(i==3)||(i==5)) iが1・3・5のときkann_rをはじめます。
{start kann_r;}
if((i==2)||(i==4)||(i==6)) iが2・4・6のときkann_lをはじめます。
{start kann_l;}
else その他のときは、kann_mをはじめます。
{start kann_m;}}
else{while(Message()!=0){ その他のときはメッセージが送られてくるまで繰り返します。
OnFwd(OUT_A+OUT_C); Wait(55);
OnRev(OUT_A+OUT_C); Wait(50); 前進し、後退します。
OnFwd(OUT_A); OnRev(OUT_C); Wait(turn_time); 右にturn_timeだけ曲がりturn_timeに10、iに1加算します。
turn_time =turn_time+10; i=i+1;
OnFwd(OUT_A+OUT_C); Wait(55);
OnRev(OUT_A+OUT_C); Wait(50); 前進し、後退します。
OnFwd(OUT_C); OnRev(OUT_A); Wait(turn_time); 左にturn_timeだけ曲がりturn_timeに10、iに1加算します。
turn_time =turn_time+10; i=i+1;}
}
}
}
終了行:
アーム
#define ARM_TIME 30 アームを開閉する時間を設定します。
#define UP_TIME 70 アームを上下させる時間を設定します。
task main(){
SetSensor(SENSOR_1,SENSOR_LIGHT); 光センサーを設定します。
SetSensor(SENSOR_3,SENSOR_TOUCH); タッチセンサーを設定します。
while(true){
ClearMessage();
if(SENSOR_1<40){OnFwd(OUT_C); Wait(ARM_TIME); アームを閉じます。
OnFwd(OUT_A); Wait(UP_TIME); アームを上げます。
Off(OUT_A+OUT_C);Wait(10);
if(SENSOR_3==1){SendMessage(2); Wait(50);} 缶のときは、タッチセンサーが反応するので、2のメッセージを送ります。
else{SendMessage(1); Wait(50);} } 缶でない時(箱)は、1のメッセージを送ります。
if(Message()==3){OnRev(OUT_A); Wait(75);
OnRev(OUT_C); Wait(35);Off(OUT_A+OUT_C);} 3のメッセージを受け取ったらアームを下ろして、アームを開きます。
}
}
足回り
#define line_h_l while (Timer(0) <= 260) {if(SENSOR_1<42){OnFwd(OUT_A); OnRev(OUT_C); Wait(10);} if(SENSOR_2<42){OnFwd(OUT_C); OnRev(OUT_A); Wait(10);} else {OnFwd(OUT_C+OUT_A); Wait(10);} if((SENSOR_1<43)&&(SENSOR_2<43)){OnFwd(OUT_C); OnRev(OUT_A); Wait(40); }} ライントレースを2.6秒します。三叉路では、左 に曲がります。
#define line_k_r while (Timer(0) <= 260) {if(SENSOR_1<42){OnFwd(OUT_A); OnRev(OUT_C); Wait(10);} if(SENSOR_2<42){OnFwd(OUT_C); OnRev(OUT_A); Wait(10);} else{OnFwd(OUT_C+OUT_A); Wait(10);} if((SENSOR_1<43)&&(SENSOR_2<43)){OnFwd(OUT_A); OnRev(OUT_C); Wait(40); }} ライントレースを2.6秒します。三叉路では、右に曲がります。
#define line_h_r_1 while (Timer(0) <= 200) {if(SENSOR_1<42){OnFwd(OUT_A); OnRev(OUT_C); Wait(10);} if(SENSOR_2<42){OnFwd(OUT_C); OnRev(OUT_A); Wait(10);} else{OnFwd(OUT_C+OUT_A); Wait(10);} if((SENSOR_1<43)&&(SENSOR_2<43)){OnFwd(OUT_A); OnRev(OUT_C); Wait(40); }} ライントレースを2秒します。三叉路では、右に曲がります。
#define line_h_r_2 while (Timer(1) <= 70) {if(SENSOR_1<42){OnFwd(OUT_A); OnRev(OUT_C); Wait(10);} if(SENSOR_2<42){OnFwd(OUT_C); OnRev(OUT_A); Wait(10);} else{OnFwd(OUT_C+OUT_A); Wait(10);} if((SENSOR_1<43)&&(SENSOR_2<43)){OnFwd(OUT_C); OnRev(OUT_A); Wait(40); }} ライントレースを0.7秒します。三叉路では、左に曲がります。
#define line_k_l_1 while (Timer(0) <= 200) {if(SENSOR_1<42){OnFwd(OUT_A); OnRev(OUT_C); Wait(10);} if(SENSOR_2<42){OnFwd(OUT_C); OnRev(OUT_A); Wait(10);} else{OnFwd(OUT_C+OUT_A); Wait(10);} if((SENSOR_1<43)&&(SENSOR_2<43)){OnFwd(OUT_A); OnRev(OUT_C); Wait(40); }} ライントレースを2秒します。三叉路では、右に曲がります。
#define line_k_l_2 while (Timer(1) <= 70) {if(SENSOR_1<42){OnFwd(OUT_A); OnRev(OUT_C); Wait(10);} if(SENSOR_2<42){OnFwd(OUT_C); OnRev(OUT_A); Wait(10);} else{OnFwd(OUT_C+OUT_A); Wait(10);} if((SENSOR_1<43)&&(SENSOR_2<43)){OnFwd(OUT_C); OnRev(OUT_A); Wait(40); }} ライントレースを0.7秒します。三叉路では、左に曲がります。
int i;
int turn_time; 変数iと変数turn_timeを設定します。
task hako_l() { 左側で箱を取ったとき
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_LIGHT); 光センサーを設定します。
while(true){
ClearMessage();
ClearTimer(0);
Off(OUT_A+OUT_C); Wait(40); OnRev(OUT_A+OUT_C); Wait(50); 停止した後後退します。
OnFwd(OUT_C); OnRev(OUT_A); Wait(200); 反転します。
OnFwd(OUT_A+OUT_C); Wait(10);
line_h_l; SendMessage(3); Wait(50); ライントレースをして、3のメッセージを送ります。
Float(OUT_A+OUT_C); Wait(100); OnRev(OUT_A+OUT_C); Wait(50);
OnFwd(OUT_A); OnRev(OUT_C); Wait(190); OnFwd(OUT_A+OUT_C); Wait(300);
Off(OUT_A+OUT_C);} } 停止後に後退し、元の位置に戻ります。
task hako_r() { 右側で箱を取ったとき
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_LIGHT); 光センサーを設定します。
while(true){
ClearMessage();
ClearTimer(0);
ClearTimer(1);
Off(OUT_A+OUT_C); Wait(40); OnRev(OUT_A+OUT_C); Wait(50); 停止した後後退します。
OnFwd(OUT_C); OnRev(OUT_A); Wait(200); 反転します。
OnFwd(OUT_A+OUT_C); Wait(10);
line_h_r_1; line_h_r_2;SendMessage(3); Wait(50); ライントレースをして、3のメッセージを送ります。
Float(OUT_A+OUT_C); Wait(100); OnRev(OUT_A+OUT_C); Wait(50);
OnFwd(OUT_A); OnRev(OUT_C); Wait(190); OnFwd(OUT_A+OUT_C); Wait(300);
Off(OUT_A+OUT_C);} } 停止後に後退し、元の位置に戻ります。
task hako_m(){ 中央で箱を取ったとき
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_LIGHT); 光センサーを設定します。
while(true){
ClearMessage();
ClearTimer(1);
Off(OUT_A+OUT_C); Wait(40); OnRev(OUT_A+OUT_C); Wait(50); 停止した後後退します。
OnFwd(OUT_C); OnRev(OUT_A); Wait(210); 反転します。
OnFwd(OUT_A+OUT_C); Wait(150);
line_h_r_2;SendMessage(3); Wait(50); ライントレースをして、3のメッセージを送ります。
Float(OUT_A+OUT_C); Wait(100); OnRev(OUT_A+OUT_C); Wait(50);
OnFwd(OUT_A); OnRev(OUT_C); Wait(190); OnFwd(OUT_A+OUT_C); Wait(300);
Off(OUT_A+OUT_C);} } 停止後に後退し、元の位置に戻ります。
task kann_r() { 右側で缶を取ったとき
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_LIGHT); 光センサーを設定します。
while(true){
ClearMessage();
ClearTimer(0);
Off(OUT_A+OUT_C); Wait(40); OnRev(OUT_A+OUT_C); Wait(50); 停止した後後退します。
OnFwd(OUT_A); OnRev(OUT_C); Wait(200); 反転します。
OnFwd(OUT_A+OUT_C); Wait(10);
line_k_r; SendMessage(3); Wait(50); ライントレースをして、3のメッセージを送ります。
Float(OUT_A+OUT_C); Wait(100); OnRev(OUT_A+OUT_C); Wait(50);
OnFwd(OUT_C); OnRev(OUT_A); Wait(200); OnFwd(OUT_A+OUT_C); Wait(450);
Off(OUT_A+OUT_C);} } 停止後に後退し、元の位置に戻ります。
task kann_l() { 左側で缶を取ったとき
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_LIGHT); 光センサーを設定します。
while(true){
ClearMessage();
ClearTimer(0);
Off(OUT_A+OUT_C); Wait(40); OnRev(OUT_A+OUT_C); Wait(50); 停止した後後退します。
OnFwd(OUT_A); OnRev(OUT_C); Wait(200); 反転します。
OnFwd(OUT_A+OUT_C); Wait(10);
line_k_l_1; line_k_l_2; SendMessage(3); Wait(50); ライントレースをして、3のメッセージを送ります。
Float(OUT_A+OUT_C); Wait(100); OnRev(OUT_A+OUT_C); Wait(50);
OnFwd(OUT_C); OnRev(OUT_A); Wait(200); OnFwd(OUT_A+OUT_C); Wait(450);
Off(OUT_A+OUT_C);} } 停止後に後退し、元の位置に戻ります。
task kann_m() { 中央で缶を取ったとき
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_LIGHT); 光センサーを設定します。
while(true){
ClearMessage();
ClearTimer(1);
Off(OUT_A+OUT_C); Wait(40); OnRev(OUT_A+OUT_C); Wait(50); 停止した後後退します。
OnFwd(OUT_A); OnRev(OUT_C); Wait(210); 反転します。
OnFwd(OUT_A+OUT_C); Wait(150);
line_k_l_2; SendMessage(3); Wait(50); ライントレースをして、3のメッセージを送ります。
Float(OUT_A+OUT_C); Wait(100); OnRev(OUT_A+OUT_C); Wait(50);
OnFwd(OUT_C); OnRev(OUT_A); Wait(200); OnFwd(OUT_A+OUT_C); Wait(450);
Off(OUT_A+OUT_C);} } 停止後に後退し、元の位置に戻ります。
task main() {
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_LIGHT); 光センサーを設定します。
turn_time=10;
i=0; turn_timeを10・iを0とおきます。
while(true){
ClearMessage();
ClearTimer(0);
OnFwd(OUT_A+OUT_C); Wait(50); 前進します。
if(Message()==1){ メッセージが1で且つ
if((i==1)||(i==3)||(i==5)) iが1・3・5のときhako_lをはじめます。
{start hako_l;}
if((i==2)||(i==4)||(i==6)) iが2・4・6のときhako_rをはじめます。
{start hako_r;}
else その他のときは、hako_mをはじめます。
{start hako_m;}}
if(Message()==2){ メッセージが2で且つ
if((i==1)||(i==3)||(i==5)) iが1・3・5のときkann_rをはじめます。
{start kann_r;}
if((i==2)||(i==4)||(i==6)) iが2・4・6のときkann_lをはじめます。
{start kann_l;}
else その他のときは、kann_mをはじめます。
{start kann_m;}}
else{while(Message()!=0){ その他のときはメッセージが送られてくるまで繰り返します。
OnFwd(OUT_A+OUT_C); Wait(55);
OnRev(OUT_A+OUT_C); Wait(50); 前進し、後退します。
OnFwd(OUT_A); OnRev(OUT_C); Wait(turn_time); 右にturn_timeだけ曲がりturn_timeに10、iに1加算します。
turn_time =turn_time+10; i=i+1;
OnFwd(OUT_A+OUT_C); Wait(55);
OnRev(OUT_A+OUT_C); Wait(50); 前進し、後退します。
OnFwd(OUT_C); OnRev(OUT_A); Wait(turn_time); 左にturn_timeだけ曲がりturn_timeに10、iに1加算します。
turn_time =turn_time+10; i=i+1;}
}
}
}
ページ名: