Adafruit 9DOF - LSM303DLHC

Fork of LSM303DLHC by Julio Fajardo

Committer:
afmiee
Date:
Thu Jul 14 20:23:10 2016 +0000
Revision:
1:cd027bdb4892
Parent:
0:ffed7ef0b248
First Revision of 9DOF with nRF51, Adafruit 9DOF and sparkfun microSD shield.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
julioefajardo 0:ffed7ef0b248 1 #include "mbed.h"
julioefajardo 0:ffed7ef0b248 2 #include "LSM303DLHC.h"
julioefajardo 0:ffed7ef0b248 3 #include "stdio.h"
julioefajardo 0:ffed7ef0b248 4
julioefajardo 0:ffed7ef0b248 5 #define MAG_ADDRESS 0x3C
julioefajardo 0:ffed7ef0b248 6 #define ACC_ADDRESS 0x32
julioefajardo 0:ffed7ef0b248 7
julioefajardo 0:ffed7ef0b248 8
julioefajardo 0:ffed7ef0b248 9 LSM303DLHC::LSM303DLHC(PinName sda, PinName scl): _device(sda, scl)
julioefajardo 0:ffed7ef0b248 10 {
julioefajardo 0:ffed7ef0b248 11 _device.frequency(400000);
julioefajardo 0:ffed7ef0b248 12 // init();
julioefajardo 0:ffed7ef0b248 13 }
julioefajardo 0:ffed7ef0b248 14
julioefajardo 0:ffed7ef0b248 15 void LSM303DLHC::init()
julioefajardo 0:ffed7ef0b248 16 {
julioefajardo 0:ffed7ef0b248 17 // init mag
julioefajardo 0:ffed7ef0b248 18 // continuous conversion mode
julioefajardo 0:ffed7ef0b248 19 _data[0] = MR_REG_M;
julioefajardo 0:ffed7ef0b248 20 _data[1] = 0x00;
julioefajardo 0:ffed7ef0b248 21 _device.write(MAG_ADDRESS, _data, 2);
julioefajardo 0:ffed7ef0b248 22 // data rate 75hz
julioefajardo 0:ffed7ef0b248 23 _data[0] = CRA_REG_M;
julioefajardo 0:ffed7ef0b248 24 _data[1] = 0x18; // 0b00011000
julioefajardo 0:ffed7ef0b248 25 _device.write(MAG_ADDRESS, _data, 2);
julioefajardo 0:ffed7ef0b248 26 // init acc
julioefajardo 0:ffed7ef0b248 27 // data rate 100hz
julioefajardo 0:ffed7ef0b248 28 _data[0] = CTRL_REG1_A;
julioefajardo 0:ffed7ef0b248 29 _data[1] = 0x2F; // 0b00101111
julioefajardo 0:ffed7ef0b248 30 _device.write(ACC_ADDRESS, _data, 2);
julioefajardo 0:ffed7ef0b248 31 }
afmiee 1:cd027bdb4892 32
julioefajardo 0:ffed7ef0b248 33
julioefajardo 0:ffed7ef0b248 34 void LSM303DLHC::read(int a[3], int m[3])
julioefajardo 0:ffed7ef0b248 35 {
julioefajardo 0:ffed7ef0b248 36 readAcc(a);
julioefajardo 0:ffed7ef0b248 37 readMag(m);
julioefajardo 0:ffed7ef0b248 38 }
julioefajardo 0:ffed7ef0b248 39
julioefajardo 0:ffed7ef0b248 40 void LSM303DLHC::readAcc(int a[3])
julioefajardo 0:ffed7ef0b248 41 {
julioefajardo 0:ffed7ef0b248 42 _data[0] = OUT_X_L_A | (1<<7);
julioefajardo 0:ffed7ef0b248 43 _device.write(ACC_ADDRESS, _data, 1);
julioefajardo 0:ffed7ef0b248 44 _device.read(ACC_ADDRESS, _data, 6);
julioefajardo 0:ffed7ef0b248 45
julioefajardo 0:ffed7ef0b248 46 // 12-bit values
julioefajardo 0:ffed7ef0b248 47 a[0] = (short)(_data[1]<<8 | _data[0]) >> 4;
julioefajardo 0:ffed7ef0b248 48 a[1] = (short)(_data[3]<<8 | _data[2]) >> 4;
julioefajardo 0:ffed7ef0b248 49 a[2] = (short)(_data[5]<<8 | _data[4]) >> 4;
julioefajardo 0:ffed7ef0b248 50 }
julioefajardo 0:ffed7ef0b248 51
julioefajardo 0:ffed7ef0b248 52 void LSM303DLHC::readMag(int m[3])
julioefajardo 0:ffed7ef0b248 53 {
julioefajardo 0:ffed7ef0b248 54 _data[0] = OUT_X_H_M;
julioefajardo 0:ffed7ef0b248 55 _device.write(MAG_ADDRESS, _data, 1);
julioefajardo 0:ffed7ef0b248 56 _device.read(MAG_ADDRESS, _data, 6);
julioefajardo 0:ffed7ef0b248 57
julioefajardo 0:ffed7ef0b248 58 m[0] = (short) (_data[0]<<8 | _data[1]); // X
julioefajardo 0:ffed7ef0b248 59 m[1] = (short) (_data[4]<<8 | _data[5]); // Y
julioefajardo 0:ffed7ef0b248 60 m[2] = (short) (_data[2]<<8 | _data[3]); // Z
julioefajardo 0:ffed7ef0b248 61 }
julioefajardo 0:ffed7ef0b248 62
julioefajardo 0:ffed7ef0b248 63 void LSM303DLHC::setScale(float x, float y, float z)
julioefajardo 0:ffed7ef0b248 64 {
julioefajardo 0:ffed7ef0b248 65 scale[0] = x;
julioefajardo 0:ffed7ef0b248 66 scale[1] = y;
julioefajardo 0:ffed7ef0b248 67 scale[2] = z;
julioefajardo 0:ffed7ef0b248 68 }
julioefajardo 0:ffed7ef0b248 69
julioefajardo 0:ffed7ef0b248 70 void LSM303DLHC::setOffset(float x, float y, float z)
julioefajardo 0:ffed7ef0b248 71 {
julioefajardo 0:ffed7ef0b248 72 offset[0] = x;
julioefajardo 0:ffed7ef0b248 73 offset[1] = y;
julioefajardo 0:ffed7ef0b248 74 offset[2] = z;
julioefajardo 0:ffed7ef0b248 75 }