grove_accelerometer

Committer:
JackyZhangFromSeeed
Date:
Tue Jun 09 10:14:44 2015 +0000
Revision:
0:316e9c3f4e4f
grove_accelerometer

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JackyZhangFromSeeed 0:316e9c3f4e4f 1
JackyZhangFromSeeed 0:316e9c3f4e4f 2
JackyZhangFromSeeed 0:316e9c3f4e4f 3 #include "suli2.h"
JackyZhangFromSeeed 0:316e9c3f4e4f 4 #include "grove_accelerometer.h"
JackyZhangFromSeeed 0:316e9c3f4e4f 5
JackyZhangFromSeeed 0:316e9c3f4e4f 6
JackyZhangFromSeeed 0:316e9c3f4e4f 7
JackyZhangFromSeeed 0:316e9c3f4e4f 8 //local functions
JackyZhangFromSeeed 0:316e9c3f4e4f 9 static void grove_accelerometer_setmode(I2C_T *i2c, uint8_t mode);
JackyZhangFromSeeed 0:316e9c3f4e4f 10 static void grove_accelerometer_setsamplerate(I2C_T *i2c, uint8_t rate);
JackyZhangFromSeeed 0:316e9c3f4e4f 11 static void grove_accelerometer_getxyz(I2C_T *i2c, int8_t *x, int8_t *y, int8_t *z);
JackyZhangFromSeeed 0:316e9c3f4e4f 12
JackyZhangFromSeeed 0:316e9c3f4e4f 13 //local variables
JackyZhangFromSeeed 0:316e9c3f4e4f 14 static unsigned char cmdbuf[2];
JackyZhangFromSeeed 0:316e9c3f4e4f 15
JackyZhangFromSeeed 0:316e9c3f4e4f 16
JackyZhangFromSeeed 0:316e9c3f4e4f 17 void grove_accelerometer_init(I2C_T *i2c, int pinsda, int pinscl)
JackyZhangFromSeeed 0:316e9c3f4e4f 18 {
JackyZhangFromSeeed 0:316e9c3f4e4f 19 suli_i2c_init(i2c, pinsda, pinscl);
JackyZhangFromSeeed 0:316e9c3f4e4f 20 }
JackyZhangFromSeeed 0:316e9c3f4e4f 21
JackyZhangFromSeeed 0:316e9c3f4e4f 22 bool grove_accelerometer_write_setup(I2C_T *i2c)
JackyZhangFromSeeed 0:316e9c3f4e4f 23 {
JackyZhangFromSeeed 0:316e9c3f4e4f 24 grove_accelerometer_setmode(i2c, MMA7660_STAND_BY);
JackyZhangFromSeeed 0:316e9c3f4e4f 25 grove_accelerometer_setsamplerate(i2c, AUTO_SLEEP_32);
JackyZhangFromSeeed 0:316e9c3f4e4f 26 grove_accelerometer_setmode(i2c, MMA7660_ACTIVE);
JackyZhangFromSeeed 0:316e9c3f4e4f 27
JackyZhangFromSeeed 0:316e9c3f4e4f 28 return true;
JackyZhangFromSeeed 0:316e9c3f4e4f 29 }
JackyZhangFromSeeed 0:316e9c3f4e4f 30
JackyZhangFromSeeed 0:316e9c3f4e4f 31 static void grove_accelerometer_setmode(I2C_T *i2c, uint8_t mode)
JackyZhangFromSeeed 0:316e9c3f4e4f 32 {
JackyZhangFromSeeed 0:316e9c3f4e4f 33 //write(MMA7660_MODE,mode);
JackyZhangFromSeeed 0:316e9c3f4e4f 34 cmdbuf[0] = MMA7660_MODE;
JackyZhangFromSeeed 0:316e9c3f4e4f 35 cmdbuf[1] = mode;
JackyZhangFromSeeed 0:316e9c3f4e4f 36 suli_i2c_write(i2c, MMA7660_ADDR, cmdbuf, 2);
JackyZhangFromSeeed 0:316e9c3f4e4f 37
JackyZhangFromSeeed 0:316e9c3f4e4f 38 }
JackyZhangFromSeeed 0:316e9c3f4e4f 39 static void grove_accelerometer_setsamplerate(I2C_T *i2c, uint8_t rate)
JackyZhangFromSeeed 0:316e9c3f4e4f 40 {
JackyZhangFromSeeed 0:316e9c3f4e4f 41 //write(MMA7660_SR,rate);
JackyZhangFromSeeed 0:316e9c3f4e4f 42 cmdbuf[0] = MMA7660_SR;
JackyZhangFromSeeed 0:316e9c3f4e4f 43 cmdbuf[1] = rate;
JackyZhangFromSeeed 0:316e9c3f4e4f 44 suli_i2c_write(i2c, MMA7660_ADDR, cmdbuf, 2);
JackyZhangFromSeeed 0:316e9c3f4e4f 45 }
JackyZhangFromSeeed 0:316e9c3f4e4f 46
JackyZhangFromSeeed 0:316e9c3f4e4f 47 /*Function: Get the contents of the registers in the MMA7660*/
JackyZhangFromSeeed 0:316e9c3f4e4f 48 /* so as to calculate the acceleration. */
JackyZhangFromSeeed 0:316e9c3f4e4f 49 static void grove_accelerometer_getxyz(I2C_T *i2c, int8_t *x, int8_t *y, int8_t *z)
JackyZhangFromSeeed 0:316e9c3f4e4f 50 {
JackyZhangFromSeeed 0:316e9c3f4e4f 51 unsigned char val[3];
JackyZhangFromSeeed 0:316e9c3f4e4f 52 val[0] = val[1] = val[2] = 64;
JackyZhangFromSeeed 0:316e9c3f4e4f 53
JackyZhangFromSeeed 0:316e9c3f4e4f 54 suli_i2c_read(i2c, MMA7660_ADDR, val, 3);
JackyZhangFromSeeed 0:316e9c3f4e4f 55
JackyZhangFromSeeed 0:316e9c3f4e4f 56 *x = ((char)(val[0]<<2))/4;
JackyZhangFromSeeed 0:316e9c3f4e4f 57 *y = ((char)(val[1]<<2))/4;
JackyZhangFromSeeed 0:316e9c3f4e4f 58 *z = ((char)(val[2]<<2))/4;
JackyZhangFromSeeed 0:316e9c3f4e4f 59 }
JackyZhangFromSeeed 0:316e9c3f4e4f 60
JackyZhangFromSeeed 0:316e9c3f4e4f 61 bool grove_accelerometer_getacceleration(I2C_T *i2c, float *ax, float *ay, float *az)
JackyZhangFromSeeed 0:316e9c3f4e4f 62 {
JackyZhangFromSeeed 0:316e9c3f4e4f 63 int8_t x,y,z;
JackyZhangFromSeeed 0:316e9c3f4e4f 64 grove_accelerometer_getxyz(i2c, &x,&y,&z);
JackyZhangFromSeeed 0:316e9c3f4e4f 65 *ax = x/21.00;
JackyZhangFromSeeed 0:316e9c3f4e4f 66 *ay = y/21.00;
JackyZhangFromSeeed 0:316e9c3f4e4f 67 *az = z/21.00;
JackyZhangFromSeeed 0:316e9c3f4e4f 68
JackyZhangFromSeeed 0:316e9c3f4e4f 69 return true;
JackyZhangFromSeeed 0:316e9c3f4e4f 70 }
JackyZhangFromSeeed 0:316e9c3f4e4f 71
JackyZhangFromSeeed 0:316e9c3f4e4f 72