結局開発が追いつかず、完成に至らなかったプログラム
int nikai=2; task main() { 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);/受け身ロボット停止 } while(nikai==2||1)/ { 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;/ } } } 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_A);/右に回転して Wait(90); OnFwd(OUT_C);/前進 Wait(60); OnRev(OUT_A);/左に回転して Wait(90); OnFwd(OUT_A);/前進 Wait(100); SendMessage(1);/メッセージ1を送信して Wait(50); Off(OUT_A+OUT_C);/停止 } }
本番直前、適当に数値を入れた間に合わせのプログラム。本番で使われたのはこっち。
int repeat_time; / task main() { SetSensor(SENSOR_2,SENSOR_TOUCH);/センサ−2をタッチセンサーと定義 Wait(100);/スイッチを入れてから一秒後に OnFwd(OUT_B);/受け身ロボットが動く ClearMessage(); until(Message()!=0);/0以外のメッセージが来るまで待機 if(Message()==3)/もしメッセージ3を受け取ったら { Off(OUT_B);/受け身ロボット停止 } 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);/メッセージ4を送信 } 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);/メッセージ1を送信して Wait(50);/ Off(OUT_A+OUT_C);/停止する } }
このプログラムは、二つめの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);/アームが停止して缶を落とす } } } }