Code to get all the data through serial port
Dependents: payload_sensor payload_sensor
FXAS21002.cpp
00001 #include "mbed.h" 00002 #include "FXAS21002.h" 00003 00004 /* Register Address definitions */ 00005 #define REG_STATUS 0x00 00006 #define REG_OUT_X_MSB 0x01 00007 #define REG_OUT_X_LSB 0x02 00008 #define REG_OUT_Y_MSB 0x03 00009 #define REG_OUT_Y_LSB 0x04 00010 #define REG_OUT_Z_MSB 0x05 00011 #define REG_OUT_Z_LSB 0x06 00012 #define REG_DR_STATUS 0x07 00013 #define REG_F_STATUS 0x08 00014 #define REG_F_SETUP 0x09 00015 #define REG_F_EVENT 0x0A 00016 #define REG_INT_SRC_FLAG 0x0B 00017 #define REG_WHO_AM_I 0x0C 00018 #define REG_CTRL_REG0 0x0D 00019 #define REG_RT_CFG 0x0E 00020 #define REG_RT_SRC 0x0F 00021 #define REG_RT_THS 0x10 00022 #define REG_RT_COUNT 0x11 00023 #define REG_TEMP 0x12 00024 #define REG_CTRL_REG1 0x13 00025 #define REG_CTRL_REG2 0x14 00026 #define REG_CTRL_REG3 0x15 00027 00028 00029 FXAS21002::FXAS21002(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr<<1) { 00030 // activate the peripheral 00031 FXAS21002::activate(1); 00032 FXAS21002::ready(1); 00033 } 00034 00035 FXAS21002::~FXAS21002() { } 00036 00037 uint8_t FXAS21002::getStatus(void) 00038 { 00039 uint8_t status ; 00040 readRegs(REG_STATUS, &status, 1) ; 00041 return( status ) ; 00042 } 00043 00044 int16_t FXAS21002::getX(void) 00045 { 00046 uint8_t data[2] ; 00047 int16_t value ; 00048 readRegs(REG_OUT_X_MSB, &data[0], 1) ; 00049 readRegs(REG_OUT_X_LSB, &data[1], 1) ; 00050 value = (data[0] << 8) | data[1] ; 00051 // printf("X: %d,%d, %d\t", data[0], data[1], value); 00052 return(value) ; 00053 } 00054 00055 int16_t FXAS21002::getY(void) 00056 { 00057 uint8_t data[2] ; 00058 int16_t value ; 00059 readRegs(REG_OUT_Y_MSB, &data[0], 1) ; 00060 readRegs(REG_OUT_Y_LSB, &data[1], 1) ; 00061 value = (data[0] << 8) | data[1] ; 00062 // printf("Y: %d,%d, %d\t", data[0], data[1], value); 00063 return(value) ; 00064 } 00065 00066 int16_t FXAS21002::getZ(void) 00067 { 00068 uint8_t data[2] ; 00069 int16_t value ; 00070 readRegs(REG_OUT_Z_MSB, &data[0], 1) ; 00071 readRegs(REG_OUT_Z_LSB, &data[1], 1) ; 00072 value = (data[0] << 8) | data[1] ; 00073 // printf("Z: %d,%d, %d\t", data[0], data[1], value); 00074 return(value) ; 00075 } 00076 00077 void FXAS21002::selftest(bool mode) 00078 { 00079 uint8_t value ; 00080 value = getCTRL1() ; 00081 if (mode) { 00082 value |= 0x10 ; 00083 } else { 00084 value ^= 0x10 ; 00085 } 00086 setCTRL1(value) ; 00087 } 00088 00089 void FXAS21002::activate(bool mode) 00090 { 00091 uint8_t value ; 00092 value = getCTRL1() ; 00093 if (mode) { 00094 value |= 0x02 ; 00095 } else { 00096 value ^= 0x02 ; 00097 } 00098 setCTRL1(value) ; 00099 } 00100 00101 void FXAS21002::ready(bool mode) 00102 { 00103 uint8_t value ; 00104 value = getCTRL1() ; 00105 if (mode) { 00106 value |= 0x01 ; 00107 } else { 00108 value ^= 0x01 ; 00109 } 00110 setCTRL1(value) ; 00111 } 00112 00113 uint8_t FXAS21002::getCTRL1(void) 00114 { 00115 uint8_t value ; 00116 readRegs(REG_CTRL_REG1, &value, 1) ; 00117 return(value) ; 00118 } 00119 00120 void FXAS21002::setCTRL1(uint8_t value) 00121 { 00122 uint8_t data[2] ; 00123 data[0] = REG_CTRL_REG1 ; 00124 data[1] = value ; 00125 writeRegs(data, 2) ; 00126 } 00127 00128 uint8_t FXAS21002::getCTRL2(void) 00129 { 00130 uint8_t value ; 00131 readRegs(REG_CTRL_REG2, &value, 1) ; 00132 return(value) ; 00133 } 00134 00135 void FXAS21002::setCTRL2(uint8_t value) 00136 { 00137 uint8_t data[2] ; 00138 data[0] = REG_CTRL_REG2 ; 00139 data[1] = value ; 00140 writeRegs(data, 2) ; 00141 } 00142 00143 uint8_t FXAS21002::getCTRL3(void) 00144 { 00145 uint8_t value ; 00146 readRegs(REG_CTRL_REG3, &value, 1) ; 00147 return(value) ; 00148 } 00149 00150 void FXAS21002::setCTRL3(uint8_t value) 00151 { 00152 uint8_t data[2] ; 00153 data[0] = REG_CTRL_REG3 ; 00154 data[1] = value ; 00155 writeRegs(data, 2) ; 00156 } 00157 00158 00159 void FXAS21002::readRegs(int addr, uint8_t * data, int len) { 00160 char t[1] = {addr}; 00161 m_i2c.write(m_addr, t, 1, true); 00162 m_i2c.read(m_addr, (char *)data, len); 00163 } 00164 00165 void FXAS21002::writeRegs(uint8_t * data, int len) { 00166 m_i2c.write(m_addr, (char *)data, len); 00167 }
Generated on Tue Aug 2 2022 11:27:41 by
1.7.2