どんとこい!PC情報

P-ROBO(ピーロボ)を作ってみよう!

 

メイン関数

ライントレースを行うにあたって作成したメイン関数を紹介します。

1.メイン関数

メイン処理の関数です。起動して電源がOFFされるまで動作する為に、内部の処理は無限ループとなっています。

  1. 初期化処理
  2. 割り込み許可
  3. ロータリスイッチ読み込み
  4. 赤外LEDセンサフラグオン
  5. 赤外LEDセンサオン
  6. 赤外LEDセンサ読み込み
  7. モータ動作選択
  8. モータ動作設定
  9. センサ状態のバックアップを行う
・メイン関数 流れ図



・メイン関数 プログラム

void main(void)
{
    init();             // 初期化処理

    IntrEnable();          // 割り込みスタート

    UserLedCtrl(LED_OFF);      // ユーザLED:OFF

/*** debug start ***/          // デバッグ用(目視にて動作確認を行う為に)
    UserLedCtrl(LED_ON);       // ユーザーLEDをONにする
    Wait(0, 100);          // 1秒待ち
    UserLedCtrl(LED_OFF);      // ユーザーLEDをOFFにする
/*** debug end ***/

  while(1){              // 電源が切られるまで動作(無限ループ)
    ReadSensor();          // 赤外LEDセンサデータ取得
    iSensorData &= 0x07;
    Wait(0, 1);           // 時間待ち(10ms)

    switch(iSensorData){       // センサー状態により判断
      case 0:           // センサー取得なし
        switch(iSensorBack){   // 前回の状態を参照して動作を決定する
          case 0:
          case 2:
          case 5:
          case 7:
            iMoveR = 0x03;
            iMoveL = 0x03;
            iSpeedR = 0;
            iSpeedL = 0;
            break;
          case 1:
            iMoveR = 0x01;
            iMoveL = 0x02;
            iSpeedR = 20;
            iSpeedL = 20;
            break;
          case 3:
            iMoveR = 0x02;
            iMoveL = 0x02;
            iSpeedR = 0;
            iSpeedL = 20;
            break;
          case 4:
            iMoveR = 0x02;
            iMoveL = 0x01;
            iSpeedR = 20;
            iSpeedL = 20;
            break;
          case 6:
            iMoveR = 0x02;
            iMoveL = 0x02;
            iSpeedR = 20;
            iSpeedL = 0;
            break;
          default:
            break;
        }
        break;
      case 1:
        iMoveR = 0x02;
        iMoveL = 0x02;
        iSpeedR = 10;
        iSpeedL = 25;
        break;
      case 2:
        iMoveR = 0x02;
        iMoveL = 0x02;
        iSpeedR = 20;
        iSpeedL = 20;
        break;
      case 3:
        iMoveR = 0x02;
        iMoveL = 0x02;
        iSpeedR = 15;
        iSpeedL = 20;
        break;
      case 4:
        iMoveR = 0x02;
        iMoveL = 0x02;
        iSpeedR = 25;
        iSpeedL = 10;
        break;
      case 5:
        iMoveR = 0x02;
        iMoveL = 0x02;
        iSpeedR = 15;
        iSpeedL = 15;
        break;
      case 6:
        iMoveR = 0x02;
        iMoveL = 0x02;
        iSpeedR = 20;
        iSpeedL = 15;
        break;
      case 7:
        iMoveR = 0x02;
        iMoveL = 0x02;
        iSpeedR = 25;
        iSpeedL = 25;
        break;
      default:
        break;
    }

    MoveMotorR(iMoveR ,iSpeedR);  // 右モータの制御を行う
    MoveMotorL(iMoveL ,iSpeedL);  // 左モータの制御を行う

    if(iSensorData != 0x00){    // 赤外LEDセンサデータチェック
      iSensorBack = iSensorData; // 赤外LEDセンサデータをバックアップする
    }

  }
}


コメントの投稿


画像の中に見える文字を入力してください。

トラックバックURL

http://www.isl.ne.jp/cgi-bin/mt/mt-tb.cgi/1204

サイト内検索

twitterTwitter

最新ブログ記事

2014年05月07日

BeagleBoardを使ってみる

BaegleBoardでLinuxをブートする

2011年10月12日

WindowsXPの見た目をWindows7風に変更

カレンダー表示をカスタマイズする

2011年09月14日

WindowsXPの見た目をWindows7風に変更

ウィンドウを半透明化する

2011年09月14日

WindowsXPの見た目をWindows7風に変更

Windows7風にカスタマイズ

2011年05月11日

WindowsXPの見た目をWindows7風に変更

使用ソフト概要説明

アクセスランキング

人気のコンテンツをご紹介!

1位

どんとこいPC情報

CD/DVDの仕組み CD編

3位

どんとこいPC情報

CD/DVDの仕組み DVD

4位

どんとこいPC情報

CD/DVDの仕組み DVD±R

ISL 情報戦略研究所

pagetopこのページの先頭へ戻る