I2C interface for LG1300L IMU
Dependents: LG1300L_Hello_World LG1300L_Hello_World_LCD
LG1300L.cpp@2:9bac32f6c9a0, 2013-03-05 (annotated)
- Committer:
- mjenkins11
- Date:
- Tue Mar 05 04:56:36 2013 +0000
- Revision:
- 2:9bac32f6c9a0
- Parent:
- 0:896f1d7a0503
revision 0.5;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mjenkins11 | 0:896f1d7a0503 | 1 | #include "mbed.h" |
mjenkins11 | 0:896f1d7a0503 | 2 | |
mjenkins11 | 0:896f1d7a0503 | 3 | #include "LG1300L.h" |
mjenkins11 | 0:896f1d7a0503 | 4 | |
mjenkins11 | 0:896f1d7a0503 | 5 | |
mjenkins11 | 0:896f1d7a0503 | 6 | LG1300L::LG1300L(I2C& i2c, int ACC_SETTING) |
mjenkins11 | 0:896f1d7a0503 | 7 | : ACC_RANGE(ACC_SETTING), IMU(i2c), IMU_ADDR(0x02){ |
mjenkins11 | 0:896f1d7a0503 | 8 | |
mjenkins11 | 0:896f1d7a0503 | 9 | ANGLE_LSB_REG[0] = 0x42; |
mjenkins11 | 0:896f1d7a0503 | 10 | ANGLE_MSB_REG[0] = 0x43; |
mjenkins11 | 0:896f1d7a0503 | 11 | ROT_LSB_REG[0] = 0x44; |
mjenkins11 | 0:896f1d7a0503 | 12 | ROT_MSB_REG[0] = 0x45; |
mjenkins11 | 0:896f1d7a0503 | 13 | X_ACC_LSB_REG[0] = 0x46; |
mjenkins11 | 0:896f1d7a0503 | 14 | X_ACC_MSB_REG[0] = 0x47; |
mjenkins11 | 0:896f1d7a0503 | 15 | Y_ACC_LSB_REG[0] = 0x48; |
mjenkins11 | 0:896f1d7a0503 | 16 | Y_ACC_MSB_REG[0] = 0x49; |
mjenkins11 | 0:896f1d7a0503 | 17 | Z_ACC_LSB_REG[1] = 0x4A; |
mjenkins11 | 0:896f1d7a0503 | 18 | Z_ACC_MSB_REG[1] = 0x4B; |
mjenkins11 | 0:896f1d7a0503 | 19 | |
mjenkins11 | 0:896f1d7a0503 | 20 | RESET_REG[0] = 0x60; |
mjenkins11 | 0:896f1d7a0503 | 21 | SELECT_2G_REG[0] = 0x61; |
mjenkins11 | 0:896f1d7a0503 | 22 | SELECT_4G_REG[0] = 0x62; |
mjenkins11 | 0:896f1d7a0503 | 23 | SELECT_8G_REG[0] = 0x63; |
mjenkins11 | 0:896f1d7a0503 | 24 | |
mjenkins11 | 0:896f1d7a0503 | 25 | init(); |
mjenkins11 | 0:896f1d7a0503 | 26 | } |
mjenkins11 | 0:896f1d7a0503 | 27 | |
mjenkins11 | 0:896f1d7a0503 | 28 | |
mjenkins11 | 0:896f1d7a0503 | 29 | void LG1300L::init(){ |
mjenkins11 | 0:896f1d7a0503 | 30 | |
mjenkins11 | 0:896f1d7a0503 | 31 | IMU.frequency(9600); |
mjenkins11 | 0:896f1d7a0503 | 32 | IMU.write(IMU_ADDR, RESET_REG, 1); |
mjenkins11 | 0:896f1d7a0503 | 33 | switch(ACC_RANGE){ |
mjenkins11 | 0:896f1d7a0503 | 34 | case 2: IMU.write(IMU_ADDR, SELECT_2G_REG, 1); |
mjenkins11 | 0:896f1d7a0503 | 35 | break; |
mjenkins11 | 0:896f1d7a0503 | 36 | case 4: IMU.write(IMU_ADDR, SELECT_4G_REG, 1); |
mjenkins11 | 0:896f1d7a0503 | 37 | break; |
mjenkins11 | 0:896f1d7a0503 | 38 | case 8: IMU.write(IMU_ADDR, SELECT_8G_REG, 1); |
mjenkins11 | 0:896f1d7a0503 | 39 | break; |
mjenkins11 | 0:896f1d7a0503 | 40 | default: break; |
mjenkins11 | 0:896f1d7a0503 | 41 | } |
mjenkins11 | 0:896f1d7a0503 | 42 | } |
mjenkins11 | 0:896f1d7a0503 | 43 | |
mjenkins11 | 0:896f1d7a0503 | 44 | float LG1300L::GetAngle(){ |
mjenkins11 | 0:896f1d7a0503 | 45 | |
mjenkins11 | 0:896f1d7a0503 | 46 | IMU.write(IMU_ADDR, ANGLE_LSB_REG , 1); |
mjenkins11 | 0:896f1d7a0503 | 47 | IMU.read(IMU_ADDR, data, 2); |
mjenkins11 | 0:896f1d7a0503 | 48 | wait(.1); |
mjenkins11 | 0:896f1d7a0503 | 49 | ANGLE_MSB = data[1]; |
mjenkins11 | 0:896f1d7a0503 | 50 | ANGLE_LSB = data[0]; |
mjenkins11 | 0:896f1d7a0503 | 51 | ANGLE_MSB = ((ANGLE_MSB << 8)+ANGLE_LSB); |
mjenkins11 | 0:896f1d7a0503 | 52 | CALC_ANG = ((float)ANGLE_MSB)/ 100.0f; |
mjenkins11 | 0:896f1d7a0503 | 53 | return CALC_ANG; |
mjenkins11 | 0:896f1d7a0503 | 54 | } |
mjenkins11 | 0:896f1d7a0503 | 55 | |
mjenkins11 | 0:896f1d7a0503 | 56 | float LG1300L::GetROT(){ |
mjenkins11 | 0:896f1d7a0503 | 57 | |
mjenkins11 | 0:896f1d7a0503 | 58 | IMU.write(IMU_ADDR, ROT_LSB_REG , 1); |
mjenkins11 | 0:896f1d7a0503 | 59 | IMU.read(IMU_ADDR, data, 2); |
mjenkins11 | 0:896f1d7a0503 | 60 | ROT_MSB = data[1]; |
mjenkins11 | 0:896f1d7a0503 | 61 | ROT_LSB = data[0]; |
mjenkins11 | 0:896f1d7a0503 | 62 | ROT_MSB = (ROT_MSB<<8)+ROT_LSB; |
mjenkins11 | 0:896f1d7a0503 | 63 | CALC_ROT = ((float)ROT_MSB)/100.0f; |
mjenkins11 | 0:896f1d7a0503 | 64 | return CALC_ROT; |
mjenkins11 | 0:896f1d7a0503 | 65 | } |
mjenkins11 | 0:896f1d7a0503 | 66 | |
mjenkins11 | 0:896f1d7a0503 | 67 | float LG1300L::GetACC_X(){ |
mjenkins11 | 0:896f1d7a0503 | 68 | IMU.write(IMU_ADDR, X_ACC_LSB_REG , 1); |
mjenkins11 | 0:896f1d7a0503 | 69 | IMU.read(IMU_ADDR, data, 2); |
mjenkins11 | 0:896f1d7a0503 | 70 | ACC_X_MSB = data[1]; |
mjenkins11 | 0:896f1d7a0503 | 71 | ACC_X_LSB = data[0]; |
mjenkins11 | 0:896f1d7a0503 | 72 | ACC_X_MSB = (ACC_X_MSB<<8)+ ACC_X_LSB; |
mjenkins11 | 0:896f1d7a0503 | 73 | CALC_X = ((float)ACC_X_MSB/1000.0f)*(float)ACC_RANGE/2.0f; |
mjenkins11 | 0:896f1d7a0503 | 74 | return CALC_X; |
mjenkins11 | 0:896f1d7a0503 | 75 | } |
mjenkins11 | 0:896f1d7a0503 | 76 | |
mjenkins11 | 0:896f1d7a0503 | 77 | float LG1300L::GetACC_Y(){ |
mjenkins11 | 0:896f1d7a0503 | 78 | |
mjenkins11 | 0:896f1d7a0503 | 79 | IMU.write(IMU_ADDR, Y_ACC_LSB_REG , 1); |
mjenkins11 | 0:896f1d7a0503 | 80 | IMU.read(IMU_ADDR, data, 2); |
mjenkins11 | 0:896f1d7a0503 | 81 | ACC_Y_MSB = data[1]; |
mjenkins11 | 0:896f1d7a0503 | 82 | ACC_Y_LSB = data[0]; |
mjenkins11 | 0:896f1d7a0503 | 83 | ACC_Y_MSB = (ACC_Y_MSB<<8)+ ACC_Y_LSB; |
mjenkins11 | 0:896f1d7a0503 | 84 | CALC_Y = ((float)ACC_Y_MSB/1000.0f)*(float)ACC_RANGE/2.0f; |
mjenkins11 | 0:896f1d7a0503 | 85 | return CALC_Y; |
mjenkins11 | 0:896f1d7a0503 | 86 | } |
mjenkins11 | 0:896f1d7a0503 | 87 | |
mjenkins11 | 0:896f1d7a0503 | 88 | float LG1300L::GetACC_Z(){ |
mjenkins11 | 0:896f1d7a0503 | 89 | |
mjenkins11 | 0:896f1d7a0503 | 90 | IMU.write(IMU_ADDR, Z_ACC_LSB_REG , 1); |
mjenkins11 | 0:896f1d7a0503 | 91 | IMU.read(IMU_ADDR, data, 2); |
mjenkins11 | 0:896f1d7a0503 | 92 | ACC_Z_MSB = data[1]; |
mjenkins11 | 0:896f1d7a0503 | 93 | ACC_Z_LSB = data[0]; |
mjenkins11 | 0:896f1d7a0503 | 94 | ACC_Z_MSB = (ACC_Z_MSB<<8)+ ACC_Z_LSB; |
mjenkins11 | 0:896f1d7a0503 | 95 | CALC_Z = ((float)ACC_Z_MSB/1000.0f)*(float)ACC_RANGE/2.0f; |
mjenkins11 | 0:896f1d7a0503 | 96 | return CALC_Z; |
mjenkins11 | 0:896f1d7a0503 | 97 | } |