2004/A6/ロボコン/運ぶロボット/二号機のプログラム
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2004/A6/ロボコン/運ぶロボット/プログラム]]
*二号機のプログラム [#sb29d01b]
task main()
{
int move_time;
SetSensor(SENSOR_1,SENSOR_LIGHT);//横につけたセンサー
SetSensor(SENSOR_2,SENSOR_LIGHT);//前につけた色を判断するためのセンサー
SetPower(OUT_C,7);//モーターCは箱を取り入れたりかきだす時に使い、AとBはタイヤ(移動)に使う。
OnFwd(OUT_A+OUT_B); Wait(300);//台から降りる
OnRev(OUT_A);//前を向く
OnFwd(OUT_B); Wait(200);
OnRev(OUT_A+OUT_B);Wait(300);//ちょっと前進
Off(OUT_A+OUT_B); Wait(30);
OnFwd(OUT_A)//90度右回転
OnRev(OUT_B); Wait(100);
OnRev(OUT_A+OUT_B); Wait(300);//前進
OnRev(OUT_A);//90度左回転
OnFwd(OUT_B); Wait(100);
Off(OUT_A+OUT_B);
while(true)
{
ClearTimer(0);
OnRev(OUT_A+OUT_B);//前進
until(SENSOR_1>50);//パックにぶつかるまで
Wait(10);
Off(OUT_A+OUT_B);//止まる
move_time = 10*Timer(0);//move_timeの定義
OnFwd(OUT_C); Wait(200);//箱をのせる
OnFwd(OUT_A+OUT_B); Wait(50);//後退
Off(OUT_C);
OnRev(OUT_A+OUT_B); Wait(50);//前進
OnFwd(OUT_C);
OnFwd(OUT_A+OUT_B); Wait(30);//後退
Off(OUT_C);
OnRev(OUT_A+OUT_B); Wait(50);//前進
Off(OUT_A+OUT_B); Wait(30);
if(SENSOR_2>35)//箱が緑,白
{
OnFwd(OUT_A+OUT_B); Wait(move_time);//後退
Off(OUT_A+OUT_B);Wait(600);//止まる
ClearTimer(1);
while(Timer(1)<=50)//上げるロボットと通信
{
SendMessage(1);
Wait(50);
}
OnRev(OUT_A);//180度回転
OnFwd(OUT_B); Wait(200);
Off(OUT_A+OUT_B);
OnRev(OUT_C); Wait(200);//箱を降ろす
Off(OUT_C);
SetPower(OUT_C,1);//モーターを弱くして棒を下向きにする(かき棒を元の状態にする)
OnRev(OUT_C); Wait(100);
Off(OUT_C); Wait(30);
SetPower(OUT_C,7);
OnRev(OUT_A);//180度回転
OnFwd(OUT_B); Wait(180);
Off(OUT_A+OUT_B);
}
else if(SENSOR_2<35)
{
OnFwd(OUT_A);//右回転
OnRev(OUT_B);
Wait(160);
Off(OUT_A+OUT_B);//止まる
OnRev(OUT_C); Wait(300);//箱を降ろす
Off(OUT_C);
SetPower(OUT_C,1);//かき棒を下向きにする
OnRev(OUT_C); Wait(100);
Off(OUT_C); Wait(30);
SetPower(OUT_C,7);
OnFwd(OUT_A);//回転
OnRev(OUT_B);
Wait(240);//前を向く
Off(OUT_A+OUT_B);
}
}
}
-----------
結構長いプログラムになってしまった。サブルーチン等を使えばもっと簡潔にできたはず...だけどあまり余裕がなかったためこのまま実行!!第一の問題は上げるロボットと通信が出来なかったこと。そのため調整はタイマーを使うこととなった。
箱を取り入れてから前後に動くことによって箱を掴み損なうという事がなくなった。
終了行:
[[2004/A6/ロボコン/運ぶロボット/プログラム]]
*二号機のプログラム [#sb29d01b]
task main()
{
int move_time;
SetSensor(SENSOR_1,SENSOR_LIGHT);//横につけたセンサー
SetSensor(SENSOR_2,SENSOR_LIGHT);//前につけた色を判断するためのセンサー
SetPower(OUT_C,7);//モーターCは箱を取り入れたりかきだす時に使い、AとBはタイヤ(移動)に使う。
OnFwd(OUT_A+OUT_B); Wait(300);//台から降りる
OnRev(OUT_A);//前を向く
OnFwd(OUT_B); Wait(200);
OnRev(OUT_A+OUT_B);Wait(300);//ちょっと前進
Off(OUT_A+OUT_B); Wait(30);
OnFwd(OUT_A)//90度右回転
OnRev(OUT_B); Wait(100);
OnRev(OUT_A+OUT_B); Wait(300);//前進
OnRev(OUT_A);//90度左回転
OnFwd(OUT_B); Wait(100);
Off(OUT_A+OUT_B);
while(true)
{
ClearTimer(0);
OnRev(OUT_A+OUT_B);//前進
until(SENSOR_1>50);//パックにぶつかるまで
Wait(10);
Off(OUT_A+OUT_B);//止まる
move_time = 10*Timer(0);//move_timeの定義
OnFwd(OUT_C); Wait(200);//箱をのせる
OnFwd(OUT_A+OUT_B); Wait(50);//後退
Off(OUT_C);
OnRev(OUT_A+OUT_B); Wait(50);//前進
OnFwd(OUT_C);
OnFwd(OUT_A+OUT_B); Wait(30);//後退
Off(OUT_C);
OnRev(OUT_A+OUT_B); Wait(50);//前進
Off(OUT_A+OUT_B); Wait(30);
if(SENSOR_2>35)//箱が緑,白
{
OnFwd(OUT_A+OUT_B); Wait(move_time);//後退
Off(OUT_A+OUT_B);Wait(600);//止まる
ClearTimer(1);
while(Timer(1)<=50)//上げるロボットと通信
{
SendMessage(1);
Wait(50);
}
OnRev(OUT_A);//180度回転
OnFwd(OUT_B); Wait(200);
Off(OUT_A+OUT_B);
OnRev(OUT_C); Wait(200);//箱を降ろす
Off(OUT_C);
SetPower(OUT_C,1);//モーターを弱くして棒を下向きにする(かき棒を元の状態にする)
OnRev(OUT_C); Wait(100);
Off(OUT_C); Wait(30);
SetPower(OUT_C,7);
OnRev(OUT_A);//180度回転
OnFwd(OUT_B); Wait(180);
Off(OUT_A+OUT_B);
}
else if(SENSOR_2<35)
{
OnFwd(OUT_A);//右回転
OnRev(OUT_B);
Wait(160);
Off(OUT_A+OUT_B);//止まる
OnRev(OUT_C); Wait(300);//箱を降ろす
Off(OUT_C);
SetPower(OUT_C,1);//かき棒を下向きにする
OnRev(OUT_C); Wait(100);
Off(OUT_C); Wait(30);
SetPower(OUT_C,7);
OnFwd(OUT_A);//回転
OnRev(OUT_B);
Wait(240);//前を向く
Off(OUT_A+OUT_B);
}
}
}
-----------
結構長いプログラムになってしまった。サブルーチン等を使えばもっと簡潔にできたはず...だけどあまり余裕がなかったためこのまま実行!!第一の問題は上げるロボットと通信が出来なかったこと。そのため調整はタイマーを使うこととなった。
箱を取り入れてから前後に動くことによって箱を掴み損なうという事がなくなった。
ページ名: