A class and a demo program to use with the DC-SS504 board from SureElectronics which uses MMC2120MG magnetometer from Memsic. The program glows leds depending on the direction it is turned to.
MMCx12xM.h
- Committer:
- igorsk
- Date:
- 2009-12-02
- Revision:
- 0:a44429321af8
File content as of revision 0:a44429321af8:
#include <mbed.h>
#ifndef __MMCx12xM__
#define __MMCx12xM__
// possible I2C addresses, depending on the chip number
enum
{
MMCx120M = 0x60,
MMCx121M = 0x64,
MMCx122M = 0x68,
MMCx123M = 0x6C,
};
/* Class: MMCx12xM
* Control a Memsic MMC212xM magnetometer over I2C
*
* Example:
* > // MMC2120M at address 0x60
* >
* > #include "mbed.h"
* >
* > I2C i2c(p28, p27);
* > MMC212xM memsic1(i2c);
* >
* > int main() {
* > int data[2];
* > memsic1.read_raw_values(data, 2);
* > }
*/
class MMCx12xM : public Base
{
public:
// constructor in case you already have an I2C bus instance
MMCx12xM(I2C &i2c, int address = MMCx120M, const char *name = NULL);
// use this constructor if the sensor is the only device on the bus
MMCx12xM(PinName sda, PinName scl, int address = MMCx120M, const char *name = NULL);
// send a SET coil command
bool coil_set();
// send a RESET coil command
bool coil_reset();
// read raw (12-bit) axis values
bool read_raw_values(int *values, int count = 2);
// start calibration
void calibrate_begin();
// take a single measurement for calibration
void calibrate_step(int count = 2);
// finish calibration and calculate offset and sensitivity values
void calibrate_end();
// read calibrated (-1.0 .. +1.0) axis values
bool read_values(float *values, int count = 2);
virtual ~MMCx12xM();
private:
bool _send_command(int command);
bool _wait_ready(int command);
bool _read_axis(int *value, int index = -1);
// reference to the I2C bus
I2C *_I2C;
// sensor slave address
int _addr;
// did we create the bus instance? (i.e. we should delete it on destruct)
bool _own_i2c;
// calibration values
int _sensitivity[3];
int _offset[3];
// temporaries for calibration
int _maxvals[3];
int _minvals[3];
};
#endif