PQ_Hybrid_Electrical_Equipment_Team / PQ_ADXL375

Dependents:   Hybrid_IZU2021_MAIN_OS5 Hybrid_IZU2021_MAIN

Files at this revision

API Documentation at this revision

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