Max Houghton
/
MagTrix
MagTrix Class
MagTrix.cpp@0:fb19c8f7ca8d, 2018-03-01 (annotated)
- 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?
User | Revision | Line number | New 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 | } |