J&W / Mbed 2 deprecated Rejestrator

Dependencies:   mbed Rejestrator

Dependents:   Rejestrator

Committer:
Waldek
Date:
Sat Apr 18 17:01:57 2015 +0000
Revision:
0:fa31f8461c63
Child:
1:5ad44a4edff9
working version, stop

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Waldek 0:fa31f8461c63 1
Waldek 0:fa31f8461c63 2 #include "MAG3110.h"
Waldek 0:fa31f8461c63 3 #include "mbed.h"
Waldek 0:fa31f8461c63 4
Waldek 0:fa31f8461c63 5 /******************************************************************************
Waldek 0:fa31f8461c63 6 * Constructors
Waldek 0:fa31f8461c63 7 ******************************************************************************/
Waldek 0:fa31f8461c63 8 MAG3110::MAG3110(PinName sda, PinName scl, int i2c_adr): _i2c(sda, scl),
Waldek 0:fa31f8461c63 9 _i2c_address(i2c_adr<<1)
Waldek 0:fa31f8461c63 10 {
Waldek 0:fa31f8461c63 11 begin();
Waldek 0:fa31f8461c63 12 }
Waldek 0:fa31f8461c63 13
Waldek 0:fa31f8461c63 14 void MAG3110::begin()
Waldek 0:fa31f8461c63 15 {
Waldek 0:fa31f8461c63 16 char cmd[2];
Waldek 0:fa31f8461c63 17
Waldek 0:fa31f8461c63 18 cmd[0] = MAG_CTRL_REG2;
Waldek 0:fa31f8461c63 19 cmd[1] = MAG_3110_AUTO_MRST_EN + MAG_3110_MAG_RST;
Waldek 0:fa31f8461c63 20 _i2c.write(_i2c_address, cmd, 2);
Waldek 0:fa31f8461c63 21
Waldek 0:fa31f8461c63 22 cmd[0] = MAG_CTRL_REG1;
Waldek 0:fa31f8461c63 23 cmd[1] = MAG_3110_SAMPLE80 + MAG_3110_OVERSAMPLE4 + MAG_3110_ACTIVE;
Waldek 0:fa31f8461c63 24 _i2c.write(_i2c_address, cmd, 2);
Waldek 0:fa31f8461c63 25
Waldek 0:fa31f8461c63 26 // No adjustment initially
Waldek 0:fa31f8461c63 27 _avgX = 0;
Waldek 0:fa31f8461c63 28 _avgY = 0;
Waldek 0:fa31f8461c63 29 }
Waldek 0:fa31f8461c63 30
Waldek 0:fa31f8461c63 31 // Read a single byte form 8 bit register, return as int
Waldek 0:fa31f8461c63 32 int MAG3110::readReg(char regAddr)
Waldek 0:fa31f8461c63 33 {
Waldek 0:fa31f8461c63 34 char cmd[1];
Waldek 0:fa31f8461c63 35
Waldek 0:fa31f8461c63 36 cmd[0] = regAddr;
Waldek 0:fa31f8461c63 37 _i2c.write(_i2c_address, cmd, 1);
Waldek 0:fa31f8461c63 38
Waldek 0:fa31f8461c63 39 cmd[0] = 0x00;
Waldek 0:fa31f8461c63 40 _i2c.read(_i2c_address, cmd, 1);
Waldek 0:fa31f8461c63 41 return (int)( cmd[0]);
Waldek 0:fa31f8461c63 42 }
Waldek 0:fa31f8461c63 43
Waldek 0:fa31f8461c63 44
Waldek 0:fa31f8461c63 45 // read a register per, pass first reg value, reading 2 bytes increments register
Waldek 0:fa31f8461c63 46 // Reads MSB first then LSB
Waldek 0:fa31f8461c63 47 int MAG3110::readVal(char regAddr)
Waldek 0:fa31f8461c63 48 {
Waldek 0:fa31f8461c63 49 char cmd[2];
Waldek 0:fa31f8461c63 50
Waldek 0:fa31f8461c63 51 cmd[0] = regAddr;
Waldek 0:fa31f8461c63 52 _i2c.write(_i2c_address, cmd, 1);
Waldek 0:fa31f8461c63 53
Waldek 0:fa31f8461c63 54 cmd[0] = 0x00;
Waldek 0:fa31f8461c63 55 cmd[1] = 0x00;
Waldek 0:fa31f8461c63 56 _i2c.read(_i2c_address, cmd, 2);
Waldek 0:fa31f8461c63 57 return (int)( (cmd[1]|(cmd[0] << 8))); //concatenate the MSB and LSB
Waldek 0:fa31f8461c63 58 }
Waldek 0:fa31f8461c63 59
Waldek 0:fa31f8461c63 60
Waldek 0:fa31f8461c63 61 float MAG3110::getHeading()
Waldek 0:fa31f8461c63 62 {
Waldek 0:fa31f8461c63 63 int xVal = readVal(MAG_OUT_X_MSB);
Waldek 0:fa31f8461c63 64 int yVal = readVal(MAG_OUT_Y_MSB);
Waldek 0:fa31f8461c63 65 return (atan2((double)(yVal - _avgY),(double)(xVal - _avgX)))*180/PI;
Waldek 0:fa31f8461c63 66 }
Waldek 0:fa31f8461c63 67
Waldek 0:fa31f8461c63 68 void MAG3110::getValues(int *xVal, int *yVal, int *zVal)
Waldek 0:fa31f8461c63 69 {
Waldek 0:fa31f8461c63 70 *xVal = readVal(MAG_OUT_X_MSB);
Waldek 0:fa31f8461c63 71 *yVal = readVal(MAG_OUT_Y_MSB);
Waldek 0:fa31f8461c63 72 *zVal = readVal(MAG_OUT_Z_MSB);
Waldek 0:fa31f8461c63 73 }
Waldek 0:fa31f8461c63 74
Waldek 0:fa31f8461c63 75
Waldek 0:fa31f8461c63 76 void MAG3110::setCalibration(int minX, int maxX, int minY, int maxY )
Waldek 0:fa31f8461c63 77 {
Waldek 0:fa31f8461c63 78 _avgX=(maxX+minX)/2;
Waldek 0:fa31f8461c63 79 _avgY=(maxY+minY)/2;
Waldek 0:fa31f8461c63 80 }
Waldek 0:fa31f8461c63 81
Waldek 0:fa31f8461c63 82
Waldek 0:fa31f8461c63 83 int8_t MAG3110::getTemperature(void)
Waldek 0:fa31f8461c63 84 {
Waldek 0:fa31f8461c63 85 return (int8_t)readVal(MAG_DIE_TEMP);
Waldek 0:fa31f8461c63 86 }