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 * MAG3110 Sensor Library for mbed
zochmen 0:9f7e045dcaa5 3 * TODO: Add proper header
zochmen 0:9f7e045dcaa5 4 */
zochmen 0:9f7e045dcaa5 5
zochmen 0:9f7e045dcaa5 6 #ifndef MAG3110_H
zochmen 0:9f7e045dcaa5 7 #define MAG3110_H
zochmen 0:9f7e045dcaa5 8
zochmen 0:9f7e045dcaa5 9 #include "mbed.h"
zochmen 0:9f7e045dcaa5 10
zochmen 0:9f7e045dcaa5 11 #define PI 3.14159265359
zochmen 0:9f7e045dcaa5 12
zochmen 0:9f7e045dcaa5 13 #define MAG_ADDR 0x1D
zochmen 0:9f7e045dcaa5 14
zochmen 0:9f7e045dcaa5 15 // define registers
zochmen 0:9f7e045dcaa5 16 #define MAG_DR_STATUS 0x00
zochmen 0:9f7e045dcaa5 17 #define MAG_OUT_X_MSB 0x01
zochmen 0:9f7e045dcaa5 18 #define MAG_OUT_X_LSB 0x02
zochmen 0:9f7e045dcaa5 19 #define MAG_OUT_Y_MSB 0x03
zochmen 0:9f7e045dcaa5 20 #define MAG_OUT_Y_LSB 0x04
zochmen 0:9f7e045dcaa5 21 #define MAG_OUT_Z_MSB 0x05
zochmen 0:9f7e045dcaa5 22 #define MAG_OUT_Z_LSB 0x06
zochmen 0:9f7e045dcaa5 23 #define MAG_WHO_AM_I 0x07
zochmen 0:9f7e045dcaa5 24 #define MAG_SYSMOD 0x08
zochmen 0:9f7e045dcaa5 25 #define MAG_OFF_X_MSB 0x09
zochmen 0:9f7e045dcaa5 26 #define MAG_OFF_X_LSB 0x0A
zochmen 0:9f7e045dcaa5 27 #define MAG_OFF_Y_MSB 0x0B
zochmen 0:9f7e045dcaa5 28 #define MAG_OFF_Y_LSB 0x0C
zochmen 0:9f7e045dcaa5 29 #define MAG_OFF_Z_MSB 0x0D
zochmen 0:9f7e045dcaa5 30 #define MAG_OFF_Z_LSB 0x0E
zochmen 0:9f7e045dcaa5 31 #define MAG_DIE_TEMP 0x0F
zochmen 0:9f7e045dcaa5 32 #define MAG_CTRL_REG1 0x10
zochmen 0:9f7e045dcaa5 33 #define MAG_CTRL_REG2 0x11
zochmen 0:9f7e045dcaa5 34
zochmen 0:9f7e045dcaa5 35 // what should WHO_AM_I return?
zochmen 0:9f7e045dcaa5 36 #define MAG_3110_WHO_AM_I_VALUE 0xC4
zochmen 0:9f7e045dcaa5 37
zochmen 0:9f7e045dcaa5 38
zochmen 0:9f7e045dcaa5 39 // Fields in registers
zochmen 0:9f7e045dcaa5 40 // CTRL_REG1: dr2,dr1,dr0 os1,os0 fr tm ac
zochmen 0:9f7e045dcaa5 41
zochmen 0:9f7e045dcaa5 42 // Sampling rate from 80Hz down to 0.625Hz
zochmen 0:9f7e045dcaa5 43 #define MAG_3110_SAMPLE80 0
zochmen 0:9f7e045dcaa5 44 #define MAG_3110_SAMPLE40 0x20
zochmen 0:9f7e045dcaa5 45 #define MAG_3110_SAMPLE20 0x40
zochmen 0:9f7e045dcaa5 46 #define MAG_3110_SAMPLE10 0x60
zochmen 0:9f7e045dcaa5 47 #define MAG_3110_SAMPLE5 0x80
zochmen 0:9f7e045dcaa5 48 #define MAG_3110_SAMPLE2_5 0xA0
zochmen 0:9f7e045dcaa5 49 #define MAG_3110_SAMPLE1_25 0xC0
zochmen 0:9f7e045dcaa5 50 #define MAG_3110_SAMPLE0_625 0xE0
zochmen 0:9f7e045dcaa5 51
zochmen 0:9f7e045dcaa5 52 // How many samples to average (lowers data rate)
zochmen 0:9f7e045dcaa5 53 #define MAG_3110_OVERSAMPLE1 0
zochmen 0:9f7e045dcaa5 54 #define MAG_3110_OVERSAMPLE2 0x08
zochmen 0:9f7e045dcaa5 55 #define MAG_3110_OVERSAMPLE3 0x10
zochmen 0:9f7e045dcaa5 56 #define MAG_3110_OVERSAMPLE4 0x18
zochmen 0:9f7e045dcaa5 57
zochmen 0:9f7e045dcaa5 58 // read only 1 byte per axis
zochmen 0:9f7e045dcaa5 59 #define MAG_3110_FASTREAD 0x04
zochmen 0:9f7e045dcaa5 60 // do one measurement (even if in standby mode)
zochmen 0:9f7e045dcaa5 61 #define MAG_3110_TRIGGER 0x02
zochmen 0:9f7e045dcaa5 62 // put in active mode
zochmen 0:9f7e045dcaa5 63 #define MAG_3110_ACTIVE 0x01
zochmen 0:9f7e045dcaa5 64
zochmen 0:9f7e045dcaa5 65 // CTRL_REG2: AUTO_MRST_EN _ RAW MAG_RST _ _ _ _ _
zochmen 0:9f7e045dcaa5 66 // reset sensor after each reading
zochmen 0:9f7e045dcaa5 67 #define MAG_3110_AUTO_MRST_EN 0x80
zochmen 0:9f7e045dcaa5 68 // don't subtract user offsets
zochmen 0:9f7e045dcaa5 69 #define MAG_3110_RAW 0x20
zochmen 0:9f7e045dcaa5 70 // reset magnetic sensor after too-large field
zochmen 0:9f7e045dcaa5 71 #define MAG_3110_MAG_RST 0x10
zochmen 0:9f7e045dcaa5 72
zochmen 0:9f7e045dcaa5 73 // DR_STATUS Register ZYXOW ZOW YOW XOW ZYXDR ZDR YDR XDR
zochmen 0:9f7e045dcaa5 74 #define MAG_3110_ZYXDR 0x08
zochmen 0:9f7e045dcaa5 75
zochmen 0:9f7e045dcaa5 76 /**
zochmen 0:9f7e045dcaa5 77 * MAG3110 Class to read X/Y/Z data from the magentometer
zochmen 0:9f7e045dcaa5 78 *
zochmen 0:9f7e045dcaa5 79 */
zochmen 0:9f7e045dcaa5 80 class MAG3110
zochmen 0:9f7e045dcaa5 81 {
zochmen 0:9f7e045dcaa5 82 public:
zochmen 0:9f7e045dcaa5 83 /**
zochmen 0:9f7e045dcaa5 84 * Main constructor
zochmen 0:9f7e045dcaa5 85 * @param sda SDA pin
zochmen 0:9f7e045dcaa5 86 * @param sdl SCL pin
zochmen 0:9f7e045dcaa5 87 * @param addr addr of the I2C peripheral
zochmen 0:9f7e045dcaa5 88 */
zochmen 0:9f7e045dcaa5 89 MAG3110(PinName sda, PinName scl);
zochmen 0:9f7e045dcaa5 90 /**
zochmen 0:9f7e045dcaa5 91 * Debug version of constructor
zochmen 0:9f7e045dcaa5 92 * @param sda SDA pin
zochmen 0:9f7e045dcaa5 93 * @param sdl SCL pin
zochmen 0:9f7e045dcaa5 94 * @param addr Address of the I2C peripheral
zochmen 0:9f7e045dcaa5 95 * @param pc Serial object to output debug messages
zochmen 0:9f7e045dcaa5 96 */
zochmen 0:9f7e045dcaa5 97 MAG3110(PinName sda, PinName scl, Serial *pc); //pass serial for debug
zochmen 0:9f7e045dcaa5 98 /**
zochmen 0:9f7e045dcaa5 99 * Setup the Magnetometer
zochmen 0:9f7e045dcaa5 100 *
zochmen 0:9f7e045dcaa5 101 */
zochmen 0:9f7e045dcaa5 102 void begin();
zochmen 0:9f7e045dcaa5 103 /**
zochmen 0:9f7e045dcaa5 104 * Read a register, return its value as int
zochmen 0:9f7e045dcaa5 105 * @param regAddr The address to read
zochmen 0:9f7e045dcaa5 106 * @return value in register
zochmen 0:9f7e045dcaa5 107 */
zochmen 0:9f7e045dcaa5 108 int readReg(char regAddr);
zochmen 0:9f7e045dcaa5 109 /**
zochmen 0:9f7e045dcaa5 110 * Read a value from a pair of registers, return as int
zochmen 0:9f7e045dcaa5 111 * @param regAddr The address to read
zochmen 0:9f7e045dcaa5 112 * @return Value from 2 consecutive registers
zochmen 0:9f7e045dcaa5 113 */
zochmen 0:9f7e045dcaa5 114 int readVal(char regAddr);
zochmen 0:9f7e045dcaa5 115 /**
zochmen 0:9f7e045dcaa5 116 * Calculate the heading
zochmen 0:9f7e045dcaa5 117 * @return heading in degrees
zochmen 0:9f7e045dcaa5 118 */
zochmen 0:9f7e045dcaa5 119 float getHeading();
zochmen 0:9f7e045dcaa5 120 /**
zochmen 0:9f7e045dcaa5 121 * Perform a read on the X, Y and Z values.
zochmen 0:9f7e045dcaa5 122 * @param xVal Pointer to X value
zochmen 0:9f7e045dcaa5 123 * @param yVal Pointer to Y value
zochmen 0:9f7e045dcaa5 124 * @param zVal Pointer to Z value
zochmen 0:9f7e045dcaa5 125 */
zochmen 0:9f7e045dcaa5 126 void getValues(int *xVal, int *yVal, int *zVal);
zochmen 0:9f7e045dcaa5 127 /**
zochmen 0:9f7e045dcaa5 128 * Set the calibration parameters if required.
zochmen 0:9f7e045dcaa5 129 * @param minX Minimum value for X range
zochmen 0:9f7e045dcaa5 130 * @param maxX Maximum value for X range
zochmen 0:9f7e045dcaa5 131 * @param minY Minimum value for Y range
zochmen 0:9f7e045dcaa5 132 * @param maxY maximum value for Y range
zochmen 0:9f7e045dcaa5 133 */
zochmen 0:9f7e045dcaa5 134 void setCalibration(int minX, int maxX, int minY, int maxY);
zochmen 0:9f7e045dcaa5 135
zochmen 0:9f7e045dcaa5 136 private:
zochmen 0:9f7e045dcaa5 137 I2C _i2c;
zochmen 0:9f7e045dcaa5 138 int _i2c_address;
zochmen 0:9f7e045dcaa5 139 Serial *_pc;
zochmen 0:9f7e045dcaa5 140 bool _debug;
zochmen 0:9f7e045dcaa5 141 int _avgX, _avgY;
zochmen 0:9f7e045dcaa5 142
zochmen 0:9f7e045dcaa5 143 };
zochmen 0:9f7e045dcaa5 144 #endif