I2C driver for HMC5583L digital compass sensor
hmc5583l.cpp
- Committer:
- sillevl
- Date:
- 2015-12-03
- Revision:
- 0:91f08ac76444
- Child:
- 1:097089f0feb1
File content as of revision 0:91f08ac76444:
#include "hmc5583l.h" #include "stdint.h" HMC5583L::HMC5583L(PinName sda, PinName scl, int _address): i2c(sda, scl), address(_address) { char data[2]; data[0] = 0x02; // select mode register data[1] = 0x00; // continous measurement mode i2c.write(address, data, 2); } coord HMC5583L::getCompass() { coord c; // tell where to begin reading data char data[] = {0x03}; // select register 3, MSB register i2c.write(address, data, 1); char values[6]; i2c.read(address, values, 6); // x = (x >> 11) == 0 ? x : -1 ^ 0xFFF | x; c.x = regToInt(values[0], values[1]); c.y = regToInt(values[2], values[3]); c.z = regToInt(values[4], values[5]); return c; } int HMC5583L::regToInt(char msb, char lsb){ int16_t value = msb << 8 | lsb; return (int) value; }