2009a/A5/課題2右/プログラム02
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2009a/A5/課題2右]]へ戻る
#define THERESHOLD 40 //闘値
#define KAITEN 180 //180度回転する秒数
int SYOU; //衝突変数――衝突した瞬間を見極める変数
int RUN_TIME; //パックを運ぶ時間――ここに下の変数を代入していく
#define RUN_TIME_F 36; //パックを運ぶ時間(1回目F):36
#define RUN_TIME_J 80; //パックを運ぶ時間(2回目J):80
#define STOP_TIME 1300; //機体を停止させるまでの秒数(3周したら停止する)
task main () //黒のラインを認識して、黒のラインに入るとそこから光学センサーが外れるようなプログラム
{
SYOU = 0;
RUN_TIME = RUN_TIME_F; //パックを運ぶ時間を1回目の値に設定
SetSensor(SENSOR_2,SENSOR_TOUCH); //センサー2はタッチセンサー
SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1は光学センサー
SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3は光学センサー
ClearTimer(1); //タイマー1セット
while(Timer(1)<STOP_TIME){ //STOP_TIMEで指定した時間まで動作をする
//タッチセンサーが当たってないときの基本動作
if (SENSOR_1>THERESHOLD){
if (SENSOR_3>THERESHOLD){ //どちらも黒い線に入っていない場合
OnFwd(OUT_A+OUT_C);
} else {
Off(OUT_C);
OnFwd(OUT_A);
}
} else {
if (SENSOR_3>THERESHOLD){
OnFwd(OUT_C);
Off(OUT_A);
} else { //どちらも黒い線に入った場合
OnFwd(OUT_A+OUT_C);
}
}
if (SENSOR_2 == 1 ) { //タッチセンサーが当たっているとき
if (SYOU == 0){ //衝突した瞬間
ClearTimer(0); //タイマーをセット
SYOU = 1; //衝突変数に1を代入
}
if (SYOU == 1){
if (Timer(0) >= RUN_TIME){ //指定した時間経過したら
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(KAITEN); //180度回転(右)
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(KAITEN); //180度回転(左) これで正面を向く
//それと同時にタッチセンサーに物体が当たっていない状態になる
SYOU = 0; //衝突変数に0を代入
if (RUN_TIME == RUN_TIME_F){ //一度目の衝突かどうかを判定
RUN_TIME = RUN_TIME_J; //一度目なら次に運ぶ時間を二度目のものに設定
}else{
RUN_TIME = RUN_TIME_F; //二度目なら次に運ぶ時間を一度目のものに設定
}
}
} //ここまでSYOU == 1のときの動作
} //ここまでタッチセンサーが当たっているときの動作
} //ここまでwhile間の動作
Off(OUT_A+OUT_C);//指定された秒数がきたら機体を停止
}
~
#ref(2009a/A5/課題2右/プログラム02/rosen2.JPG,100%,図1)
-開始位置は上図の通りで、矢印の方向に進んでいきます
-黄の四角がロボット、赤の四角が牛乳パックです
~
~
#ref(2009a/A5/課題2右/プログラム02/シミュレーション11.gif,100%,シミュレーション)
-動作のシミュレーション画像です
-牛乳パックは持ち上げることなく、ただ引きずっているだけです
終了行:
[[2009a/A5/課題2右]]へ戻る
#define THERESHOLD 40 //闘値
#define KAITEN 180 //180度回転する秒数
int SYOU; //衝突変数――衝突した瞬間を見極める変数
int RUN_TIME; //パックを運ぶ時間――ここに下の変数を代入していく
#define RUN_TIME_F 36; //パックを運ぶ時間(1回目F):36
#define RUN_TIME_J 80; //パックを運ぶ時間(2回目J):80
#define STOP_TIME 1300; //機体を停止させるまでの秒数(3周したら停止する)
task main () //黒のラインを認識して、黒のラインに入るとそこから光学センサーが外れるようなプログラム
{
SYOU = 0;
RUN_TIME = RUN_TIME_F; //パックを運ぶ時間を1回目の値に設定
SetSensor(SENSOR_2,SENSOR_TOUCH); //センサー2はタッチセンサー
SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1は光学センサー
SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3は光学センサー
ClearTimer(1); //タイマー1セット
while(Timer(1)<STOP_TIME){ //STOP_TIMEで指定した時間まで動作をする
//タッチセンサーが当たってないときの基本動作
if (SENSOR_1>THERESHOLD){
if (SENSOR_3>THERESHOLD){ //どちらも黒い線に入っていない場合
OnFwd(OUT_A+OUT_C);
} else {
Off(OUT_C);
OnFwd(OUT_A);
}
} else {
if (SENSOR_3>THERESHOLD){
OnFwd(OUT_C);
Off(OUT_A);
} else { //どちらも黒い線に入った場合
OnFwd(OUT_A+OUT_C);
}
}
if (SENSOR_2 == 1 ) { //タッチセンサーが当たっているとき
if (SYOU == 0){ //衝突した瞬間
ClearTimer(0); //タイマーをセット
SYOU = 1; //衝突変数に1を代入
}
if (SYOU == 1){
if (Timer(0) >= RUN_TIME){ //指定した時間経過したら
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(KAITEN); //180度回転(右)
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(KAITEN); //180度回転(左) これで正面を向く
//それと同時にタッチセンサーに物体が当たっていない状態になる
SYOU = 0; //衝突変数に0を代入
if (RUN_TIME == RUN_TIME_F){ //一度目の衝突かどうかを判定
RUN_TIME = RUN_TIME_J; //一度目なら次に運ぶ時間を二度目のものに設定
}else{
RUN_TIME = RUN_TIME_F; //二度目なら次に運ぶ時間を一度目のものに設定
}
}
} //ここまでSYOU == 1のときの動作
} //ここまでタッチセンサーが当たっているときの動作
} //ここまでwhile間の動作
Off(OUT_A+OUT_C);//指定された秒数がきたら機体を停止
}
~
#ref(2009a/A5/課題2右/プログラム02/rosen2.JPG,100%,図1)
-開始位置は上図の通りで、矢印の方向に進んでいきます
-黄の四角がロボット、赤の四角が牛乳パックです
~
~
#ref(2009a/A5/課題2右/プログラム02/シミュレーション11.gif,100%,シミュレーション)
-動作のシミュレーション画像です
-牛乳パックは持ち上げることなく、ただ引きずっているだけです
ページ名: