ソフトウエア

初期化 / setup()

Qumcum Lab. が起動後に実行する処理です。Arduino の setup()です。

◀ この記事の前に: 省電力制御
▶ この記事の次に: メインループ / loop()

周辺回路や他の MCUを起動時に設定する必要があります。そのための注意事項です。

Peripheral MCUの起動に関係すること

  • 対 象: Peripheral MCU( ESP32 )IO2 と、Body MCU( STM32 )F20
  • 必要な設定: 起動時に Body MCU( STM32 ) F20( PA2 )を HIGH にする。
  • 詳細な内容: Peripheral MCU( ESP32 )IO2 は、省電力制御のひとつとして Peripheral MCU のスリープ時に Body MCU からウエイクアップをするための信号線として使用しています。ESP32の IO2は起動時の動作モードの設定に関係しています。

Peripheral MCU( ESP32 )の IO2 は

処 理

初期化の処理は以下のとおりです。

  • シリアルモニタの初期化: ループが回るごとに実行
    ・モニタとの送受信: Arduino IDE のモニタと通信、デバッグ用です。
    ・BLEの受信: スマートフォンからの受信を確認してリモコン制御します。
  • M-Llinkの初期化: setupML();
  • ポートの初期化: setupPort();
  • 汎用タイマの初期化: setupTCInt();
  • BLE の初期化: setupBLE();
  • サーボモータの初期化: setupSV();
  • Motion interpreter の初期化 InitMS();
  • サーボモータ用タイマの初期化 setupSVtimerInt();
  • サーボモータ位置の初期化

コード

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


Qumcum Lab. がリセットスタート時に実行される処理です

//=====================================================================
// setup
//=====================================================================
void setup() {

  //.... debug write ....
  Wire.begin();             // I2C 100kHz
  Serial.begin(115200);     // UART 115200bps
  delay(1000);

  //.... Port ....
  setupPort();
  delay(10);

  //.... Interval timer interrupt ....
  noInterrupts();
  setupTCInt();
  interrupts();

  //.... BLE ....
  setupBLE();

  ble112.ble_cmd_system_get_bt_address();
  while (ble112.checkActivity(1000));
  delay(1000);

  //.... Servomotor ....
  setupSV();

  //.... Motion interpreter ....
  InitMS();

  //.... Servomoter interrupt ....
  noInterrupts();
  setupSVtimerInt();
  interrupts();

  startSqForcedMS( SV_SQ_STOP );

}

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

//---------------------------------------------------------------------
// 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