- 追加された行はこの色です。
- 削除された行はこの色です。
*ライントレース版プログラム [#a5d2ed9b]
int repeat_time;
*ライントレース版プログラム //製作者 少年[#a5d2ed9b]
結局開発が追いつかず、完成に至らなかったプログラム
int nikai=2;
task main()
{
SetSensor(SENSOR_2,SENSOR_TOUCH);
Wait(100);
OnFwd(OUT_B);
ClearMessage();
until(Message()!=0);
if(Message()==3)
SetSensor(SENSOR_1,SENSOR_LIGHT);/センサー1を光センサーと 定義
SetSensor(SENSOR_2,SENSOR_TOUCH);/センサー2をタッチセン サーと定義
SetSensor(SENSOR_3,SENSOR_LIGHT);/センサ−3を光センサーと定義
Wait(100);
OnFwd(OUT_B);/スイッチを入れて1秒後に受け身ロボット発動
ClearMessage();/メッセージリセット
until(Message()!=0);/0以外のメッセージが来るまで待機
if(Message()==3)/メッセージ3を受け取ると
{
Off(OUT_B);
}
OnFwd(OUT_A+OUT_C);
Wait(200);
OnRev(OUT_C);
Wait(35);
OnFwd(OUT_A);
Wait(100);
OnRev(OUT_C);
Wait(35);
OnFwd(OUT_A+OUT_C);
Wait(200);
SendMessage(1);
Wait(100);
Off(OUT_A+OUT_C);
until(SENSOR_2!=0);
if(SENSOR_2==1);
Off(OUT_B);/受け身ロボット停止
}
while(nikai==2||1)/
{
SendMessage(4);
ClearTimer(0);/タイマースタート
if(FastTimer(0)<300);/3秒たつまでの間に
{
if(SENSOR_1&&SENSOR_3>40)/センサ−1とセンサ−3がライン 上になければ
{
OnFwd(OUT_A+OUT_C);/運搬ロボット前進
}
}
if(FastTimer(0)>300);/3秒経過後
{
if(SENSOR_1&&SENSOR_3>40)/センサ−1とセンサ−3がライン上になければ
{
OnFwd(OUT_A+OUT_C);/運搬ロボット前進
}
if(SENSOR_1&&SENSOR_3<40)/センサ−1とセンサ−3がともに
ライン上に乗っていれば
{
OnRev(OUT_C);/
Wait(90);
OnFwd(OUT_C);/右に回転して前進
nikai-1;/
}
}
}
ClearMessage();
until(Message()!=0);
if(Message()==2)
OnFwd(OUT_A+OUT_C);/前進
Wait(300);/
SendMessage(1);/メッセージ1送信
Wait(100);/
Off(OUT_A+OUT_C);/運搬ロボット停止
ClearMessage();/メッセージリセット
until(Message()!=0);/0以外のメッセージが来るまで待機
if(Message()==2)/メッセージ2がきたら
{
OnRev(OUT_A+OUT_C);
Wait(100);
OnFwd(OUT_C);
OnRev(OUT_A+OUT_C);/後退して
Wait(100);/
OnFwd(OUT_A);/右に回転して
Wait(90);
OnFwd(OUT_A);
OnFwd(OUT_C);/前進
Wait(60);
OnRev(OUT_C);
OnRev(OUT_A);/左に回転して
Wait(90);
OnFwd(OUT_C);
OnFwd(OUT_A);/前進
Wait(100);
SendMessage(1);
SendMessage(1);/メッセージ1を送信して
Wait(50);
Off(OUT_A+OUT_C);
Off(OUT_A+OUT_C);/停止
}
}
*緊急用プログラム [#fd818311]
int repeat_time;
*緊急用プログラム //製作者 少年[#fd818311]
本番直前、適当に数値を入れた間に合わせのプログラム。本番で使われたのはこっち。
int repeat_time; /
task main()
{
SetSensor(SENSOR_2,SENSOR_TOUCH);
Wait(100);
OnFwd(OUT_B);
SetSensor(SENSOR_2,SENSOR_TOUCH);/センサ−2をタッチセンサーと定義
Wait(100);/スイッチを入れてから一秒後に
OnFwd(OUT_B);/受け身ロボットが動く
ClearMessage();
until(Message()!=0);
if(Message()==3)
until(Message()!=0);/0以外のメッセージが来るまで待機
if(Message()==3)/もしメッセージ3を受け取ったら
{
Off(OUT_B);
Off(OUT_B);/受け身ロボット停止
}
OnFwd(OUT_A+OUT_C);
Wait(200);
OnRev(OUT_C);
Wait(30);
OnFwd(OUT_A);
Wait(100);
OnRev(OUT_C);
Wait(30);
OnFwd(OUT_A+OUT_C);
Wait(200);
SendMessage(1);
Wait(100);
Off(OUT_A+OUT_C);
until(SENSOR_2!=0);
if(SENSOR_2==1);
OnFwd(OUT_A+OUT_C);/運搬ロボットが始動
Wait(200);/2秒間進んだ後
OnRev(OUT_C);/
Wait(35);/
OnFwd(OUT_A);/右に回転
Wait(100);/1秒間進んだ後
OnRev(OUT_C);/右に回転して
Wait(35);/
OnFwd(OUT_A+OUT_C);/前進
Wait(200);/
SendMessage(1);/メッセージ1を送信して
Wait(100);/
Off(OUT_A+OUT_C);/運搬ロボット停止
until(SENSOR_2!=0);/センサー2が反応するまで待機
if(SENSOR_2==1);/センサ−2が反応すると
{
SendMessage(4);
SendMessage(4);/メッセージ4を送信
}
ClearMessage();
until(Message()!=0);
if(Message()==2)
ClearMessage();/メッセージリセット
until(Message()!=0);/0意外のメッセージが来るまで待機
if(Message()==2)/メッセージ2を受信すると
{
OnRev(OUT_A+OUT_C);
Wait(100);
OnFwd(OUT_C);
Wait(90);
OnFwd(OUT_A);
Wait(60);
OnRev(OUT_C);
Wait(90);
OnFwd(OUT_C);
Wait(100);
SendMessage(1);
Wait(50);
Off(OUT_A+OUT_C);
OnRev(OUT_A+OUT_C);/運搬ロボットが後退して
Wait(100);/
OnFwd(OUT_C);/左に曲がり
Wait(90);/
OnFwd(OUT_A);/前進して
Wait(60);/
OnRev(OUT_C);/右に曲がり
Wait(90);/
OnFwd(OUT_C);/前進して
Wait(100);/
SendMessage(1);/メッセージ1を送信して
Wait(50);/
Off(OUT_A+OUT_C);/停止する
}
}
*支柱系プログラム [#tacdff73]
このプログラムは、二つめのNQCに搭載したもの。上の二つのプログラムと併せて使用した。
int UP_TIME=0;
task main()
{
SetSensor(SENSOR_2,SENSOR_TOUCH);/センサ−2をタッチセンサーと定義
until(SENSOR_2!=0);/センサ−2が反応するまで待機
if(SENSOR_2==1)/センサ−2が反応したら
{
SendMessage(3);/メッセージ3を送信
Wait(50);
}
while(1)/無限ループ
{
ClearMessage();/メッセージリセット
until(Message()!=0);/0以外のメッセージが来るまで待機
if(Message()==1);/メッセージ1を受信したら
{
ClearTimer(0);/タイマーリセット
ClearMessage();/メッセージリセットして
OnFwd(OUT_A+OUT_B);/缶を取り込むと同時に運び始める
if(Message()==4);/メッセージ4を受信したら
{
FastTimer(0)=UP_TIME;/
Off(OUT_A);/
OnFwd(OUT_B);/缶を積んだ滑車が移動を継続し
Wait(500);
SendMessage(2);/メッセージ2を送信して
OnRev(OUT_A);/缶を押さえつけていたアームがあがり
Wait(UP_TIME);/
Off(OUT_A);/アームが停止して缶を落とす
}
}
}
}