Lysenko Mami
/
IMU3000
Code for communicating with IMU3000 in I2C
main.cpp@0:2ede7cf4f8fa, 2012-10-29 (annotated)
- Committer:
- godziram
- Date:
- Mon Oct 29 18:28:30 2012 +0000
- Revision:
- 0:2ede7cf4f8fa
IMU3000
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
godziram | 0:2ede7cf4f8fa | 1 | #include "mbed.h" |
godziram | 0:2ede7cf4f8fa | 2 | |
godziram | 0:2ede7cf4f8fa | 3 | I2C i2c(p9, p10); |
godziram | 0:2ede7cf4f8fa | 4 | Serial pc(USBTX, USBRX); |
godziram | 0:2ede7cf4f8fa | 5 | |
godziram | 0:2ede7cf4f8fa | 6 | Ticker tick; //Timer |
godziram | 0:2ede7cf4f8fa | 7 | double interval = 10; //[ms] |
godziram | 0:2ede7cf4f8fa | 8 | |
godziram | 0:2ede7cf4f8fa | 9 | const int adrIMU3000 = 0xD0;//8-bit write |
godziram | 0:2ede7cf4f8fa | 10 | |
godziram | 0:2ede7cf4f8fa | 11 | |
godziram | 0:2ede7cf4f8fa | 12 | void measure(); |
godziram | 0:2ede7cf4f8fa | 13 | |
godziram | 0:2ede7cf4f8fa | 14 | int main() { |
godziram | 0:2ede7cf4f8fa | 15 | |
godziram | 0:2ede7cf4f8fa | 16 | i2c.frequency(400000); //set 400kHz |
godziram | 0:2ede7cf4f8fa | 17 | |
godziram | 0:2ede7cf4f8fa | 18 | pc.baud(115200); |
godziram | 0:2ede7cf4f8fa | 19 | |
godziram | 0:2ede7cf4f8fa | 20 | char PWR_M[2] = {0x3E, 0x80}; |
godziram | 0:2ede7cf4f8fa | 21 | i2c.write(adrIMU3000, PWR_M, 2, true); |
godziram | 0:2ede7cf4f8fa | 22 | char SMPL[2] = {0x15, 0x00}; |
godziram | 0:2ede7cf4f8fa | 23 | i2c.write(adrIMU3000, SMPL, 2, true); |
godziram | 0:2ede7cf4f8fa | 24 | char DLPF[2] = {0x16, 0x18}; |
godziram | 0:2ede7cf4f8fa | 25 | i2c.write(adrIMU3000, DLPF, 2, true); |
godziram | 0:2ede7cf4f8fa | 26 | char INT_C[2] = {0x17, 0x05}; |
godziram | 0:2ede7cf4f8fa | 27 | i2c.write(adrIMU3000, INT_C, 2, true); |
godziram | 0:2ede7cf4f8fa | 28 | char PWR_M2[2] = {0x3E, 0x00}; |
godziram | 0:2ede7cf4f8fa | 29 | i2c.write(adrIMU3000, PWR_M2, 2, true); |
godziram | 0:2ede7cf4f8fa | 30 | |
godziram | 0:2ede7cf4f8fa | 31 | while(true) |
godziram | 0:2ede7cf4f8fa | 32 | measure(); |
godziram | 0:2ede7cf4f8fa | 33 | //tick.attach_us(&measure, interval); |
godziram | 0:2ede7cf4f8fa | 34 | |
godziram | 0:2ede7cf4f8fa | 35 | } |
godziram | 0:2ede7cf4f8fa | 36 | |
godziram | 0:2ede7cf4f8fa | 37 | void measure() |
godziram | 0:2ede7cf4f8fa | 38 | { |
godziram | 0:2ede7cf4f8fa | 39 | char adrIMU3000_y[1]; |
godziram | 0:2ede7cf4f8fa | 40 | char readIMU3000[8]; |
godziram | 0:2ede7cf4f8fa | 41 | |
godziram | 0:2ede7cf4f8fa | 42 | short int read_x_2byte = 0; |
godziram | 0:2ede7cf4f8fa | 43 | short int read_y_2byte = 0; |
godziram | 0:2ede7cf4f8fa | 44 | short int read_z_2byte = 0; |
godziram | 0:2ede7cf4f8fa | 45 | |
godziram | 0:2ede7cf4f8fa | 46 | adrIMU3000_y[0] = 0x1D; //register GYRO_XOUT_H |
godziram | 0:2ede7cf4f8fa | 47 | |
godziram | 0:2ede7cf4f8fa | 48 | i2c.write(adrIMU3000, adrIMU3000_y , 1); |
godziram | 0:2ede7cf4f8fa | 49 | i2c.read(adrIMU3000, readIMU3000, 8); |
godziram | 0:2ede7cf4f8fa | 50 | |
godziram | 0:2ede7cf4f8fa | 51 | read_x_2byte = ((readIMU3000[0] << 8) + readIMU3000[1]); |
godziram | 0:2ede7cf4f8fa | 52 | read_y_2byte = ((readIMU3000[2] << 8) + readIMU3000[3]); |
godziram | 0:2ede7cf4f8fa | 53 | read_z_2byte = ((readIMU3000[4] << 8) + readIMU3000[5]); |
godziram | 0:2ede7cf4f8fa | 54 | |
godziram | 0:2ede7cf4f8fa | 55 | pc.printf("%d, %d, %d\n", read_x_2byte, read_y_2byte, read_z_2byte); |
godziram | 0:2ede7cf4f8fa | 56 | |
godziram | 0:2ede7cf4f8fa | 57 | } |