Very simple library for the FXOS8700 combined magnetometer and accelerometer
FXOS8700.cpp@2:24e7cbc80327, 2019-01-29 (annotated)
- Committer:
- jhd25
- Date:
- Tue Jan 29 13:00:39 2019 +0000
- Revision:
- 2:24e7cbc80327
- Parent:
- 1:c0795224b157
Added reading calibration from USB drive
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jhd25 | 0:41abd50a2ad1 | 1 | #include "FXOS8700.h" |
jhd25 | 0:41abd50a2ad1 | 2 | |
jhd25 | 0:41abd50a2ad1 | 3 | FXOS8700::FXOS8700 (PinName sda, PinName scl, int chip_address) : i2c(sda, scl) |
jhd25 | 0:41abd50a2ad1 | 4 | { |
jhd25 | 0:41abd50a2ad1 | 5 | this->i2c_address=chip_address; |
jhd25 | 0:41abd50a2ad1 | 6 | char write_data[2]; |
jhd25 | 2:24e7cbc80327 | 7 | bool err=false; |
jhd25 | 0:41abd50a2ad1 | 8 | write_data[0]=FXOS8700CQ_CTRL_REG1; |
jhd25 | 0:41abd50a2ad1 | 9 | write_data[1]=0x00; |
jhd25 | 1:c0795224b157 | 10 | err=err || i2c.write( i2c_address <<1,write_data,2); |
jhd25 | 0:41abd50a2ad1 | 11 | write_data[0]=FXOS8700CQ_M_CTRL_REG1; |
jhd25 | 0:41abd50a2ad1 | 12 | write_data[1]=0x1F; |
jhd25 | 1:c0795224b157 | 13 | err=err || i2c.write( i2c_address <<1,write_data,2); |
jhd25 | 0:41abd50a2ad1 | 14 | write_data[0]=FXOS8700CQ_M_CTRL_REG2; |
jhd25 | 0:41abd50a2ad1 | 15 | write_data[1]=0x20; |
jhd25 | 1:c0795224b157 | 16 | err=err || i2c.write( i2c_address <<1,write_data,2); |
jhd25 | 0:41abd50a2ad1 | 17 | write_data[0]=FXOS8700CQ_XYZ_DATA_CFG; |
jhd25 | 0:41abd50a2ad1 | 18 | write_data[1]=0x01; |
jhd25 | 1:c0795224b157 | 19 | err=err || i2c.write( i2c_address <<1,write_data,2); |
jhd25 | 0:41abd50a2ad1 | 20 | write_data[0]=FXOS8700CQ_CTRL_REG1; |
jhd25 | 0:41abd50a2ad1 | 21 | write_data[1]=0x0D; |
jhd25 | 1:c0795224b157 | 22 | err=err || i2c.write( i2c_address <<1,write_data,2); |
jhd25 | 1:c0795224b157 | 23 | this->i2c_error=err; |
jhd25 | 0:41abd50a2ad1 | 24 | } |
jhd25 | 0:41abd50a2ad1 | 25 | |
jhd25 | 0:41abd50a2ad1 | 26 | |
jhd25 | 0:41abd50a2ad1 | 27 | |
jhd25 | 0:41abd50a2ad1 | 28 | FXOS8700::~FXOS8700() |
jhd25 | 0:41abd50a2ad1 | 29 | { |
jhd25 | 0:41abd50a2ad1 | 30 | |
jhd25 | 0:41abd50a2ad1 | 31 | } |
jhd25 | 0:41abd50a2ad1 | 32 | |
jhd25 | 0:41abd50a2ad1 | 33 | FXOS8700_data FXOS8700::read() |
jhd25 | 0:41abd50a2ad1 | 34 | { |
jhd25 | 1:c0795224b157 | 35 | char read_data[14]={0}; |
jhd25 | 1:c0795224b157 | 36 | char write_data[8]={0}; |
jhd25 | 0:41abd50a2ad1 | 37 | write_data[0]=FXOS8700CQ_STATUS; |
jhd25 | 0:41abd50a2ad1 | 38 | i2c.write( i2c_address <<1,write_data,1,1); |
jhd25 | 0:41abd50a2ad1 | 39 | i2c.read( i2c_address <<1,read_data,13); |
jhd25 | 0:41abd50a2ad1 | 40 | readdata.x = (int16_t)(((read_data[1] << 8) | read_data[2]))>> 2; |
jhd25 | 0:41abd50a2ad1 | 41 | readdata.y = (int16_t)(((read_data[3] << 8) | read_data[4]))>> 2; |
jhd25 | 0:41abd50a2ad1 | 42 | readdata.z = (int16_t)(((read_data[5] << 8) | read_data[6]))>> 2; |
jhd25 | 0:41abd50a2ad1 | 43 | readdata.mx = (read_data[7] << 8) | read_data[8]; |
jhd25 | 0:41abd50a2ad1 | 44 | readdata.my = (read_data[9] << 8) | read_data[10]; |
jhd25 | 0:41abd50a2ad1 | 45 | readdata.mz = (read_data[11] << 8) | read_data[12]; |
jhd25 | 0:41abd50a2ad1 | 46 | return (readdata); |
jhd25 | 0:41abd50a2ad1 | 47 | |
jhd25 | 0:41abd50a2ad1 | 48 | } |