MagTrix Class

Dependencies:   mbed

Committer:
el15mh
Date:
Thu Mar 01 11:35:10 2018 +0000
Revision:
0:fb19c8f7ca8d
Class for developing with the MagTrix system

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el15mh 0:fb19c8f7ca8d 1 #include "MagTrix.h"
el15mh 0:fb19c8f7ca8d 2
el15mh 0:fb19c8f7ca8d 3 MagTrix::MagTrix(I2C * i2c) :
el15mh 0:fb19c8f7ca8d 4 _i2c(i2c),
el15mh 0:fb19c8f7ca8d 5 _device1(0x19, i2c),
el15mh 0:fb19c8f7ca8d 6 _device2(0x1B, i2c),
el15mh 0:fb19c8f7ca8d 7 _device3(0x1D, i2c),
el15mh 0:fb19c8f7ca8d 8 _device4(0x1F, i2c)
el15mh 0:fb19c8f7ca8d 9 {
el15mh 0:fb19c8f7ca8d 10
el15mh 0:fb19c8f7ca8d 11 }
el15mh 0:fb19c8f7ca8d 12
el15mh 0:fb19c8f7ca8d 13 void MagTrix::init(char * receiveBuffer)
el15mh 0:fb19c8f7ca8d 14 {
el15mh 0:fb19c8f7ca8d 15 BusOut mux(D8, D9);
el15mh 0:fb19c8f7ca8d 16
el15mh 0:fb19c8f7ca8d 17 mux = 0x00;
el15mh 0:fb19c8f7ca8d 18
el15mh 0:fb19c8f7ca8d 19 _device1.SB(receiveBuffer, 0xF, 0);
el15mh 0:fb19c8f7ca8d 20 _device2.SB(receiveBuffer, 0xF, 0);
el15mh 0:fb19c8f7ca8d 21 _device3.SB(receiveBuffer, 0xF, 0);
el15mh 0:fb19c8f7ca8d 22 _device4.SB(receiveBuffer, 0xF, 0);
el15mh 0:fb19c8f7ca8d 23
el15mh 0:fb19c8f7ca8d 24 mux = 0x01;
el15mh 0:fb19c8f7ca8d 25
el15mh 0:fb19c8f7ca8d 26 _device1.SB(receiveBuffer, 0xF, 0);
el15mh 0:fb19c8f7ca8d 27 _device2.SB(receiveBuffer, 0xF, 0);
el15mh 0:fb19c8f7ca8d 28 _device3.SB(receiveBuffer, 0xF, 0);
el15mh 0:fb19c8f7ca8d 29 _device4.SB(receiveBuffer, 0xF, 0);
el15mh 0:fb19c8f7ca8d 30
el15mh 0:fb19c8f7ca8d 31 mux = 0x02;
el15mh 0:fb19c8f7ca8d 32
el15mh 0:fb19c8f7ca8d 33 _device1.SB(receiveBuffer, 0xF, 0);
el15mh 0:fb19c8f7ca8d 34 _device2.SB(receiveBuffer, 0xF, 0);
el15mh 0:fb19c8f7ca8d 35 _device3.SB(receiveBuffer, 0xF, 0);
el15mh 0:fb19c8f7ca8d 36 _device4.SB(receiveBuffer, 0xF, 0);
el15mh 0:fb19c8f7ca8d 37
el15mh 0:fb19c8f7ca8d 38 mux = 0x03;
el15mh 0:fb19c8f7ca8d 39
el15mh 0:fb19c8f7ca8d 40 _device1.SB(receiveBuffer, 0xF, 0);
el15mh 0:fb19c8f7ca8d 41 _device2.SB(receiveBuffer, 0xF, 0);
el15mh 0:fb19c8f7ca8d 42 _device3.SB(receiveBuffer, 0xF, 0);
el15mh 0:fb19c8f7ca8d 43 _device4.SB(receiveBuffer, 0xF, 0);
el15mh 0:fb19c8f7ca8d 44 }
el15mh 0:fb19c8f7ca8d 45
el15mh 0:fb19c8f7ca8d 46 void MagTrix::read(char device, char * receiveBuffer, uint16_t * dataBuffer)
el15mh 0:fb19c8f7ca8d 47 {
el15mh 0:fb19c8f7ca8d 48 BusOut mux(D8,D9);
el15mh 0:fb19c8f7ca8d 49
el15mh 0:fb19c8f7ca8d 50 switch (device) {
el15mh 0:fb19c8f7ca8d 51
el15mh 0:fb19c8f7ca8d 52 case (0x00) :
el15mh 0:fb19c8f7ca8d 53 mux = 0x0;
el15mh 0:fb19c8f7ca8d 54 _device1.RM(receiveBuffer, 0xF, 0);
el15mh 0:fb19c8f7ca8d 55 break;
el15mh 0:fb19c8f7ca8d 56 case (0x01) :
el15mh 0:fb19c8f7ca8d 57 mux = 0x0;
el15mh 0:fb19c8f7ca8d 58 _device2.RM(receiveBuffer, 0xF, 0);
el15mh 0:fb19c8f7ca8d 59 break;
el15mh 0:fb19c8f7ca8d 60 case (0x02) :
el15mh 0:fb19c8f7ca8d 61 mux = 0x0;
el15mh 0:fb19c8f7ca8d 62 _device3.RM(receiveBuffer, 0xF, 0);
el15mh 0:fb19c8f7ca8d 63 break;
el15mh 0:fb19c8f7ca8d 64 case (0x03) :
el15mh 0:fb19c8f7ca8d 65 mux = 0x0;
el15mh 0:fb19c8f7ca8d 66 _device4.RM(receiveBuffer, 0xF, 0);
el15mh 0:fb19c8f7ca8d 67 break;
el15mh 0:fb19c8f7ca8d 68 case (0x04) :
el15mh 0:fb19c8f7ca8d 69 mux = 0x1;
el15mh 0:fb19c8f7ca8d 70 _device1.RM(receiveBuffer, 0xF, 0);
el15mh 0:fb19c8f7ca8d 71 break;
el15mh 0:fb19c8f7ca8d 72 case (0x05) :
el15mh 0:fb19c8f7ca8d 73 mux = 0x1;
el15mh 0:fb19c8f7ca8d 74 _device2.RM(receiveBuffer, 0xF, 0);
el15mh 0:fb19c8f7ca8d 75 break;
el15mh 0:fb19c8f7ca8d 76 case (0x06) :
el15mh 0:fb19c8f7ca8d 77 mux = 0x1;
el15mh 0:fb19c8f7ca8d 78 _device3.RM(receiveBuffer, 0xF, 0);
el15mh 0:fb19c8f7ca8d 79 break;
el15mh 0:fb19c8f7ca8d 80 case (0x07) :
el15mh 0:fb19c8f7ca8d 81 mux = 0x1;
el15mh 0:fb19c8f7ca8d 82 _device4.RM(receiveBuffer, 0xF, 0);
el15mh 0:fb19c8f7ca8d 83 break;
el15mh 0:fb19c8f7ca8d 84 case (0x08) :
el15mh 0:fb19c8f7ca8d 85 mux = 0x2;
el15mh 0:fb19c8f7ca8d 86 _device1.RM(receiveBuffer, 0xF, 0);
el15mh 0:fb19c8f7ca8d 87 break;
el15mh 0:fb19c8f7ca8d 88 case (0x09) :
el15mh 0:fb19c8f7ca8d 89 mux = 0x2;
el15mh 0:fb19c8f7ca8d 90 _device2.RM(receiveBuffer, 0xF, 0);
el15mh 0:fb19c8f7ca8d 91 break;
el15mh 0:fb19c8f7ca8d 92 case (0x0A) :
el15mh 0:fb19c8f7ca8d 93 mux = 0x2;
el15mh 0:fb19c8f7ca8d 94 _device3.RM(receiveBuffer, 0xF, 0);
el15mh 0:fb19c8f7ca8d 95 break;
el15mh 0:fb19c8f7ca8d 96 case (0x0B) :
el15mh 0:fb19c8f7ca8d 97 mux = 0x2;
el15mh 0:fb19c8f7ca8d 98 _device4.RM(receiveBuffer, 0xF, 0);
el15mh 0:fb19c8f7ca8d 99 break;
el15mh 0:fb19c8f7ca8d 100 case (0x0C) :
el15mh 0:fb19c8f7ca8d 101 mux = 0x3;
el15mh 0:fb19c8f7ca8d 102 _device1.RM(receiveBuffer, 0xF, 0);
el15mh 0:fb19c8f7ca8d 103 break;
el15mh 0:fb19c8f7ca8d 104 case (0x0D) :
el15mh 0:fb19c8f7ca8d 105 mux = 0x3;
el15mh 0:fb19c8f7ca8d 106 _device2.RM(receiveBuffer, 0xF, 0);
el15mh 0:fb19c8f7ca8d 107 break;
el15mh 0:fb19c8f7ca8d 108 case (0x0E) :
el15mh 0:fb19c8f7ca8d 109 mux = 0x3;
el15mh 0:fb19c8f7ca8d 110 _device3.RM(receiveBuffer, 0xF, 0);
el15mh 0:fb19c8f7ca8d 111 break;
el15mh 0:fb19c8f7ca8d 112 case (0x0F) :
el15mh 0:fb19c8f7ca8d 113 mux = 0x3;
el15mh 0:fb19c8f7ca8d 114 _device4.RM(receiveBuffer, 0xF, 0);
el15mh 0:fb19c8f7ca8d 115 break;
el15mh 0:fb19c8f7ca8d 116 default:
el15mh 0:fb19c8f7ca8d 117 break;
el15mh 0:fb19c8f7ca8d 118 }
el15mh 0:fb19c8f7ca8d 119
el15mh 0:fb19c8f7ca8d 120 // Combine MSB and LSB to aquire raw decimal values
el15mh 0:fb19c8f7ca8d 121 int16_t xM = receiveBuffer[3] * 256 + receiveBuffer[4];
el15mh 0:fb19c8f7ca8d 122 int16_t yM = receiveBuffer[5] * 256 + receiveBuffer[6];
el15mh 0:fb19c8f7ca8d 123 int16_t zM = receiveBuffer[7] * 256 + receiveBuffer[8];
el15mh 0:fb19c8f7ca8d 124
el15mh 0:fb19c8f7ca8d 125 // Gain values of 0
el15mh 0:fb19c8f7ca8d 126 static int16_t xC = 0;
el15mh 0:fb19c8f7ca8d 127 static int16_t yC = 20;
el15mh 0:fb19c8f7ca8d 128 static int16_t zC = 400;
el15mh 0:fb19c8f7ca8d 129
el15mh 0:fb19c8f7ca8d 130 dataBuffer[0] = xM * 0.00805 - xC;
el15mh 0:fb19c8f7ca8d 131 dataBuffer[1] = yM * 0.00805 - yC;
el15mh 0:fb19c8f7ca8d 132 dataBuffer[2] = zM * 0.02936 - zC;
el15mh 0:fb19c8f7ca8d 133 }