Guide
1/12/2018 mbed Starter Kit Experiment Guide - learn.sparkfun.com
https://learn.sparkfun.com/tutorials/mbed-starter-kit-experiment-guide/all 27/65
// Read MSB and LSB from X registers
x = readRegister(OUT_X_MSB);
x = x << 8;
x |= readRegister(OUT_X_LSB);
x = x >> 4;
// Calculate human readable X
cx = (float)x / (float)2048 * (float)(scale);
return cx;
}
// Read Y registers
float MMA8452Q::readY()
{
int16_t y = 0;
float cy = 0;
// Read MSB and LSB from Y registers
y = readRegister(OUT_Y_MSB);
y = y << 8;
y |= readRegister(OUT_Y_LSB);
y = y >> 4;
// Calculate human readable Y
cy = (float)y / (float)2048 * (float)(scale);
return cy;
}
// Read Z registers
float MMA8452Q::readZ()
{
int16_t z = 0;
float cz = 0;
// Read MSB and LSB from Z registers
z = readRegister(OUT_Z_MSB);
z = z << 8;
z |= readRegister(OUT_Z_LSB);
z = z >> 4;
// Calculate human readable Z
cz = (float)z / (float)2048 * (float)(scale);
return cz;
}
// Raw read register over I2C
uint8_t MMA8452Q::readRegister(uint8_t reg)
{
uint8_t dev_addr;
uint8_t data;
// I2C address are bits [6..1] in the transmitted byte, so we shift by 1
dev_addr = m_addr << 1;
// Write device address with a trailing 'write' bit
m_i2c.start();
m_i2c.write(dev_addr & 0xFE);
// Write register address
m_i2c.write(reg);
// Write a start bit and device address with a trailing 'read' bit
m_i2c.start();
m_i2c.write(dev_addr | 0x01);
// Read single byte from I2C device
data = m_i2c.read(0);
m_i2c.stop();
return data;
}
// Raw write data to a register over I2C
void MMA8452Q::writeRegister(uint8_t reg, uint8_t data)
{
uint8_t dev_addr;