Acceleration sensor used LIS3DH

Dependencies:   mbed

main.cpp

Committer:
tknara
Date:
2015-01-17
Revision:
0:a1ef86f16233

File content as of revision 0:a1ef86f16233:

#include "mbed.h"

I2C i2c(p9,p10);
Serial pc(USBTX,USBRX);
DigitalOut led(LED1);
// addr
#define WRITE_ADDR 0x30
#define READ_ADDR 0x31
//   LIS3DH ID
#define I_AM_LIS3DH         0x33

//  Register's definition
#define LIS3DH_STATUS_REG_AUX  0x07
#define LIS3DH_OUT_ADC1_L      0x08
#define LIS3DH_OUT_ADC1_H      0x09
#define LIS3DH_OUT_ADC2_L      0x0a
#define LIS3DH_OUT_ADC2_H      0x0b
#define LIS3DH_OUT_ADC3_L      0x0c
#define LIS3DH_OUT_ADC3_H      0x0d
#define LIS3DH_INT_COUNTER_REG 0x0e
#define LIS3DH_WHO_AM_I        0x0f
#define LIS3DH_TEMP_CFG_REG    0x1f
#define LIS3DH_CTRL_REG1       0x20
#define LIS3DH_CTRL_REG2       0x21
#define LIS3DH_CTRL_REG3       0x22
#define LIS3DH_CTRL_REG4       0x23
#define LIS3DH_CTRL_REG5       0x24
#define LIS3DH_CTRL_REG6       0x25
#define LIS3DH_REFERENCE       0x26
#define LIS3DH_STATUS_REG2     0x27
#define LIS3DH_OUT_X_L         0x28
#define LIS3DH_OUT_X_H         0x29
#define LIS3DH_OUT_Y_L         0x2a
#define LIS3DH_OUT_Y_H         0x2b
#define LIS3DH_OUT_Z_L         0x2c
#define LIS3DH_OUT_Z_H         0x2d
#define LIS3DH_FIFO_CTRL_REG   0x2e
#define LIS3DH_FIFO_SRC_REG    0x2f
#define LIS3DH_INT1_CFG        0x30
#define LIS3DH_INT1_SOURCE     0x31
#define LIS3DH_INT1_THS        0x32
#define LIS3DH_INT1_DURATION   0x33
#define LIS3DH_CLICK_CFG       0x38
#define LIS3DH_CLICK_SRC       0x39
#define LIS3DH_CLICK_THS       0x3a
#define LIS3DH_TIME_LIMIT      0x3b
#define LIS3DH_TIME_LATENCY    0x3c
#define LIS3DH_TIME_WINDOW     0x3d

// definition for Nomalization
#define LIS3DH_SENSITIVITY_2G  (0.001F)
#define LIS3DH_SENSITIVITY_4G  (0.002F)
#define LIS3DH_SENSITIVITY_8G  (0.004F)
#define LIS3DH_SENSITIVITY_16G (0.012F)

int main() {
    char dbf[2],addr,data[6];
    float dt[3];
    addr = WRITE_ADDR;
    dbf[0] = LIS3DH_WHO_AM_I;
    i2c.write(addr, dbf, 1);
    i2c.read(addr | 1, dbf, 1);
    if(dbf[0] == I_AM_LIS3DH) {
        led = 1;//test led

        while (1) {
            dbf[0] = LIS3DH_CTRL_REG1;
            dbf[1] = 0x7f;
            i2c.write(addr , dbf , 2);
//======================================================//
            dbf[0] = LIS3DH_OUT_X_L | 0x80;
            i2c.write(addr, dbf, 1);
            i2c.read(addr | 1, data, 6);
            dt[0] = float(short((data[1]<<8) | data[0])) *LIS3DH_SENSITIVITY_2G  / 15;
            dt[1] = float(short((data[3]<<8) | data[2])) *LIS3DH_SENSITIVITY_2G  / 15;
            dt[2] = float(short((data[5]<<8) | data[4])) *LIS3DH_SENSITIVITY_2G  / 15;

            pc.printf("X=%f __Y=%f __Z=%f \n",dt[0],dt[1],dt[2]);
            wait(1);
        }
    }
}