Up データの bytes変換と復元 作成: 2026-09-14
更新: 2026-10-10

4足歩行ロボット > 自律型> コンピュータ > プログラミング > I2C > モータストア > bytes変換と復元

    I2C は,byte しか送れない。
    そこで,fload 型の目標電流値は,つぎのように送受信する:

     正値
        SBC側   MCU側
        1.5(A)   1.5(A)
         ↓     ↑
       1500(mA)  1500(mA)
         ↓     ↑
        0x05DC  0x05DC
         ↓     ↑
          0x05 | 0xDC
         (I2C 送受信)

     負値
        SBC側   MCU側
        −0.8    −0.8)
         ↓     ↑
        −800    −800
         ↓     ↑
        0xFCE0  0xFCE0
         ↓     ↑
         0xFC | 0xE0
         (I2C 送受信)

      負値は 「補数」 で表現する。 
      800 = 3 x 256 + 2 x 16 = 0x0320 
       −800 = 0x0320 の補数 = 0xFCE0


  • 単位A の数値を,単位 mA の数値に変換
    単位A の目標電流値は
      float32[12]
    これを単位 mA の数値にして,さらに
      int16[12]
    にカット。
    int16 は
      −32768 〜 +32767
    なので,電流値の表現はこの方法で問題ない。


  • int16 (16bit) の byte 表現
    この表現は,
      上位byte + 下位byte

    int16 value を上位byte と下位byte に分解する計算式は:
      high = (value >> 8) & 0xFF
      low = value & 0xFF
    ここで ">> 8" は 「8bit 右シフト」,"& 0xFF" は 「0xFF と論理積 (→下位8bit を取る)」。

    よって,整数の配列 current_mA を2byte の配列 data に変換するアルゴリズムは:

        data = []

        for value in current_mA:
          high = (value >> 8) & 0xFF
          low = value & 0xFF

          data.append(high)
          data.append(low)