Clément BENOIT / PYRN

Dependencies:   CAN HTTPClient MODSERIAL MyThings Pyrn3GModem Socket TinyGPS MyUSBHost lwip-sys lwip mbed-rtos mbed-src

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers LSM303DLH.h Source File

LSM303DLH.h

00001 #ifndef __LSM303DLH_H
00002 #define __LSM303DLH_H
00003 
00004 #include "mbed.h"
00005 
00006 // CONSTS
00007 
00008 #define WRITE_BUFF_MAX  16
00009 #define LSM303DH_ID     0x49
00010 
00011 // I2C Addresses (SAO -> 1)
00012 
00013 #define LSM303D_ADDR_R   0x3B
00014 #define LSM303D_ADDR_W  0x3A       
00015 
00016 // REGISTERS
00017 
00018 #define CTRL0       0x1F
00019 #define CTRL1       0x20
00020 #define CTRL2       0x21
00021 #define CTRL3       0x22
00022 #define CTRL4       0x23
00023 #define CTRL5       0x24
00024 #define CTRL6       0x25
00025 #define CTRL7       0x26
00026 
00027 #define WHO_AM_I    0x0F
00028 
00029 #define TEMP_OUT_L  0x05
00030 #define TEMP_OUT_H  0x06
00031 
00032 #define STATUS_M    0x07
00033 #define OUT_X_L_M   0x08
00034 #define OUT_X_H_M   0x09
00035 #define OUT_Y_L_M   0x0A
00036 #define OUT_Y_H_M   0x0B
00037 #define OUT_Z_L_M   0x0C
00038 #define OUT_Z_H_M   0x0D
00039 
00040 #define STATUS_A    0x27
00041 #define OUT_X_L_A   0x28
00042 #define OUT_X_H_A   0x29
00043 #define OUT_Y_L_A   0x2A
00044 #define OUT_Y_H_A   0x2B
00045 #define OUT_Z_L_A   0x2C
00046 #define OUT_Z_H_A   0x2D
00047 
00048 class LSM303DLH {
00049 private:
00050     float accLSB;
00051     float magLSB;
00052     
00053     I2C dev;
00054     uint8_t dataBuff[WRITE_BUFF_MAX];           // Who read more than WRITE_BUFF_MAX(16)?
00055     
00056     uint8_t devRead(const uint8_t reg, uint8_t *data, uint8_t size);
00057     uint8_t devReadSingle(const uint8_t reg, uint8_t byte);
00058     uint8_t devWrite(const uint8_t reg, uint8_t *data, uint8_t size);
00059     uint8_t devWriteSingle(const uint8_t reg, uint8_t byte);
00060 public:
00061     LSM303DLH(PinName sda = p28, PinName scl = p27); 
00062     void basicConfig(void);
00063     void readRawAcc(int16_t *x, int16_t *y, int16_t *z);
00064     void readRawMag(int16_t *x, int16_t *y, int16_t *z);
00065     void readAcc(float *x, float *y, float *z);
00066     void readMag(float *x, float *y, float *z);
00067 };
00068 
00069 #endif