2018a/Member 目次
缶を指定された場所に運ぶロボットを作り、プログラミングする。
#define LOWPOWER 1 #define HIGHPOWER 6 #define B 39 //黒 #define W 40 //白
#define turn_r OnFwd(OUT_A);OnRev(OUT_C);SetPower(OUT_AC,HIGHPOWER); //右旋回 #define turn_l OnFwd(OUT_C);OnRev(OUT_A);SetPower(OUT_AC,HIGHPOWER); //左旋回 #define go OnFwd(OUT_AC);SetPower(OUT_AC,LOWPOWER); //直進 #define catch_sita Off(OUT_B);SetPower(OUT_B,LOWPOWER);OnFwd(OUT_B); //下の缶を掴む #define release Off(OUT_B);SetPower(OUT_B,LOWPOWER);OnRev(OUT_B); //下の缶を放す #define stay Off(OUT_AC); //止まる
//通信用定義 #define CATCH_UE 11 //上の缶を掴ませる #define STAY 12 //止まらせる #define RELEASE 13 //上の缶を放させる #define GO_TRACE 14& //トレースに戻る #define PUSH 15 //真ん中の缶を落とさせる #define DOWN 16 //上の缶を下ろさせる
task main(){ SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); ClearMessage();
int blackN = 0; //T字路の判断 while(blackN <= 1){ if(SENSOR_1 >= WHITE && SENSOR_3>= WHITE) //トレース開始 go; }else if(SENSOR_3 <= BLACK && blackN == 0){ //曲がり角判断 go;Wait(50); stay;Wait(50); turn_r; Wait(125); blackN++; //黒に入った回数をカウント
}else if(SENSOR_3 <= B && blackN == 1){//T字路判断 stay; blackN++; } stay;Wait(30); //一時停止 } catch_sita;Wait(60);Off(OUT_B); //下の缶を掴む
SendMessage(CATCH_UE);Wait(800); //上の缶を掴む命令を出す
while(Message() == GO_TRACE) {SendMessage(STAY); stay;Wait(50); OnFwd(OUT_AC);Wait(300);stay; ClearMessage(); } }
#define LOWPOWER 2 #define catch_ue OnFwd(OUT_C);SetPower(OUT_C,LOWPOWER);Wait(100); //上の缶を掴む #define release OnRev(OUT_C);SetPower(OUT_C,LOWPOWER);Wait(100);Off(OUT_C); //上の缶を放す #define lift_up OnFwd(OUT_A);SetPower(OUT_A,LOWPOWER);Wait(100);Off(OUT_A); //上の缶を上げる #define lift_down OnRev(OUT_A);SetPower(OUT_A,LOWPOWER);Wait(200);Off(OUT_A); //上の缶を下ろす #define push OnFwd(OUT_B);SetPower(OUT_B,LOWPOWER);Wait(100);Off(OUT_B); //真ん中の缶を落とす #define reload OnRev(OUT_B);SetPower(OUT_B,LOWPOWER);Wait(100);Off(OUT_B); //缶を落とす機構を戻す #define stay Off(OUT_AC); //静止 //通信用 #define CATCH_UE 11 //上の缶を持ち上げる #define STAY 12 //静止する #define RELEASE 13 //上の缶を放す #define GO_TRACE 14 //トレース動作に戻させる #define PUSH 15& //真ん中の缶を落とす #define LIFT_DOWN 16 //上の缶を下ろす
task main(){ ClearMessage(); int CT1=0; //缶のタワー1に対する動作の区別 while(CT1 == 0){ if(Message()==CATCH_UE) {grip_ue; //上の缶を掴む stay;Wait(50); CT1++; //缶のタワー1に対する操作終わり }else{ stay; } } lift_up; //上の缶を持ち上げる stay;Wait(50); push; //缶を押し倒す Wait(50); reload; //落とすのに使った機構を戻す stay;Wait(50); lift_down; //上の缶を下ろす SendMessage(GO_TRACE); //トレース再開 }