2016a/Member/RaikouRK/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2016a/Member]]
[[asd:http://yakushi.shinshu-u.ac.jp/robotics/?2016a%2FMember%2FRaikouRK%2FMission2]]
*今回の課題 [#j300978a]
*指針と計画 [#yc06bf5b]
*失敗作と得られた知見 [#q89e7b13]
*完成した機体の解説 [#ldd6e701]
*プログラムの解説 [#j40ae6ea]
*結果とまとめ [#ifec02b2]
#define Middle 45
:::
~task main()
{
setting();
STARTING_OPERATION();
repeat(2)
{
TRACE();
zensin();
}
//交差点からDへ向かう
TRACE();
OnRev(OUT_C);
Wait(25);
TRACE();
//誤差修正
OnRev(OUT_A);
Wait(95);
Off(OUT_AC);
//dに到着
OnFwd(OUT_B);//コップつかむ
Wait(250);
start keep;
TURN_180();//180°回転
OnFwd(OUT_A);//Qの方向を向く
OnRev(OUT_C);
Wait(200);
Off(OUT_AC);
OnRev(OUT_AC);//進む
Wait(100);
Off(OUT_AC);
//センサー使って進む
while(SENSOR_1 > Middle-4)
OnRev(OUT_AC);
stop keep;
//放す
Off(OUT_AC);
down();
}
sub setting()
{
//初期設定(パワー、センサー)
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_TOUCH);//モータB止める用
SetSensor(SENSOR_3,SENSOR_LIGHT);
SetPower(OUT_AC,4);//タイヤ
SetPower(OUT_B,7);//上下、開き
}
sub zensin()
{
OnRev(OUT_A);
Wait(106);
Off(OUT_A);
}
sub copjugde()
//コップが前にくるまで前進
{
while(SENSOR_3 < 46)
OnRev(OUT_AC);
Off(OUT_AC);
Wait(100);
}
task keep()
//上でキープしておくただし、ラインとレースと並列動作させるためtaskで定義
{
while(1)
{
OnRev(OUT_B);
Wait(1);
OnFwd(OUT_B);
Wait(1);
}
}
sub TRACE()
//トレース用メソッド
{
ClearTimer(0);
while(FastTimer(0)<=42){
if(SENSOR_1>Middle+4)//白 左旋回
{
OnFwd(OUT_C);
OnRev(OUT_A);
ClearTimer(0);
}
else if(SENSOR_1>Middle+2)//やや白 左折
{
Off(OUT_C);
OnRev(OUT_A);
ClearTimer(0);
}
else if(SENSOR_1>Middle)//直進
{
OnRev(OUT_AC);
ClearTimer(0);
}
else if(SENSOR_1>Middle-2)//やや黒 右折
{
Off(OUT_A);
OnRev(OUT_C);
}
else //黒 右旋回
{
OnFwd(OUT_A);
OnRev(OUT_C);
}
}
Off(OUT_AC);
PlaySound(SOUND_FAST_UP);//トレース終了、交差点認識
}
sub down()
//下に下げる動作
{
OnRev(OUT_B);
Wait(200);
}
sub STARTING_OPERATION()
//スタート地点の四角から脱出する
{
while(SENSOR_1<Middle)
{
OnRev(OUT_AC);
}
while(SENSOR_1>Middle)
{
OnRev(OUT_AC);
}
OnRev(OUT_AC);
Wait(50);
Off(OUT_C);
OnRev(OUT_A);
Wait(40);
while(SENSOR_1<Middle)
{
OnRev(OUT_AC);
}
Off(OUT_AC);
}
sub TURN_180()
//180ど回転
{
OnFwd(OUT_AC);
Wait(80);
Off(OUT_AC);
OnRev(OUT_A);
Wait(130);
while(SENSOR_1>40)
{
OnFwd(OUT_C);
OnRev(OUT_A);
}
Off(OUT_AC);
}
終了行:
[[2016a/Member]]
[[asd:http://yakushi.shinshu-u.ac.jp/robotics/?2016a%2FMember%2FRaikouRK%2FMission2]]
*今回の課題 [#j300978a]
*指針と計画 [#yc06bf5b]
*失敗作と得られた知見 [#q89e7b13]
*完成した機体の解説 [#ldd6e701]
*プログラムの解説 [#j40ae6ea]
*結果とまとめ [#ifec02b2]
#define Middle 45
:::
~task main()
{
setting();
STARTING_OPERATION();
repeat(2)
{
TRACE();
zensin();
}
//交差点からDへ向かう
TRACE();
OnRev(OUT_C);
Wait(25);
TRACE();
//誤差修正
OnRev(OUT_A);
Wait(95);
Off(OUT_AC);
//dに到着
OnFwd(OUT_B);//コップつかむ
Wait(250);
start keep;
TURN_180();//180°回転
OnFwd(OUT_A);//Qの方向を向く
OnRev(OUT_C);
Wait(200);
Off(OUT_AC);
OnRev(OUT_AC);//進む
Wait(100);
Off(OUT_AC);
//センサー使って進む
while(SENSOR_1 > Middle-4)
OnRev(OUT_AC);
stop keep;
//放す
Off(OUT_AC);
down();
}
sub setting()
{
//初期設定(パワー、センサー)
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_TOUCH);//モータB止める用
SetSensor(SENSOR_3,SENSOR_LIGHT);
SetPower(OUT_AC,4);//タイヤ
SetPower(OUT_B,7);//上下、開き
}
sub zensin()
{
OnRev(OUT_A);
Wait(106);
Off(OUT_A);
}
sub copjugde()
//コップが前にくるまで前進
{
while(SENSOR_3 < 46)
OnRev(OUT_AC);
Off(OUT_AC);
Wait(100);
}
task keep()
//上でキープしておくただし、ラインとレースと並列動作させるためtaskで定義
{
while(1)
{
OnRev(OUT_B);
Wait(1);
OnFwd(OUT_B);
Wait(1);
}
}
sub TRACE()
//トレース用メソッド
{
ClearTimer(0);
while(FastTimer(0)<=42){
if(SENSOR_1>Middle+4)//白 左旋回
{
OnFwd(OUT_C);
OnRev(OUT_A);
ClearTimer(0);
}
else if(SENSOR_1>Middle+2)//やや白 左折
{
Off(OUT_C);
OnRev(OUT_A);
ClearTimer(0);
}
else if(SENSOR_1>Middle)//直進
{
OnRev(OUT_AC);
ClearTimer(0);
}
else if(SENSOR_1>Middle-2)//やや黒 右折
{
Off(OUT_A);
OnRev(OUT_C);
}
else //黒 右旋回
{
OnFwd(OUT_A);
OnRev(OUT_C);
}
}
Off(OUT_AC);
PlaySound(SOUND_FAST_UP);//トレース終了、交差点認識
}
sub down()
//下に下げる動作
{
OnRev(OUT_B);
Wait(200);
}
sub STARTING_OPERATION()
//スタート地点の四角から脱出する
{
while(SENSOR_1<Middle)
{
OnRev(OUT_AC);
}
while(SENSOR_1>Middle)
{
OnRev(OUT_AC);
}
OnRev(OUT_AC);
Wait(50);
Off(OUT_C);
OnRev(OUT_A);
Wait(40);
while(SENSOR_1<Middle)
{
OnRev(OUT_AC);
}
Off(OUT_AC);
}
sub TURN_180()
//180ど回転
{
OnFwd(OUT_AC);
Wait(80);
Off(OUT_AC);
OnRev(OUT_A);
Wait(130);
while(SENSOR_1>40)
{
OnFwd(OUT_C);
OnRev(OUT_A);
}
Off(OUT_AC);
}
ページ名: