I2C は,byte しか送れない。
一方,IMU の出力の数値は,
float32
よって,IMUストア側では bytes への変換,そして移動覚NNストア側では元の数値への復元を,それぞれ行うことになる。
- IMUストア 側
IMUストアは,IMU の出力の中から ax, ay, wx, wy の項目を選び,その数値を imu_data に納める。
そしてそれを,bytes に変換して imu_store_buffer に納める。
この変換のコマンド (関数) は:
void IMU_Data2StoreBuffer(
uint8_t* imu_store_buffer
)
{
memcpy(
imu_store_buffer,
(uint8_t*)&imu_data,
sizeof(IMUStoreBuffer)
);
}
ここで
(uint8_t*)&imu_data
は,
「imu_data の内容を byte列として見よ」
- 移動覚NNストア 側
imu_store_buffer に入っているデータ (4byte × 4) は,つぎのコマンド (関数) で取得できる:
data = bus.read_i2c_block_data(
0x30,
0,
16
)
floatへ復元 :
# Python の struct ライブラリを使う :
import struct
# Python bytes へ
raw = bytes(data)
# f = float が4つ
# → ax, ay, wx, wy が復元される
ax, ay, wx, wy = struct.unpack(
"<ffff",
raw
)
|