STM32F303K8T6でLSM303D動かしてみた
Diff: LSM303D.cpp
- Revision:
- 3:50ff4ad71082
- Parent:
- 2:8cd0c3c11b48
diff -r 8cd0c3c11b48 -r 50ff4ad71082 LSM303D.cpp --- a/LSM303D.cpp Mon Feb 08 17:57:22 2016 +0000 +++ b/LSM303D.cpp Tue Sep 08 06:34:37 2020 +0000 @@ -37,7 +37,6 @@ #include "mbed.h" #include "LSM303D.h" - const int addr_acc_mag = 0x3A; enum REG_ADDRS { @@ -84,7 +83,6 @@ _LSM303(sda, scl) { char reg_v; - _LSM303.frequency(200000); reg_v = 0; @@ -94,7 +92,7 @@ /* -- mag --- */ reg_v = 0; - reg_v |= 0x78; //M_RES = 11 (high resolution mode); M_ODR = 100 (50 Hz ODR) + reg_v |= 0x74; //M_RES = 11 (high resolution mode); M_ODR = 100 (50 Hz ODR) write_reg(addr_acc_mag,CTRL5,reg_v); @@ -102,20 +100,24 @@ reg_v = 0; reg_v |= 0x00; //continuous mag write_reg(addr_acc_mag,CTRL7,reg_v); + + reg_v = 0; + reg_v |= 0x00; //+-2gauss + write_reg(addr_acc_mag,CTRL6,reg_v); } -bool LSM303D::read(float *ax, float *ay, float *az, float *mx, float *my, float *mz) { +bool LSM303D::read(float *aData,float *mData) { char acc[6], mag[6]; if (recv(addr_acc_mag, OUT_X_A, acc, 6) && recv(addr_acc_mag, OUT_X_M, mag, 6)) { - *ax = float(short(acc[1] << 8 | acc[0]))*0.061; //32768/4=8192 - *ay = float(short(acc[3] << 8 | acc[2]))*0.061; - *az = float(short(acc[5] << 8 | acc[4]))*0.061; - //+-4gauss - *mx = float(short(mag[0] << 8 | mag[1]))*0.16; - *mz = float(short(mag[2] << 8 | mag[3]))*0.16; - *my = float(short(mag[4] << 8 | mag[5]))*0.16; + aData[0] = float(short(acc[1] << 8 | acc[0]))*0.061; //32768/4=8192 + aData[1] = float(short(acc[3] << 8 | acc[2]))*0.061; + aData[2] = float(short(acc[5] << 8 | acc[4]))*0.061; + //+-2gauss + mData[0] = float(short(mag[1] << 8 | mag[0]))*0.08; + mData[1] = float(short(mag[3] << 8 | mag[2]))*0.08; + mData[2] = float(short(mag[5] << 8 | mag[4]))*0.08; return true; }