- 追加された行はこの色です。
- 削除された行はこの色です。
目次
#contents
*課題 [#he699fa0]
**ロボコン [#p91ba67a]
[[詳細はこちら>2010a/ロボコン]]
**メンバー [#ud8a88ce]
田島・新谷・みさいづ・みのう
*ロボットの製作(橋の役目をする側) [#xbfe1ccc]
**製作したロボット [#h992e180]
*ロボットの製作 [#j55e780b]
**製作したロボット(橋の役目をする側) [#i746af83]
#ref(./100806robo01.jpg,around,80%,ロボット(橋側:展開))
#ref(./100806robo02.jpg,around,80%,ロボット(橋側:収納))
#clear
**製作したロボット(玉を回収する側) [#t0ba302e]
#ref(./100806robo03.jpg,80%,ロボット(玉回収側))
**ロボット合体 [#j189426d]
#ref(./100806robo_c.jpg,80%,ロボット合体)
**工夫した点 [#mea520b7]
**今後改善すべき点 [#kc9649f1]
*ロボットの製作(玉を回収する側) [#r61563ee]
**製作したロボット [#pded5d9d]
**工夫した点 [#i6f48fc5]
*プログラムの作成 [#h067f65d]
**作成したプログラム(橋の役目をする側) [#k1b4435d]
**今後改善すべき点 [#p1f1d704]
**作成したプログラム(玉を回収する側) [#c2cf51d6]
#define go_straight() OnRev(OUT_A);OnFwd(OUT_C); // 前進
#define go_back() OnFwd(OUT_A);OnRev(OUT_C); // 後退
#define go_stop() Off(OUT_A+OUT_C); // 停止
#define arm_up() OnRev(OUT_B); // アーム上昇
#define arm_down() OnFwd(OUT_B); // アーム降下
#define arm_stop() Off(OUT_B); // アーム停止
#define CHILD_MOVE_BEGIN 1 // 玉回収開始信号
#define CHILD_MOVE_END 2 // 玉回収終了信号
#define CHILD_MOVE_STOPCHECK 3 // 玉回収終了信号受信確認信号
#define armlength 140 // 玉回収時前後移動量
#define armuptime 90 // アーム上昇量
#define armdntime 75 // アーム降下量
#define bgmaxcount 6 // 玉回収最大試行回数
int prework = 1; // 玉回収開始信号待ちフラグ
int dowork = 0; // 玉回収中フラグ
int lastwork = 0; // 玉回収終了信号送信、玉回収終了信号受信確認信号待ちフラグ
int revbool = 0; // 玉回収(後退)中フラグ
int bg1bool = 0; // 玉回収(アーム降下)中フラグ
int bg2bool = 0; // 玉回収(前進)中フラグ
int bg3bool = 0; // 玉回収(アーム上昇)中フラグ
int bgcount = 0; // 玉回収試行回数
task main() {
SetSensor(SENSOR_2, SENSOR_TOUCH);
ClearMessage();
while(prework) { // 玉回収信号待ち
Off(OUT_A+OUT_B+OUT_C);
if(Message() == CHILD_MOVE_BEGIN) { // 玉回収信号受信
ClearMessage();
prework = 0; // フラグを切り替え玉回収へ移行
dowork = 1;
ClearTimer(1);
}
}
while(dowork) { // 玉回収
if(bg1bool) { // 玉回収(アーム降下)
go_stop();
arm_down();
if(FastTimer(0)>armdntime) { // アーム下げたらフラグ切り替え
arm_stop();
bg1bool = 0;
bg2bool = 1;
ClearTimer(0);
}
} else if(bg2bool) { // 玉回収(前進)
go_straight();
if(FastTimer(0)>armlength) { // 玉回収時前後移動量進んだらフラグ切り替え
go_stop();
bg2bool = 0;
bg3bool = 1;
ClearTimer(0);
}
} else if(bg3bool) { // 玉回収(アーム上昇)
arm_up();
if(FastTimer(0)>armuptime) { // アーム上げたらフラグ切り替え
arm_stop();
bgcount++;
bg3bool = 0;
if(bgcount >= bgmaxcount) { // 玉回収最大試行回数試行したら回収終了
bg3bool = 0; // フラグ切り替えて玉回収終了信号送信開始、玉回収終了信号受信確認信号待ち
dowork = 0;
lastwork = 1;
ClearMessage();
}
ClearTimer(0);
}
} else if((SENSOR_2 || revbool) && !(bg1bool || bg2bool || bg3bool) && FastTimer(1)>450) { // 玉回収(後退)、橋から降りている間(動作開始後4.5秒間)は反応しない
go_back();
if(!revbool) { // タッチセンサが離れても後退を継続するためのフラグを立てる
revbool = 1;
ClearTimer(0);
}
if(FastTimer(0)>armlength) { // 玉回収時前後移動量下がったらフラグ切り替え
revbool = 0;
bg1bool = 1;
ClearTimer(0);
}
} else { // 通常
go_straight(); // 前進
}
}
while(lastwork) { // 玉回収終了信号送信、玉回収終了信号受信確認信号待ち
go_back(); // 後退
if(FastTimer(0) >= 100) { // 1秒ごとに玉回収終了信号送信
PlaySound(SOUND_CLICK);
SendMessage(CHILD_MOVE_END);
ClearTimer(0);
}
if(Message() == CHILD_MOVE_STOPCHECK) { // 玉回収終了信号受信
go_stop(); // 停止
lastwork = 0; // フラグ下げて動作停止
}
}
}
*プログラムの作成(橋の役目をする側) [#bda43bde]
**作成したプログラム [#x2f80c38]
**工夫した点 [#q1db4e68]
**今後改善すべき点 [#oa6648ea]
*プログラムの作成(玉を回収する側) [#yfc63e77]
**作成したプログラム [#l31b74c6]
**工夫した点 [#z8068776]
**今後改善すべき点 [#ucc19c2b]
*反省・感想 [#m0f5f047]
-(田島)
-(新谷)
-(みさいづ)
-(みのう)
*コメントをどうぞ [#dc28d5e7]