FAQ一覧

「モーターキューの状態(queue)」は、モータ動作中状態(isResumed)と停止状態(isPaused)を示しているということでしょうか。
上記の場合、flash_memory_stateとqueueの状態は一致するように思いますが、認識は合っていますでしょうか。

 

queue は以下ページコマンド実行のキューとなります。
すべてのコマンド(バイト列)は一旦キューを通過する仕組みとなっておりまして、pause または wait 状態のとき、キューが isPaused となり、バイト列の処理を停止します。
https://docs.keigan-motor.com/software_dev/lowapis/queue


 以下は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 に行おうとしたときに、すでにデータが存在する場合、こちらのエラーとなります。
エラーを回避するために、事前に eraseMotion / eraseAllMotion を実行する必要があります。

[8] KM_ERROR_INVALID_FLASH_STAT:

readStatusのflash_memory_stateが不適切な状態である。
※すべてフラッシュを使用するため、排他的となっております。
以下を実行しているときに別のフラッシュアクセス命令を送ると、エラーとなります。
IDLE状態に戻さない限り次の機能実行はできません。

ティーチング・プレイバック
タスクセット
IMU(ジャイロ加速度センサー)
フラッシュへのアクセスが必要な命令 (prepareTeachingMotion, playbackMotionなど)

逆に、これらに関係ないコマンドは実行可能ですが、ティーチング中のモーター制御などは意図しない結果を生じます。(runForwardなどモーター制御)

[9] KM_ERROR_INVALID_LENGTH:

コマンドに対する引数のデータサイズが不適切である

[10] KM_ERROR_INVALID_CHECKSUM:

チェックサム機能が有効になっており、チェックサム計算が合わないときに発行されます。
すなわち、readStatus の isCheckSumEnabled が isEnabled のとき、CRC16の計算が合わない場合のエラーです。isDisableのときは、本エラーは起こりえません。

[15] KM_ERROR_FORBIDDEN:

interfaceコマンドで、以下の全ての通信を無効化しようとした場合
BLE
Linkage
micro:bit
USBシリアル
I2C

[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秒以上継続した場合発生。

 

エラーコード取得用コマンド

KeiganMotorに対してエラーログ取得コマンドを送信すれば返却値を取得することができます。
全てのコマンドにレスポンスとしてエラー(成功)ログを出力する仕様となっており、例えば電源起動後、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

エラーログ取得用コマンドの種類については【こちら】をご確認ください。