grove_accelerometer

grove_accelerometer.cpp

Committer:
JackyZhangFromSeeed
Date:
2015-06-09
Revision:
0:316e9c3f4e4f

File content as of revision 0:316e9c3f4e4f:



#include "suli2.h"
#include "grove_accelerometer.h"



//local functions
static void grove_accelerometer_setmode(I2C_T *i2c, uint8_t mode);
static void grove_accelerometer_setsamplerate(I2C_T *i2c, uint8_t rate);
static void grove_accelerometer_getxyz(I2C_T *i2c, int8_t *x, int8_t *y, int8_t *z);

//local variables
static unsigned char cmdbuf[2];


void grove_accelerometer_init(I2C_T *i2c, int pinsda, int pinscl)
{
    suli_i2c_init(i2c, pinsda, pinscl);
}

bool grove_accelerometer_write_setup(I2C_T *i2c)
{
    grove_accelerometer_setmode(i2c, MMA7660_STAND_BY);
    grove_accelerometer_setsamplerate(i2c, AUTO_SLEEP_32);
    grove_accelerometer_setmode(i2c, MMA7660_ACTIVE);
    
    return true;
}

static void grove_accelerometer_setmode(I2C_T *i2c, uint8_t mode)
{
    //write(MMA7660_MODE,mode); 
    cmdbuf[0] = MMA7660_MODE;
    cmdbuf[1] = mode;
    suli_i2c_write(i2c, MMA7660_ADDR, cmdbuf, 2);
    
}
static void grove_accelerometer_setsamplerate(I2C_T *i2c, uint8_t rate)
{
    //write(MMA7660_SR,rate);
    cmdbuf[0] = MMA7660_SR;
    cmdbuf[1] = rate;
    suli_i2c_write(i2c, MMA7660_ADDR, cmdbuf, 2);
}

/*Function: Get the contents of the registers in the MMA7660*/
/*          so as to calculate the acceleration.            */
static void grove_accelerometer_getxyz(I2C_T *i2c, int8_t *x, int8_t *y, int8_t *z)
{
    unsigned char val[3];
    val[0] = val[1] = val[2] = 64;

    suli_i2c_read(i2c, MMA7660_ADDR, val, 3);
    
    *x = ((char)(val[0]<<2))/4;
    *y = ((char)(val[1]<<2))/4;
    *z = ((char)(val[2]<<2))/4;
}

bool grove_accelerometer_getacceleration(I2C_T *i2c, float *ax, float *ay, float *az)
{
    int8_t x,y,z;
    grove_accelerometer_getxyz(i2c, &x,&y,&z);
    *ax = x/21.00;
    *ay = y/21.00;
    *az = z/21.00;
    
    return true;
}