queue は以下ページコマンド実行のキューとなります。
すべてのコマンド(バイト列)は一旦キューを通過する仕組みで、pause または wait 状態のときキューが isPaused となり、バイト列の処理を停止します。
【キューの詳細】
以下は2秒正回転してから逆回転を行う例です
runForward() ;
wait(2000) ;// 2000ms
runReverse();
このようにモーター内部のみで時間の制御ができる仕組みをキューで行っております。
基本的にはArduino, ESP32などのクライアント側でdelayやタイマーを使って頂くほうが良いと存じます。
readStatus は、現在の状態を表しますが、KM_SUCCESS, KM_ERROR_ は送信したコマンドのレスポンスとして受け取る場合、コマンドの処理に対する結果となります。
以下のエラー3つはレスポンスではなく、KeiganMotorが能動的に発行する(マスター側に通知する)エラーとなります。
この3つのうち (3) は、readStatus の帰り値に盛り込むべき仕様と考えておりますが、未実装です。
KM_ERROR_NRF_DEVICE
KM_ERROR_WDT_EVENT
KM_ERROR_OVER_HEAT
[0] |
KM_SUCCESS |
正常にコマンド受付がなされたというレスポンス |
[3] |
KM_ERROR_NOT_FOUND |
フラッシュに書き込まれた情報「モーション(ティーチングで記録した情報)」、「タスクセット(コマンド列)」のいずれかを実行またはチェックしようとしたときに、指定のインデックス(バンク)にデータが見つからなかった場合のエラー。 |
[5] |
KM_ERROR_INVALID_COMMAND: |
存在しないコマンドを入力した際のエラー |
[6] |
KM_ERROR_INVALID_PARAM: |
コマンドに対する引数パラメータが不適切である |
[7] |
KM_ERROR_STORAGE_FULL: |
ティーチングを index:0 に行おうとしたときに、すでにデータが存在する場合、こちらのエラーとなります。 |
[8] |
KM_ERROR_INVALID_FLASH_STAT: |
readStatusのflash_memory_stateが不適切な状態である。 ティーチング・プレイバック 逆に、これらに関係ないコマンドは実行可能ですが、ティーチング中のモーター制御などは意図しない結果を生じます。(runForwardなどモーター制御) |
[9] |
KM_ERROR_INVALID_LENGTH: |
コマンドに対する引数のデータサイズが不適切である |
[10] |
KM_ERROR_INVALID_CHECKSUM: |
チェックサム機能が有効になっており、チェックサム計算が合わないときに発行されます。 すなわち、readStatus の isCheckSumEnabled が isEnabled のとき、CRC16の計算が合わない場合のエラーです。isDisableのときは、本エラーは起こりえません。 |
[15] |
KM_ERROR_FORBIDDEN: |
interfaceコマンドで全ての通信を無効化しようとした場合。 |
[16] |
KM_ERROR_INVALID_ADDR: |
ティーチング・プレイバックおよびタスクセットに関するエラー。 ティーチング・プレイバックではindex:0-19 までの 20個のデータ、タスクセットではindex: 0-49 の50個のデータを記録・再生可能ですが、これらの範囲外のインデックスにアクセスしようとすると発生。 |
[17] |
KM_ERROR_BUSY: |
フラッシュ状態以外のビジー状態を加味して設定しましたが、現在のところ、本エラー状態は起こりえない仕様です。 |
[18] |
KM_ERROR_RESOURCE: |
処理に使用するメモリが不足している場合に発生。 メモリ不足となる状態が存在せず、本エラー状態は起こりえない仕様となっております。 |
[20] |
KM_ERROR_MOTOR_DISABLED: |
readStatusのmotorEnableがisDisabled状態で動作させようとした |
[70] |
KM_ERROR_NRF_DEVICE: |
マイコンの Bluetooth Low Energy に関するコードが発行するエラー。 I2C使用時は未確認ですが、ソフトウェア的にはBLEも健在なため、発生する可能性あり。 |
[80] |
KM_ERROR_WDT_EVENT: |
Motorコントローラ内のWDT監視異常時発生のエラー。 モーターの状態異常により、WDTがリセットできなかった場合に発生。 直後に再起動がかかるため、外部へ発行できない場合あり。 |
[81] |
KM_ERROR_OVER_HEAT: |
基板温度が、60度以上を120秒以上継続した場合発生。 |
エラーコード取得用コマンド
全てのコマンドにレスポンスとしてエラー(成功)ログを出力する仕様となっており、例えば電源起動後、enable() (モーターの動作を許可する)コマンドを送信しますと以下のようなレスポンスが帰ってきます。
0x20, 0xBE, 0, 0, 0x51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
バイト[0]: I2Cアドレス
バイト[1]: 0xBE エラーログであることを示す
バイト[2][3]: コマンドid(ユーザーがつける2バイトの数字)
バイト[4]: コマンド (enableの場合は 0x51)
バイト[5][6][7][8]: エラーコード
バイト[9][10][11][12]: エラーコードに関する情報
バイト[13][14]: CRC
エラーログ取得用コマンドの種類については【こちら】をご確認ください。