2005/B7

☆左チーム☆(かずま&サイモン&まさき)

目次

プログラム

「正」を書くプログラム

「左」を書くプログラム

// 「左」を書くプログラム
//
//    作成者:かずま
//    作成日:2005-11-7

#define TURN_TIME 101      // 直角に曲がるのにかかる時間
#define MOVE_TIME 121      // 1秒間に進む距離
#define PEN_TIME 20        // ペンを上下させる時間

sub turn_left()            // 左方向に90度回転
{
    OnRev(OUT_A); OnFwd(OUT_C);
    Wait(TURN_TIME);
    Off(OUT_A+OUT_C);
}

sub turn_right()           // 右方向に90度回転
{
    OnFwd(OUT_A); OnRev(OUT_C);
    Wait(TURN_TIME);
    Off(OUT_A+OUT_C);
}

sub pen_down()             // ペンを下ろす
{
    OnFwd(OUT_B);
    Wait(PEN_TIME);
    Off(OUT_B);
}

sub pen_up()               // ペンを上げる
{
    OnRev(OUT_B);
    Wait(PEN_TIME);
    Off(OUT_B);
}

task main()
{
    SetPower(OUT_A,7);     // パワーを設定
    SetPower(OUT_C,7);

    pen_down();            // ペンを下ろす

    OnFwd(OUT_A+OUT_C);    // 【一画目】行動1(17.1cm直進)
    Wait(17100/MOVE_TIME);
    Off(OUT_A+OUT_C);

    pen_up();              // ペンを上げる

    Wait(100);

    turn_left();           // 行動2(左回転)

    Wait(100);

    OnFwd(OUT_A+OUT_C);    // 行動3(5.2cm直進)
    Wait(5200/MOVE_TIME);
    Off(OUT_A+OUT_C);

    Wait(100);

    turn_left();           // 行動4(左回転)

    Wait(100);

    OnFwd(OUT_A+OUT_C);    // 行動5(8.8cm直進)
    Wait(8800/MOVE_TIME);
    Off(OUT_A+OUT_C);

    Wait(100);

    OnRev(OUT_A);          // 行動6(左にある程度回転)
    OnFwd(OUT_C);
    Wait(87);
    Off(OUT_A+OUT_C);

    pen_down();            // ペンを下ろす

    Wait(100);

    SetPower(OUT_A,7);     // パワーを変更
    SetPower(OUT_C,0);

    OnFwd(OUT_A+OUT_C);    // 【二画目】行動7(左方向に曲がりながら前進)
    Wait(180);
    Off(OUT_A+OUT_C);

    SetPower(OUT_A,7);     // パワーを変更
    SetPower(OUT_C,7);

    pen_up();              // ペンを上げる

    Wait(100);

    OnFwd(OUT_A);          // 行動8(右にある程度回転)
    OnRev(OUT_C);
    Wait(165);
    Off(OUT_A+OUT_C);

    Wait(100);

    OnFwd(OUT_A+OUT_C);    // 行動9(5.8cm直進)
    Wait(5800/MOVE_TIME);
    Off(OUT_A+OUT_C);

    Wait(100);

    turn_right();          // 行動10(右回転)

    Wait(100);

    OnFwd(OUT_A+OUT_C);    // 行動11(2.3cm直進)
    Wait(2300/MOVE_TIME);
    Off(OUT_A+OUT_C);

    pen_down();            // ペンを下ろす

    Wait(100);

    OnFwd(OUT_A+OUT_C);    // 【三画目】行動12(12.2cm直進)
    Wait(12200/MOVE_TIME);
    Off(OUT_A+OUT_C);

    pen_up();              // ペンを上げる

    Wait(100);

    OnRev(OUT_A+OUT_C);    // 行動13(5.5cm後退)
    Wait(5500/MOVE_TIME);
    Off(OUT_A+OUT_C);

    Wait(100);

    turn_right();          // 行動14(右回転)

    Wait(200);

    OnRev(OUT_A+OUT_C);    // 誤差修正1(1.4cm後退)
    Wait(1400/MOVE_TIME);
    Off(OUT_A+OUT_C);

    pen_down();            // ペンを下ろす

    Wait(200);

    OnFwd(OUT_A+OUT_C);    // 【四画目】行動15(7.7cm直進)
    Wait(7700/MOVE_TIME);
    Off(OUT_A+OUT_C);

    pen_up();              // ペンを上げる

    Wait(100);

    OnFwd(OUT_A+OUT_C);    // 誤差修正2(1.1cm直進)
    Wait(1100/MOVE_TIME);
    Off(OUT_A+OUT_C);

    Wait(100);

    turn_left();           // 行動16(左回転)

    Wait(100);

    OnRev(OUT_A+OUT_C);    // 行動17(10.3cm後退)
    Wait(10300/MOVE_TIME);
    Off(OUT_A+OUT_C);

    pen_down();            // ペンを下ろす

    Wait(100);

    OnFwd(OUT_A+OUT_C);    // 行動18(16.7cm直進)
    Wait(16700/MOVE_TIME);
    Off(OUT_A+OUT_C);

    pen_up();              // ペンを上げる

}

いちいちWaitが入ってるのは、ロボットの動きに余裕を持たせるためです。

「左」を書くプログラム(改良版)

// 「左」を書くプログラム
//
//    作成者:かずま
//    作成日:2006-2-12

#define TURN_TIME 101      // 直角に曲がるのにかかる時間
#define MOVE_TIME 121      // 1秒間に進む距離
#define PEN_TIME 20        // ペンを上下させる時間
#define ACT6_TIME 87       // 行動6,7,8はズレが生じやすく
#define ACT7_TIME 218      // 調整することが多いので
#define ACT8_TIME 165      // 最初に定義する

void go_straight(int t)
{
    OnFwd(OUT_A+OUT_C);
    Wait(t*100/MOVE_TIME);
    Off(OUT_A+OUT_C);
    Wait(100);
}

void go_back (int t)
{
    OnRev(OUT_A+OUT_C);
    Wait(t*100/MOVETIME);
    Off(OUT_A+OUT_C);
    Wait(100);
}

void turn_left(int t)      // 左方向に90度回転
{
    OnRev(OUT_A); OnFwd(OUT_C);
    Wait(t);
    Off(OUT_A+OUT_C);
    Wait(100);
}

void turn_right(int t)     // 右方向に90度回転
{
    OnFwd(OUT_A); OnRev(OUT_C);
    Wait(t);
    Off(OUT_A+OUT_C);
    Wait(100);
}

sub pen_down()             // ペンを下ろす
{
    OnFwd(OUT_B);
    Wait(PEN_TIME);
    Off(OUT_B);
}

sub pen_up()               // ペンを上げる
{
    OnRev(OUT_B);
    Wait(PEN_TIME);
    Off(OUT_B);
}

task main()
{
    SetPower(OUT_A,7);     // パワーを設定
    SetPower(OUT_C,7);

    pen_down();            // ペンを下ろす
    go_straight(171);      // 【一画目】行動1(17.1cm直進)
    pen_up();              // ペンを上げる
    turn_left(TURN_TIME);  // 行動2(左回転)
    go_straight(52);       // 行動3(5.2cm直進)
    turn_left(TURN_TIME);  // 行動4(左回転)
    go_straight(88);       // 行動5(8.8cm直進)
    turn_left(ACT6_TIME);  // 行動6(左にある程度回転)
    pen_down();            // ペンを下ろす

    SetPower(OUT_A,7);     // パワーを変更
    SetPower(OUT_C,0);

    go_straight(ACT7_TIME);// 【二画目】行動7(左方向に曲がりながら前進)

    SetPower(OUT_A,7);     // パワーを変更
    SetPower(OUT_C,7);

    pen_up();              // ペンを上げる
    turn_right(ACT8_TIME); // 行動8(右にある程度回転)
    go_straight(58);       // 行動9(5.8cm直進)
    turn_right(TURN_TIME); // 行動10(右回転)
    go_straight(23);       // 行動11(2.3cm直進)
    pen_down();            // ペンを下ろす
    go_straight(122);      // 【三画目】行動12(12.2cm直進)
    pen_up();              // ペンを上げる
    go_back(55);           // 行動13(5.5cm後退)
    turn_right(TURN_TIME); // 行動14(右回転)
    go_back(14);           // 誤差修正1(1.4cm後退)
    pen_down();            // ペンを下ろす
    go_straight(77);       // 【四画目】行動15(7.7cm直進)
    pen_up();              // ペンを上げる
    go_straight(11);       // 誤差修正2(1.1cm直進)
    turn_left(TURN_TIME);  // 行動16(左回転)
    go_back(103);          // 行動17(10.3cm後退)
    pen_down();            // ペンを下ろす
    go_straight(167);      // 行動18(16.7cm直進)
    pen_up();              // ペンを上げる
}

指摘があったので関数を使って簡潔にしました。   

感想

難しかった点

工夫した点

反省点

感想

コメントはこちらまで


戻る


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-02-19 (日) 14:09:22