Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: Hybrid_IZU2021_MAIN_OS5 Hybrid_IZU2021_MAIN
Revision 0:707ed8de35f5, committed 2020-12-15
- Comitter:
- tanahashi
- Date:
- Tue Dec 15 14:13:58 2020 +0000
- Commit message:
- first commit
Changed in this revision
PQ_ADXL375.cpp | Show annotated file Show diff for this revision Revisions of this file |
PQ_ADXL375.h | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r 707ed8de35f5 PQ_ADXL375.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PQ_ADXL375.cpp Tue Dec 15 14:13:58 2020 +0000 @@ -0,0 +1,49 @@ +#include "mbed.h" +#include "PQ_ADXL375.h" + +ADXL375 :: ADXL375(I2C &i2c, ALT_ADDRESS_t ALT_ADDRESS) +{ + _addr = ALT_ADDRESS; + _i2c = &i2c; + _i2c->frequency(400000); +} + +void ADXL375 :: begin() +{ + cmd[0] = ADXL375_BW_RATE; + cmd[1] = 0x0F; + _i2c->write(_addr, cmd, 2); + + cmd[0] = ADXL375_POWER_CTL; + cmd[1] = 0x08; + _i2c->write(_addr, cmd, 2); +} + +bool ADXL375 :: test() +{ + cmd[0] = ADXL375_DEVID; + _i2c->write(_addr, cmd, 1); + _i2c->read(_addr, buff, 1); + if (buff[0] == 0xE5) { + return true; + } else { + return false; + } +} + +void ADXL375 :: offset(float *high_accel) +{ + for(int i = 0; i < 3; i++) { + high_accel_offset[i] = high_accel[i]; + } +} + +void ADXL375 :: read(float *high_accel) +{ + cmd[0] = ADXL375_DATAX0; + _i2c->write(_addr, cmd, 1); + _i2c->read(_addr, buff, 6); + high_accel[0] = (short)(buff[1] << 8 | buff[0]) * ADXL375_LSB - high_accel_offset[0]; + high_accel[1] = (short)(buff[3] << 8 | buff[2]) * ADXL375_LSB - high_accel_offset[1]; + high_accel[2] = (short)(buff[5] << 8 | buff[4]) * ADXL375_LSB - high_accel_offset[2]; +} \ No newline at end of file
diff -r 000000000000 -r 707ed8de35f5 PQ_ADXL375.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PQ_ADXL375.h Tue Dec 15 14:13:58 2020 +0000 @@ -0,0 +1,86 @@ +#ifndef PQ_ADXL375_H +#define PQ_ADXL375_H + +#define ADXL375_ADDR_HIGH 0b0011101<<1 +#define ADXL375_ADDR_LOW 0b1010011<<1 + +#define ADXL375_DEVID 0x00 +#define ADXL375_BW_RATE 0x2C +#define ADXL375_POWER_CTL 0x2D +#define ADXL375_DATAX0 0x32 +#define ADXL375_LSB 0.049 + +/** + * 3軸高加速度センサADXL375のライブラリ + * @code +#include "mbed.h" +#include "PQ_ADXL375.h" + +Serial pc(USBTX, USBRX, 115200); +I2C i2c(p9, p10); + +ADXL375 adxl(i2c, ADXL375::ALT_ADDRESS_HIGH); + +float high_accel_offset[] = {0, 0, 0}; +float high_accel[3]; + +int main() { + adxl.begin(); + adxl.offset(high_accel); + if(adxl.test()){ + adxl.read(high_accel); + pc.printf("%f\t%f\t%f\r\n", high_accel[0], high_accel[1], high_accel[2]); + } + else{ + pc.printf("ERROR!!\r\n"); + } +} + * @endcode + */ +class ADXL375 +{ +public: + typedef enum { + ALT_ADDRESS_HIGH = ADXL375_ADDR_HIGH, + ALT_ADDRESS_LOW = ADXL375_ADDR_LOW + } ALT_ADDRESS_t; +private: + I2C *_i2c; + int _addr; + char cmd[2]; + char buff[6]; + float high_accel_offset[3]; +public: + /** + * @param i2c I2Cのインスタンスへの参照 + * @param AD0 ALT_ADDRESSピンのH/Lレベル + */ + ADXL375(I2C &i2c, ALT_ADDRESS_t ALT_ADDRESS); + + + /** + * センサ動作開始 + */ + void begin(); + + /** + * センサ通信テスト + * @retval true 通信成功 + * @retval false 通信失敗 + */ + bool test(); + + /** + * 加速度のゼロ点補正 + * @param high_accel 加速度のオフセット配列 + */ + void offset(float *high_accel); + + /** + * 加速度測定値の読み取り + * @param high_accel 加速度を格納する配列 + */ + void read(float *high_accel); +}; + +#endif \ No newline at end of file