USBMouse

Dependencies:   USBDevice mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Accelerometer.cpp Source File

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 }