grove_accelerometer
grove_accelerometer.cpp@0:316e9c3f4e4f, 2015-06-09 (annotated)
- Committer:
- JackyZhangFromSeeed
- Date:
- Tue Jun 09 10:14:44 2015 +0000
- Revision:
- 0:316e9c3f4e4f
grove_accelerometer
Who changed what in which revision?
User | Revision | Line number | New 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 |