USBMouse
Embed:
(wiki syntax)
Show/hide line numbers
Accelerometer.cpp
00001 #include "Accelerometer.h" 00002 00003 00004 #define REG_CTRL_REG_1 0x2A 00005 #define REG_OUT_X_MSB 0x01 00006 #define REG_OUT_Y_MSB 0x03 00007 #define REG_OUT_Z_MSB 0x05 00008 00009 Accelerometer::Accelerometer(PinName sda, PinName scl, int address) : i2c(sda, scl), addr(address) { 00010 // activate the peripheral 00011 uint8_t data[2] = {REG_CTRL_REG_1, 0x01}; 00012 writeRegs(data, 2); 00013 } 00014 00015 Accelerometer::~Accelerometer() { } 00016 00017 00018 float Accelerometer::Acc_X() { 00019 //divide by 4096 b/c MMA output is 4096 counts per g so this f outputs accelorometer value formatted to g (gravity) 00020 return (float(getAccAxis(REG_OUT_X_MSB))/4096.0); 00021 } 00022 00023 float Accelerometer::Acc_Y() { 00024 return (float(getAccAxis(REG_OUT_Y_MSB))/4096.0); 00025 } 00026 00027 float Accelerometer::Acc_Z() { 00028 return (float(getAccAxis(REG_OUT_Z_MSB))/4096.0); 00029 } 00030 00031 00032 00033 int16_t Accelerometer::getAccAxis(uint8_t addr) { 00034 int16_t acc; 00035 uint8_t result[2]; 00036 readRegs(addr, result, 2); 00037 00038 acc = (result[0] << 6) | (result[1] >> 2); 00039 if (acc > 16383/2) 00040 acc -= 16383; 00041 00042 return acc; 00043 } 00044 00045 void Accelerometer::readRegs(int addr, uint8_t * data, int len) { 00046 char t[1] = {addr}; 00047 i2c.write(addr, t, 1, true); 00048 i2c.read(addr, (char *)data, len); 00049 } 00050 00051 00052 00053 void Accelerometer::writeRegs(uint8_t * data, int len) { 00054 i2c.write(addr, (char *)data, len); 00055 }
Generated on Sat Jul 16 2022 20:30:58 by
1.7.2