Code to get all the data through serial port
Dependents: payload_sensor payload_sensor
FXAS21002.cpp@0:2741e9e34e8a, 2016-07-22 (annotated)
- Committer:
- Rhyme
- Date:
- Fri Jul 22 08:31:32 2016 +0000
- Revision:
- 0:2741e9e34e8a
- Child:
- 1:8461f7fe0a7f
First commit before publishing
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Rhyme | 0:2741e9e34e8a | 1 | #include "mbed.h" |
Rhyme | 0:2741e9e34e8a | 2 | #include "FXAS21002.h" |
Rhyme | 0:2741e9e34e8a | 3 | |
Rhyme | 0:2741e9e34e8a | 4 | /* Register Address definitions */ |
Rhyme | 0:2741e9e34e8a | 5 | #define REG_STATUS 0x00 |
Rhyme | 0:2741e9e34e8a | 6 | #define REG_OUT_X_MSB 0x01 |
Rhyme | 0:2741e9e34e8a | 7 | #define REG_OUT_X_LSB 0x02 |
Rhyme | 0:2741e9e34e8a | 8 | #define REG_OUT_Y_MSB 0x03 |
Rhyme | 0:2741e9e34e8a | 9 | #define REG_OUT_Y_LSB 0x04 |
Rhyme | 0:2741e9e34e8a | 10 | #define REG_OUT_Z_MSB 0x05 |
Rhyme | 0:2741e9e34e8a | 11 | #define REG_OUT_Z_LSB 0x06 |
Rhyme | 0:2741e9e34e8a | 12 | #define REG_DR_STATUS 0x07 |
Rhyme | 0:2741e9e34e8a | 13 | #define REG_F_STATUS 0x08 |
Rhyme | 0:2741e9e34e8a | 14 | #define REG_F_SETUP 0x09 |
Rhyme | 0:2741e9e34e8a | 15 | #define REG_F_EVENT 0x0A |
Rhyme | 0:2741e9e34e8a | 16 | #define REG_INT_SRC_FLAG 0x0B |
Rhyme | 0:2741e9e34e8a | 17 | #define REG_WHO_AM_I 0x0C |
Rhyme | 0:2741e9e34e8a | 18 | #define REG_CTRL_REG0 0x0D |
Rhyme | 0:2741e9e34e8a | 19 | #define REG_RT_CFG 0x0E |
Rhyme | 0:2741e9e34e8a | 20 | #define REG_RT_SRC 0x0F |
Rhyme | 0:2741e9e34e8a | 21 | #define REG_RT_THS 0x10 |
Rhyme | 0:2741e9e34e8a | 22 | #define REG_RT_COUNT 0x11 |
Rhyme | 0:2741e9e34e8a | 23 | #define REG_TEMP 0x12 |
Rhyme | 0:2741e9e34e8a | 24 | #define REG_CTRL_REG1 0x13 |
Rhyme | 0:2741e9e34e8a | 25 | #define REG_CTRL_REG2 0x14 |
Rhyme | 0:2741e9e34e8a | 26 | #define REG_CTRL_REG3 0x15 |
Rhyme | 0:2741e9e34e8a | 27 | |
Rhyme | 0:2741e9e34e8a | 28 | |
Rhyme | 0:2741e9e34e8a | 29 | FXAS21002::FXAS21002(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr<<1) { |
Rhyme | 0:2741e9e34e8a | 30 | // activate the peripheral |
Rhyme | 0:2741e9e34e8a | 31 | } |
Rhyme | 0:2741e9e34e8a | 32 | |
Rhyme | 0:2741e9e34e8a | 33 | FXAS21002::~FXAS21002() { } |
Rhyme | 0:2741e9e34e8a | 34 | |
Rhyme | 0:2741e9e34e8a | 35 | uint8_t FXAS21002::getStatus(void) |
Rhyme | 0:2741e9e34e8a | 36 | { |
Rhyme | 0:2741e9e34e8a | 37 | uint8_t status ; |
Rhyme | 0:2741e9e34e8a | 38 | readRegs(REG_STATUS, &status, 1) ; |
Rhyme | 0:2741e9e34e8a | 39 | return( status ) ; |
Rhyme | 0:2741e9e34e8a | 40 | } |
Rhyme | 0:2741e9e34e8a | 41 | |
Rhyme | 0:2741e9e34e8a | 42 | int16_t FXAS21002::getX(void) |
Rhyme | 0:2741e9e34e8a | 43 | { |
Rhyme | 0:2741e9e34e8a | 44 | uint8_t data[2] ; |
Rhyme | 0:2741e9e34e8a | 45 | int16_t value ; |
Rhyme | 0:2741e9e34e8a | 46 | readRegs(REG_OUT_X_MSB, &data[0], 1) ; |
Rhyme | 0:2741e9e34e8a | 47 | readRegs(REG_OUT_X_LSB, &data[1], 1) ; |
Rhyme | 0:2741e9e34e8a | 48 | value = (data[0] << 8) | data[1] ; |
Rhyme | 0:2741e9e34e8a | 49 | return(value) ; |
Rhyme | 0:2741e9e34e8a | 50 | } |
Rhyme | 0:2741e9e34e8a | 51 | |
Rhyme | 0:2741e9e34e8a | 52 | int16_t FXAS21002::getY(void) |
Rhyme | 0:2741e9e34e8a | 53 | { |
Rhyme | 0:2741e9e34e8a | 54 | uint8_t data[2] ; |
Rhyme | 0:2741e9e34e8a | 55 | int16_t value ; |
Rhyme | 0:2741e9e34e8a | 56 | readRegs(REG_OUT_Y_MSB, &data[0], 1) ; |
Rhyme | 0:2741e9e34e8a | 57 | readRegs(REG_OUT_Y_LSB, &data[1], 1) ; |
Rhyme | 0:2741e9e34e8a | 58 | value = (data[0] << 8) | data[1] ; |
Rhyme | 0:2741e9e34e8a | 59 | return(value) ; |
Rhyme | 0:2741e9e34e8a | 60 | } |
Rhyme | 0:2741e9e34e8a | 61 | |
Rhyme | 0:2741e9e34e8a | 62 | int16_t FXAS21002::getZ(void) |
Rhyme | 0:2741e9e34e8a | 63 | { |
Rhyme | 0:2741e9e34e8a | 64 | uint8_t data[2] ; |
Rhyme | 0:2741e9e34e8a | 65 | int16_t value ; |
Rhyme | 0:2741e9e34e8a | 66 | readRegs(REG_OUT_Z_MSB, &data[0], 1) ; |
Rhyme | 0:2741e9e34e8a | 67 | readRegs(REG_OUT_Z_LSB, &data[1], 1) ; |
Rhyme | 0:2741e9e34e8a | 68 | value = (data[0] << 8) | data[1] ; |
Rhyme | 0:2741e9e34e8a | 69 | return(value) ; |
Rhyme | 0:2741e9e34e8a | 70 | } |
Rhyme | 0:2741e9e34e8a | 71 | |
Rhyme | 0:2741e9e34e8a | 72 | void selftest(bool mode) |
Rhyme | 0:2741e9e34e8a | 73 | { |
Rhyme | 0:2741e9e34e8a | 74 | uint8_t value ; |
Rhyme | 0:2741e9e34e8a | 75 | value = getCTRL1() ; |
Rhyme | 0:2741e9e34e8a | 76 | if (mode) { |
Rhyme | 0:2741e9e34e8a | 77 | value |= 0x10 ; |
Rhyme | 0:2741e9e34e8a | 78 | } else { |
Rhyme | 0:2741e9e34e8a | 79 | value ^= 0x10 ; |
Rhyme | 0:2741e9e34e8a | 80 | } |
Rhyme | 0:2741e9e34e8a | 81 | setCTRL1(value) ; |
Rhyme | 0:2741e9e34e8a | 82 | } |
Rhyme | 0:2741e9e34e8a | 83 | |
Rhyme | 0:2741e9e34e8a | 84 | void FXAS21002::activate(bool mode) |
Rhyme | 0:2741e9e34e8a | 85 | { |
Rhyme | 0:2741e9e34e8a | 86 | uint8_t value ; |
Rhyme | 0:2741e9e34e8a | 87 | value = getCTRL1() ; |
Rhyme | 0:2741e9e34e8a | 88 | if (mode) { |
Rhyme | 0:2741e9e34e8a | 89 | value |= 0x02 ; |
Rhyme | 0:2741e9e34e8a | 90 | } else { |
Rhyme | 0:2741e9e34e8a | 91 | value ^= 0x02 ; |
Rhyme | 0:2741e9e34e8a | 92 | } |
Rhyme | 0:2741e9e34e8a | 93 | setCTRL1(value) ; |
Rhyme | 0:2741e9e34e8a | 94 | } |
Rhyme | 0:2741e9e34e8a | 95 | |
Rhyme | 0:2741e9e34e8a | 96 | void FXAS21002::ready(bool mode) |
Rhyme | 0:2741e9e34e8a | 97 | { |
Rhyme | 0:2741e9e34e8a | 98 | uint8_t value ; |
Rhyme | 0:2741e9e34e8a | 99 | value = getCTRL1() ; |
Rhyme | 0:2741e9e34e8a | 100 | if (mode) { |
Rhyme | 0:2741e9e34e8a | 101 | value |= 0x01 ; |
Rhyme | 0:2741e9e34e8a | 102 | } else { |
Rhyme | 0:2741e9e34e8a | 103 | value ^= 0x01 ; |
Rhyme | 0:2741e9e34e8a | 104 | } |
Rhyme | 0:2741e9e34e8a | 105 | setCTRL1(value) ; |
Rhyme | 0:2741e9e34e8a | 106 | } |
Rhyme | 0:2741e9e34e8a | 107 | |
Rhyme | 0:2741e9e34e8a | 108 | uint8_t FXAS21002::getCTRL1(void) |
Rhyme | 0:2741e9e34e8a | 109 | { |
Rhyme | 0:2741e9e34e8a | 110 | uint8_t value ; |
Rhyme | 0:2741e9e34e8a | 111 | readRegs(REG_CTRL_REG1, &value, 1) ; |
Rhyme | 0:2741e9e34e8a | 112 | return(value) ; |
Rhyme | 0:2741e9e34e8a | 113 | } |
Rhyme | 0:2741e9e34e8a | 114 | |
Rhyme | 0:2741e9e34e8a | 115 | void FXAS21002::setCTRL1(uint8_t value) |
Rhyme | 0:2741e9e34e8a | 116 | { |
Rhyme | 0:2741e9e34e8a | 117 | uint8_t data[2] ; |
Rhyme | 0:2741e9e34e8a | 118 | data[0] = REG_CTRL_REG1 ; |
Rhyme | 0:2741e9e34e8a | 119 | data[1] = value ; |
Rhyme | 0:2741e9e34e8a | 120 | writeRegs(data, 2) ; |
Rhyme | 0:2741e9e34e8a | 121 | } |
Rhyme | 0:2741e9e34e8a | 122 | |
Rhyme | 0:2741e9e34e8a | 123 | uint8_t FXAS21002::getCTRL2(void) |
Rhyme | 0:2741e9e34e8a | 124 | { |
Rhyme | 0:2741e9e34e8a | 125 | uint8_t value ; |
Rhyme | 0:2741e9e34e8a | 126 | readRegs(REG_CTRL_REG2, &value, 1) ; |
Rhyme | 0:2741e9e34e8a | 127 | return(value) ; |
Rhyme | 0:2741e9e34e8a | 128 | } |
Rhyme | 0:2741e9e34e8a | 129 | |
Rhyme | 0:2741e9e34e8a | 130 | void FXAS21002::setCTRL2(uint8_t value) |
Rhyme | 0:2741e9e34e8a | 131 | { |
Rhyme | 0:2741e9e34e8a | 132 | uint8_t data[2] ; |
Rhyme | 0:2741e9e34e8a | 133 | data[0] = REG_CTRL_REG2 ; |
Rhyme | 0:2741e9e34e8a | 134 | data[1] = value ; |
Rhyme | 0:2741e9e34e8a | 135 | writeRegs(data, 2) ; |
Rhyme | 0:2741e9e34e8a | 136 | } |
Rhyme | 0:2741e9e34e8a | 137 | |
Rhyme | 0:2741e9e34e8a | 138 | uint8_t FXAS21002::getCTRL3(void) |
Rhyme | 0:2741e9e34e8a | 139 | { |
Rhyme | 0:2741e9e34e8a | 140 | uint8_t value ; |
Rhyme | 0:2741e9e34e8a | 141 | readRegs(REG_CTRL_REG3, &value, 1) ; |
Rhyme | 0:2741e9e34e8a | 142 | return(value) ; |
Rhyme | 0:2741e9e34e8a | 143 | } |
Rhyme | 0:2741e9e34e8a | 144 | |
Rhyme | 0:2741e9e34e8a | 145 | void FXAS21002::setCTRL3(uint8_t value) |
Rhyme | 0:2741e9e34e8a | 146 | { |
Rhyme | 0:2741e9e34e8a | 147 | uint8_t data[2] ; |
Rhyme | 0:2741e9e34e8a | 148 | data[0] = REG_CTRL_REG3 ; |
Rhyme | 0:2741e9e34e8a | 149 | data[1] = value ; |
Rhyme | 0:2741e9e34e8a | 150 | writeRegs(data, 2) ; |
Rhyme | 0:2741e9e34e8a | 151 | } |
Rhyme | 0:2741e9e34e8a | 152 | |
Rhyme | 0:2741e9e34e8a | 153 | |
Rhyme | 0:2741e9e34e8a | 154 | void FXAS21002::readRegs(int addr, uint8_t * data, int len) { |
Rhyme | 0:2741e9e34e8a | 155 | char t[1] = {addr}; |
Rhyme | 0:2741e9e34e8a | 156 | m_i2c.write(m_addr, t, 1, true); |
Rhyme | 0:2741e9e34e8a | 157 | m_i2c.read(m_addr, (char *)data, len); |
Rhyme | 0:2741e9e34e8a | 158 | } |
Rhyme | 0:2741e9e34e8a | 159 | |
Rhyme | 0:2741e9e34e8a | 160 | void FXAS21002::writeRegs(uint8_t * data, int len) { |
Rhyme | 0:2741e9e34e8a | 161 | m_i2c.write(m_addr, (char *)data, len); |
Rhyme | 0:2741e9e34e8a | 162 | } |