GPduinoコントローラ通信仕様

GPduinoのAVRマイコンとKoshian間のシリアル通信仕様を決めておきます。

ボーレート

ボーレートは38400。
(ATmega328P 3.3V 8MHzで十分なタイミング精度が確保できる最高レート)

電文形式

'#'で始まり'$'で終わるアスキー電文とします。'#'と'$'は、STX/ETXの代用です。デバッグのしやすさのためこのようにしています。そのため、本文中で'#'と'$'を用いることはできません。

注意

暴走防止のため、1秒以上コマンド受信が無いとモータは停止します。継続してモータを回転させるためには定期的にコマンドを送信し続けてください。

送信コマンド(Koshian→AVR)

Dコマンド(前進/後退)
  • 書式: #Dxx$
  • xxは符号つき8ビット整数(範囲は-127〜+127)の16進文字列で、0のとき停止、正のとき前進、負のとき後退。
  • 例えば、停止は #D00$ 、全速前進は #D7F$ 、全速後退は #D81$ となる。
  • カーモードでは駆動輪を制御する。
  • タンクモードでは左右の駆動輪の並進成分を制御する。
Tコマンド(旋回)
  • 書式: #Txx$
  • xxは符号つき8ビット整数(範囲は-127〜+127)の16進文字列で、0のとき中立、正のとき右旋回、負のとき左旋回
  • 例えば、中立は #T00$ 、全速右旋回は #T7F$ 、全速左旋回は #T81$ となる。
  • カーモードではステアリングサーボを制御する。
  • タンクモードでは左右の駆動輪の差動成分を制御する。
Mコマンド(1) (モータ個別制御)
  • 書式: #Mnxx$
  • nは'1'または'2'。'1'はモータ1(左)、'2'はモータ2(右)に対応。
  • xxは符号つき8ビット整数(範囲は-127〜+127)の16進文字列で、0のとき停止、正のとき正転、負のとき反転。
  • カーモード/タンクモードによらず、モータの個別制御をおこなう。
Mコマンド(2) (モータ一括制御)
  • 書式: #MAxxyy$
  • xxはモータ1(左)、yyはモータ2(右)に対応。
  • xxおよびyyは符号つき8ビット整数(範囲は-127〜+127)の16進文字列で、0のとき停止、正のとき正転、負のとき反転。
  • カーモード/タンクモードによらず、モータの一括制御をおこなう。
Sコマンド(サーボ制御)
  • 書式: #Sxx$
  • xxは符号つき8ビット整数(範囲は-127〜+127)の16進文字列で、0のとき中立、正のとき正転、負のとき反転。
  • 例えば、中立は #S00$ 、最大正転は #S7F$ 、最大反転は #S81$ となる。
Aコマンド(1) (サーボ極性設定)
  • 書式: #APx$
  • xは'+'または'-'。'+'は正転、'-'は反転。初期値は正転。
Aコマンド(2) (サーボオフセット調整)
  • 書式: #AOxx$
  • xxは符号つき8ビット整数(範囲は-127〜+127)の16進文字列で、中央位置のオフセットを調整する。初期値は0。
Aコマンド(3) (サーボ振幅調整)
  • 書式: #AAxx$
  • xxは符号つき8ビット整数(範囲は-127〜+127)の16進文字列で、振れ幅を調整する。初期値は90(0x5A)。
Lコマンド(1) (LED個別制御)
  • 書式: #Lnxx$
  • nは'1'または'2'。'1'はLED1(左)、'2'はLED2(右)に対応。
  • xxは符号なし8ビット整数(0〜255)の16進文字列で、0のとき消灯、255のとき最大輝度で点灯。
  • カーモードではPWMは無効となりON/OFFに2値化される
Lコマンド(2) (LED一括制御)
  • 書式: #LAxxyy$
  • xxはLED1(左)、yyはLED2(右)に対応。
  • xxおよびyyは符号なし8ビット整数(0〜255)の16進文字列で、0のとき消灯、255のとき最大輝度で点灯。
  • カーモードではPWMは無効となりON/OFFに2値化される
Lコマンド(3) (LED点滅制御)
  • 書式: #LXn$
  • nを'1'とすると1秒周期での点滅、'2'とすると0.5秒周期での点滅、'3'とすると輝度が周期的に変化する。
  • nを'0'とすると点滅停止。
  • 点滅は左右同時。
  • カーモードではPWMは無効となりON/OFFに2値化される

受信コマンド(AVR→Koshian) 【未実装】

Bコマンド (バッテリー電圧)
  • 書式: #Bxxx$
  • xxxは符号なし10ビット整数(0〜1023)の16進文字列。
  • この数値を X とすると、ボード標準の分圧抵抗の場合、(X / 1023) * (3.3 * 2) V がバッテリー電圧。