void imu_g_read_data_raw(vector *v) { unsigned char xl,xh,yl,yh,zl,zh; i2c_start(); i2c_write_byte(0xD0); i2c_write_byte(0x1d); i2c_start(); i2c_write_byte(0xD1); xh = i2c_read_byte(); xl = i2c_read_byte(); yh = i2c_read_byte(); yl = i2c_read_byte(); zh = i2c_read_byte(); zl = i2c_read_last_byte(); i2c_stop(); v->x = xh << 8 | xl; v->y = yh << 8 | yl; v->z = zh << 8 | zl; }
// Returns a set of acceleration and raw magnetic readings from the cmp01a. void read_data_raw(vector *a, vector *m) { // read accelerometer values i2c_start(); i2c_write_byte(0x30); // write acc i2c_write_byte(0xa8); // OUT_X_L_A, MSB set to enable auto-increment i2c_start(); // repeated start i2c_write_byte(0x31); // read acc unsigned char axl = i2c_read_byte(); unsigned char axh = i2c_read_byte(); unsigned char ayl = i2c_read_byte(); unsigned char ayh = i2c_read_byte(); unsigned char azl = i2c_read_byte(); unsigned char azh = i2c_read_last_byte(); i2c_stop(); // read magnetometer values i2c_start(); i2c_write_byte(0x3C); // write mag i2c_write_byte(0x03); // OUTXH_M i2c_start(); // repeated start i2c_write_byte(0x3D); // read mag unsigned char mxh = i2c_read_byte(); unsigned char mxl = i2c_read_byte(); unsigned char mzh = i2c_read_byte(); unsigned char mzl = i2c_read_byte(); unsigned char myh = i2c_read_byte(); unsigned char myl = i2c_read_last_byte(); i2c_stop(); a->x = axh << 8 | axl; a->y = ayh << 8 | ayl; a->z = azh << 8 | azl; m->x = mxh << 8 | mxl; m->y = myh << 8 | myl; m->z = mzh << 8 | mzl; }
void imu_a_read_data_raw(vector *v) { unsigned char xl,xh,yl,yh,zl,zh; i2c_start(); i2c_write_byte(0x30); i2c_write_byte(0xa8); i2c_start(); i2c_write_byte(0x31); xl = i2c_read_byte(); xh = i2c_read_byte(); yl = i2c_read_byte(); yh = i2c_read_byte(); zl = i2c_read_byte(); zh = i2c_read_last_byte(); i2c_stop(); v->x = (xh << 8 | xl) /16; v->y = (yh << 8 | yl) /16; v->z = (zh << 8 | zl) /16; }