blablabla

Dependencies:   MAG3110 MMA8451Q SLCD- TSI USBDevice mbed

Committer:
Osator
Date:
Wed Apr 16 12:20:00 2014 +0000
Revision:
0:339b7abfa147
blablabla

Who changed what in which revision?

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