Max Houghton
/
MagTrix
MagTrix Class
MagTrix.cpp
- Committer:
- el15mh
- Date:
- 2018-03-01
- Revision:
- 0:fb19c8f7ca8d
File content as of revision 0:fb19c8f7ca8d:
#include "MagTrix.h" MagTrix::MagTrix(I2C * i2c) : _i2c(i2c), _device1(0x19, i2c), _device2(0x1B, i2c), _device3(0x1D, i2c), _device4(0x1F, i2c) { } void MagTrix::init(char * receiveBuffer) { BusOut mux(D8, D9); mux = 0x00; _device1.SB(receiveBuffer, 0xF, 0); _device2.SB(receiveBuffer, 0xF, 0); _device3.SB(receiveBuffer, 0xF, 0); _device4.SB(receiveBuffer, 0xF, 0); mux = 0x01; _device1.SB(receiveBuffer, 0xF, 0); _device2.SB(receiveBuffer, 0xF, 0); _device3.SB(receiveBuffer, 0xF, 0); _device4.SB(receiveBuffer, 0xF, 0); mux = 0x02; _device1.SB(receiveBuffer, 0xF, 0); _device2.SB(receiveBuffer, 0xF, 0); _device3.SB(receiveBuffer, 0xF, 0); _device4.SB(receiveBuffer, 0xF, 0); mux = 0x03; _device1.SB(receiveBuffer, 0xF, 0); _device2.SB(receiveBuffer, 0xF, 0); _device3.SB(receiveBuffer, 0xF, 0); _device4.SB(receiveBuffer, 0xF, 0); } void MagTrix::read(char device, char * receiveBuffer, uint16_t * dataBuffer) { BusOut mux(D8,D9); switch (device) { case (0x00) : mux = 0x0; _device1.RM(receiveBuffer, 0xF, 0); break; case (0x01) : mux = 0x0; _device2.RM(receiveBuffer, 0xF, 0); break; case (0x02) : mux = 0x0; _device3.RM(receiveBuffer, 0xF, 0); break; case (0x03) : mux = 0x0; _device4.RM(receiveBuffer, 0xF, 0); break; case (0x04) : mux = 0x1; _device1.RM(receiveBuffer, 0xF, 0); break; case (0x05) : mux = 0x1; _device2.RM(receiveBuffer, 0xF, 0); break; case (0x06) : mux = 0x1; _device3.RM(receiveBuffer, 0xF, 0); break; case (0x07) : mux = 0x1; _device4.RM(receiveBuffer, 0xF, 0); break; case (0x08) : mux = 0x2; _device1.RM(receiveBuffer, 0xF, 0); break; case (0x09) : mux = 0x2; _device2.RM(receiveBuffer, 0xF, 0); break; case (0x0A) : mux = 0x2; _device3.RM(receiveBuffer, 0xF, 0); break; case (0x0B) : mux = 0x2; _device4.RM(receiveBuffer, 0xF, 0); break; case (0x0C) : mux = 0x3; _device1.RM(receiveBuffer, 0xF, 0); break; case (0x0D) : mux = 0x3; _device2.RM(receiveBuffer, 0xF, 0); break; case (0x0E) : mux = 0x3; _device3.RM(receiveBuffer, 0xF, 0); break; case (0x0F) : mux = 0x3; _device4.RM(receiveBuffer, 0xF, 0); break; default: break; } // Combine MSB and LSB to aquire raw decimal values int16_t xM = receiveBuffer[3] * 256 + receiveBuffer[4]; int16_t yM = receiveBuffer[5] * 256 + receiveBuffer[6]; int16_t zM = receiveBuffer[7] * 256 + receiveBuffer[8]; // Gain values of 0 static int16_t xC = 0; static int16_t yC = 20; static int16_t zC = 400; dataBuffer[0] = xM * 0.00805 - xC; dataBuffer[1] = yM * 0.00805 - yC; dataBuffer[2] = zM * 0.02936 - zC; }