ソフトウエア

メインループ / loop()

Qumcum Lab. が実行中に繰り返し実行される処理です。Arduino の loop()です。

◀ この記事の前に: 初期化 / setup()
▶ この記事の次に: タイマ割り込み

処 理

メインループの処理は以下のとおりです。

  • 即時: ループが回るごとに実行
    ・モニタとの送受信: Arduino IDE のモニタと通信、デバッグ用です。
    ・BLEの受信: スマートフォンからの受信を確認してリモコン制御します。
  • 125msec. ごとに実行: タイマ割り込み(定時)と連携
    ・loop counter: 各定時制御用のフラグ処理
    ・モーションシーケンサ: サーボモータのシーケンス処理
  • 1sec. ごとに実行: タイマ割り込み(定時)と連携
    ( 現在未使用 )

コード

コードは以下のとおりです。


Qumcum Lab. が実行中に繰り返し実行される処理です

//=====================================================================
// Loop
//=====================================================================
//---------------------------------------------------------------------
// Main loop
//---------------------------------------------------------------------
void loop(){
	String	szBuf;
	int		lenBuf;
	char	buf[150];
	int		command;

	//-----------------------------------------------------
	// arduino monitor input process
	//-----------------------------------------------------
	while(Serial.available()) {
		procMonitorRcv();

	//-----------------------------------------------------
  // Timer interval 125ms で1回ループ
  //-----------------------------------------------------
  if (bInterval == true){
     bInterval = false;

    //--------------------------------------------
    loopCounter();            // loop counter

    //--------------------------------------------
    // 1sに1回実行する
    //--------------------------------------------
    if(event1s == true){
      event1s = false;        // initialize parameter
    }

    //--------------------------------------------
    // MSsに1回実行する
    //--------------------------------------------
    if( gEventMS == true){
      gEventMS = false;        // initialize parameter
      procMS();			// Servomotor sequence control
    }
  }

	//**** Received BLE data ****
	loopBleRcv();
}

// End of loop
//==============================================================================

各定時制御用のフラグ処理です。

//---------------------------------------------------------------------
// Counter
//---------------------------------------------------------------------
void loopCounter(){

  iLoop1s += 1;
  //--------------------
  // 1s period
  //--------------------
  if (iLoop1s >=  8){                 // 125ms x 8 = 1s
    iLoop1s = 0;

    iSendCounter  += 1;
    if (iSendCounter >= SEND_INTERVAL){
      iSendCounter = 0;
      event1s = true;
    }
  }

  gLoopMS += 1;
  //--------------------
  // SV period
  //--------------------
  if ( gLoopMS >=  4 ){                 // 125ms x 8 = 1s
    gLoopMS = 0;

    gEventMS = true;

  }
}

参考情報

参考になる情報は以下のとおりです。

このホームページ内

  • 複数のMCUをつなぐ: このロボットには複数の MCUが搭載されています。その MCU間の接続の概要です。

他のWebサイト

カテゴリー
最近の記事 おすすめ記事

記事一覧を表示するには、カスタム投稿「ブログ」にて、4つ以上記事を作成してください。

記事一覧を表示するには、カスタム投稿「ブログ」にて、4つ以上記事を作成してください。

TOP