本当はタッチセンサー・光センサーを搭載していたのですが、本番直前まで、うまく機能 しなかったため、センサーを外し、秒数のみで勝負することにしました。 本当に急だったため、センサー搭載型のプログラムは残存せず、悔やみきれません。 秒単位で細かく動作させるため、subパーツで細かく時間調整しやすくしています。 本来REPEATの後は、箱を光で感知したら、下半身に停止を通信し、クレーンを下げ、 箱を捕らえたとことをタッチセンサーで認識したら、通信で下半身が箱置場に動くように 組んでいました。
/*udeDX*/ //本番用上半身パーツ
#define RUN_TIME 500//トレースする時間(単位 1/10 秒) sub tukami1() //箱を掴む前に手首の状態を整えるsubプログラム { Off(OUT_A+OUT_C); SetPower(OUT_A,6); SetPower(OUT_C,3); OnRev(OUT_C); }
sub tukami2() //箱を掴むsubプログラム { Off(OUT_A+OUT_C); SetPower(OUT_A,6); SetPower(OUT_C,4); OnRev(OUT_C); }
sub motiage() //最初に腕の持ち上げを行うsubプログラム { Off(OUT_A+OUT_C); SetPower(OUT_A,4); SetPower(OUT_C,3); OnFwd(OUT_A); }
sub motiage4() //箱を掴んでから重力で下がらないために、引き上げておくsubプログラ ム、ロボコン中はアームが折れるので封印 { Off(OUT_A+OUT_C); SetPower(OUT_A,0); SetPower(OUT_C,0); OnFwd(OUT_A);OnRev(OUT_C); }
sub motiage3() //箱を掴んでから引き上げる時のsubプログラム { Off(OUT_A+OUT_C); SetPower(OUT_A,6); SetPower(OUT_C,2); OnFwd(OUT_A);OnRev(OUT_C); }
sub hazusi() //箱を置く・手のスタート時の状態を維持するsubプログラム { Off(OUT_A+OUT_C); SetPower(OUT_A,6); SetPower(OUT_C,7); OnFwd(OUT_C); }
sub motisage() //腕を下げるプログラム { Off(OUT_A+OUT_C); SetPower(OUT_A,6); SetPower(OUT_C,6); OnRev(OUT_A); }
task main() //基本プログラム { SetSensor(SENSOR_1,SENSOR_TOUCH); SetSensor(SENSOR_2,SENSOR_LIGHT);//箱掴み確認用 hazusi();Wait(608); //スタート時に手が下がらないように押えておきます motiage();//腕を持ち上げるように受信 Wait(310); Off(OUT_A+OUT_C); //腕手、上方で停止 Wait(190); //スタンバイ完了、 repeat(10) //着地後の行動指令です { motisage();Wait(100); //腕を下げる tukami2();Wait(100); //手をげる motiage3();Wait(180); //腕を持ち上げる Off(OUT_A+OUT_C);Wait(700); //箱置場まで待機 hazusi();Wait(208); //箱を置く Off(OUT_A+OUT_C);Wait(558); motisage();Wait(200); //腕を下げて着地直後の状態に戻す Off(OUT_A+OUT_C);Wait(50); hazusi();Wait(200); //地面に引っかからないように手を固定 motiage();Wait(330); //腕を持ち上げるように受信 Off(OUT_A+OUT_C);Wait(190); //腕手、上方で停止 //再スタンバイ完了 } }