- 追加された行はこの色です。
- 削除された行はこの色です。
[[2016a/Member]]
*課題 [#x4f0f64c]
*プログラム [#ldb24048]
本体
#define SPEED 50 //スピード50
#define go_forward OnFwd(OUT_BC,SPEED); //前進
#define CONN 1 //スレーブを表している
#define SIGNALON 21 //腕を動かすためにマスターがスレーブに送る信号
#define SIGNALOFF 22 //腕を動かし終わったことをスレーブがマスターに送る信号
#define SIGNALON2 31
#define SIGNALOFF2 32
#define turn_leftC OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPEED); //左旋回
#define turn_rightC OnFwd(OUT_C,SPEED);OnRev(OUT_B,SPEED); //右折
task main()
{
int msg //MAILBOXに来る信号をmsgと定義する
SetSensorLowspeed(S1); //端子1に超音波センサ
go_forward; //前進
until(SensorUS(S1) <= 9); //センサの半径9cmに紙コップが入ったら停止
Off(OUT_BC);
SendRemoteNumber(CONN,MAILBOX1,SIGNALON ); //信号を送る
while (true){
ReceiveRemoteNumber(MAILBOX2,true,msg); //msgを受け取っている間
if (msg == SIGNALOFF ){ //信号を受け取ったら左旋回する
turn_leftC;
Wait(1600);
Off(OUT_BC);
go_forward; //前進
Wait(1000);
Off(OUT_BC);
SendRemoteNumber(CONN,MAILBOX1,SIGNALON2 ); //腕を動かすために信号を送る
if (msg == SIGNALOFF2 ){ //信号を受け取ったら左旋回し、停止
turn_leftC;
Wait(1000);
Off(OUT_BC);
}else { //それ以外では停止したまま
Off(OUT_BC);
}
}
}
}
腕
#define SIGNALON 21 //腕を動かすためにマスターがスレーブに送る信号
#define SIGNALOFF 22 //腕を動かし終わったことをスレーブがマスターに送る信号
#define LIFT_up OnRev(OUT_C,35);Wait(520);Off(OUT_BC); //腕を上げる
#define LIFT_down OnFwd(OUT_C,20);Wait(550);Off(OUT_BC); //腕を下ろす
#define CATCH OnFwd(OUT_B,60);Wait(2000);Off(OUT_B); //紙コップを持つ
#define RELEASE OnFwd(OUT_B,50);Wait(1500);Off(OUT_B); //紙コップを離す
#define CONN 0 //マスターとつながっている
#define SIGNALON2 31
#define SIGNALOFF2 32
void ude() //サブルーチン
{
LIFT_down;
CATCH;
LIFT_up;
CATCH;
Off(OUT_B);
}
task main ()
{
int msg;
while (true) {
ReceiveRemoteNumber(MAILBOX1,true,msg); //msgを受けている間
if (msg == SIGNALON) { //信号を受け取ったら紙コップを持ち上げる
ude();
SendResponseNumber(MAILBOX2,SIGNALOFF); //本体に次の行動をするように信号を送る
}
if (msg == SIGNALON2) { //信号を受け取ったら紙コップを離す
RELEASE;
SendResponseNumber(MAILBOX2,SIGNALOFF2); //本体に次の行動をするように信号を送る
} else { //どちらでもなかったら動かない
Off(OUT_BC);
}
}
}