Adafruit 9DOF - LSM303DLHC
Fork of LSM303DLHC by
LSM303DLHC.cpp@1:cd027bdb4892, 2016-07-14 (annotated)
- 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?
User | Revision | Line number | New 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 | } |