目次
各チームで作成したコースを1周するロボットを製作せよ。 交差点以外のコース上に350mlの空の空き缶を2個以上おき、空き缶にぶつかった時には次のような動作するプログラムを作成せよ。(他のメンバーと重ならないように一人一つのプログラムを作成する)
ただし、
田島・みのう
int move_time task main() { move_time = 0 ; SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_TOUCH); SetSensor(SENSOR_3,SENSOR_LIGHT); while(move_time < 8); { if ((SENSOR_1<45)&&(SENSOR_3<45)) { //交差点にさしかかった場合 move_time = move_time + 1 //変数に1を足す Off(OUT_A+OUT_C); //停止する Wait(50); OnFwd(OUT_A+OUT_C); //前進する Wait(25); } else if (SENSOR_1<45) { //左側のセンサーが黒線に触れた場合 OnFwd(OUT_C); //左側に曲がる OnRev(OUT_A); } else if (SENSOR_3<45) { //右側のセンサーが黒線に触れた場合 OnFwd(OUR_A); //右側に曲がる OnRev(OUT_C); } else if ((SENSOR_1>45)&&(SENSOR_3>45)) { //両方のセンサーが黒線の上に無い場合 OnFwd(OUT_A+OUT_C); } //前進する if (SENSOR_2 == 1) { //缶にぶつかった場合 OnFwd(OUT_B); //缶をはさむ Wait(25); Off(OUT_B); OnFwd(OUT_A+OUT_C); //前進する Wait(50); OnFwd(OUT_A); //回転する OnRev(OUT_C); Wait(160); OnRev(OUT_A+OUT_C); //後進する Wait(50); OnRev(OUT_B); //缶を離す Wait(25); Off(OUT_B); OnFwd(OUT_A); //回転する OnRev(OUT_C); Wait(160); if (move_time == 7) { //交差点を七回こえた場合 Off(OUT_A+OUT_C); //タイヤを止める move_time = move_time + 1; } } }
#define THRESHOLD 45 // 変数宣言 int sensor; // 光センサ値 int cross_count; // 交差点通過数 int hold_can; // 缶所持フラグ int first_cross; // 初回交差点未通過フラグ int do_task; // ループ実行フラグ #define close_hand OnRev(OUT_B);Wait(200);Off(OUT_B); #define open_hand OnFwd(OUT_B);Wait(200);Off(OUT_B); task main() { SetSensor(SENSOR_1, SENSOR_LIGHT); SetSensor(SENSOR_2, SENSOR_TOUCH); SetSensor(SENSOR_3, SENSOR_LIGHT); // 変数初期値代入 cross_count = 0; hold_can = 0; first_cross = 1; do_task = 1; Off(OUT_B); while(do_task) { sensor = 0; if(SENSOR_1 > THRESHOLD) { sensor += 1; } if(SENSOR_3 > THRESHOLD) { sensor += 2; } if(sensor == 0) { // 両光センサが黒判定の時 if(FastTimer(0)>200) { // 前回の両黒判定より2秒経過している場合は新たな交差点 cross_count++; Off(OUT_A+OUT_C); // 一時停止 Wait(100); ClearTimer(0); if(hold_can && first_cross) { // 缶所持、初回交差点未通過時 first_cross = 0; // 初回交差点未通過フラグ削除 } else if(hold_can && !first_cross) { // 缶所持、初回交差点通過時 // 缶を交差点に置く PlaySound(SOUND_DOWN); OnFwd(OUT_A+OUT_C); Wait(100); OnFwd(OUT_A); OnRev(OUT_C); Wait(170); Off(OUT_A+OUT_C); open_hand; OnRev(OUT_A+OUT_C); Wait(60); OnRev(OUT_A); OnFwd(OUT_C); Wait(170); OnRev(OUT_A+OUT_C); Wait(60); hold_can = 0; PlaySound(SOUND_CLICK); } } OnFwd(OUT_A); OnFwd(OUT_C); } else if(sensor == 1) { // 右光センサが黒判定の時 // 右旋回 OnFwd(OUT_A); OnRev(OUT_C); } else if(sensor == 2) { // 左光センサが黒判定の時 // 左旋回 OnRev(OUT_A); OnFwd(OUT_C); } else { // それ以外の時(両光センサが白判定の時) // 直進 OnFwd(OUT_A); OnFwd(OUT_C); } if(SENSOR_2 && !hold_can) { // タッチセンサ反応、缶未所持時 // 缶を掴む PlaySound(SOUND_UP); Off(OUT_A+OUT_C); close_hand; hold_can = 1; // 缶所持フラグセット first_cross = 1; // 初回交差点未通過フラグセット PlaySound(SOUND_CLICK); } if(cross_count >= 7) { do_task = 0; } // 7回目の交差点通過でループ終了 } // モータ自由、ブザー鳴動し停止 Float(OUT_A+OUT_B+OUT_C); repeat(5) { PlaySound(SOUND_DOUBLE_BEEP); Wait(100); } }