akcelerometr i czujnik swiatla

Dependencies:   MAG3110 MMA8451Q SLCD- TSI USBDevice mbed

Committer:
zochmen
Date:
Wed Apr 16 12:20:13 2014 +0000
Revision:
0:9f7e045dcaa5
akcelerometr; czujnika swiatla;

Who changed what in which revision?

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