*

C言語でEV3開発(18)-モードの遷移の設計-コマンド通信処理の準備

公開日: : 最終更新日:2017/07/06 マインドストーム/EV3, 開発

 どもです。
 今回は、前回紹介したEv3とBluetoothで通信する機能を検証します…。の前に、準備段階として、Ev3とBluetoothの接続に伴う状態(実行タスク)の制御を検討します。

1.なんで状態の制御?
 状態の遷移、といってもそれほど大層なものではなく、単純なタスクの切り替えです。
 アプリ起動後に初期化タスクを実施、初期化が正常に完了した場合には、Bluetooth接続待ちタスクを起動する。その後、Bluetooth接続されたらコマンド通信を開始する。Bluetooth接続が切れたら、各タスクを終了して再度Bluetooth接続待ち状態に遷移する、という程度のものです。
 この状態遷移を図にすると、以下のようになります。

状態遷移図


 このようなタスクの遷移/切り替えは、実装上の「実行するタスク毎の役割を明確にする」ためです。

2.モード遷移の実装
 各モードでの実施内容、およびモード遷移の実装のソースコードを以下に示します。
 まずは、各モードでの実施内容を示します。

 所々、意味の無いコードが出てきますが、今はモード遷移の処理「ModeTransitionToModeX」に注目してください。
 また、モード3の関数「task_mode3」で呼び出している「debug_device_info」ですが、コレはEv3のLCDに実行中の情報を表示するための処理です。
 次に、実際にモードの遷移を行う「ModeTransitionToModeX」の実装です。

 モードの遷移は、実際にはTOPPERS HRP2 のAPI「act_tsk」を使用してタスクを起動して実現しています。なお、各関数の中で行っているフラグは、デバッグ用の変数です。

3.実際の動き
 上記アプリを実機上で動かした際の動画が、以下です。

 最初は、「APP_MOD = 2」「BLUETOOTH:DISCONN」と表示されていますが、Bluetoothと接続されると、コレが「BLT_TSK_CNT = xxxxx」、「CMD_HDL_CNT = xxxxx」、「MOD_TSK_CNT = xxxxx」と表示されます。コレは、各タスクの実行回数です。今回のアプリでは、「MOD_TSK_CNT」が増えています。コレは、モード3のタスクが実行された回数を示します。
 Bluetooth接続を解除すると、再度「APP_MOD = 2」「BLUETOOTH:DISCONN」の表示に戻ります。これで接続待ち状態に遷移しています。
 このように、Bluetooth接続状態の変更に伴う状態の変化を制御します。

 さて。
 今回のエントリーは、ここまでにします。
 次回は、モード3の中でコマンド通信を行っている様子を紹介します。

追記:2017/07/06
今回のエントリーで紹介したソースコードとそれに付随する開発環境を、コチラからダウンロードできるようにしました。

関連記事

MindStormControl_SprachScreen

EV3開発サポートツール(1)-C#のユーザーコントロール開発

どもです。 突然ですが、今回はC#に関するエントリになります。 具体的には、C#/WPFで、独自

記事を読む

RasPi_Qt

QtでRaspberryPi/GUI開発(6):pigpioを使用したチャタリング対策

どもです。 前回のエントリーで、pigpioを使用したボタンを使用したLEDの点灯/消灯について書

記事を読む

OpenCvLogo

RaspberryPiで物体検出(1)-白線検出への挑戦(1):輪郭検出による白線検出

どもです。 今回は、OpenCvを用いて道路の白線検出について、です。 1.今回の環境 O

記事を読む

RasPi_Qt

QtでRaspberryPi/GUI開発(8):pigpioを使用したチャタリング対策の問題の対策

どもです。 だいぶ、間が空いてしまいました。 久しぶりの更新です。 前回のエントリーで、「

記事を読む

no image

C言語でEV3開発(7)

どもです。 今回のエントリーでは、いよいよEV3を動かしていきます。 新しい環境に対して、最もよ

記事を読む

toppers

C言語でEV3開発(20)-超音波センサと安全状態

どもです。 前回は、BluetoothでPCとEv3を接続してコマンドの送受信について書きました。

記事を読む

Qt_logo_2016

QtでRaspberryPi/GUI開発(2):ためしに時計を作ってみた(其の弐)

どもです。 前回のエントリーでは、ラジオボタンのグループ化と、選択されたボタンの特定方法まで記載し

記事を読む

eclipse_4.3_kepler

eclipse/CDTにおけるgdbでのデバッグ中に発生するpythonのエラー

どもです。 今回のエントリーは、Eclipse上でのデバッグの際に「pythonのエンコードエラー

記事を読む

no image

C言語でEV3開発(11)-opOUTPUT_STEP_POWERコマンド

どもです。 今回のエントリーでは、再びモーターを動かすためのコマンドについて書きます。 コマンド

記事を読む

no image

QtでRaspberryPi/GUI開発(3):ためしに時計を作ってみた(其の参)-StyleSheetの適用

どもです。 前回のエントリーでは、グループ化されたボタンに対するイベントハンドラについて書きました

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

GitHub
C/C++のスタブを自動生成するツールを公開しました

(テーマ) C/C++のスタブを自動生成するツールを公開しました

Arduino_Logo
フォトレジスタを使ってみた-Arduinoで光検出

どもです。 今回は、タイトル通り「フォトレジスタの使い方」です。

no image
PC自作2019 – Windows10への移行

どもです。 突然ですが、PCを交換しました。 1. 何があ

RasPi_Qt
QtでRaspberryPi/GUI開発(12)-gpioの状態をGUIに反映する

どもです。 今回は、gpioピンの状態(HIGH/LOW)の変化を画

raspberry-pi
RaspberryPi起動時にpigpiodがスタートしないようにする

どもです。 これまでpigpioを使用してRaspberryPiから

→もっと見る

PAGE TOP ↑