Accelerometer library (simple)
MMA8453.cpp@2:78ba7ed0699c, 2015-02-18 (annotated)
- Committer:
- gbr1mbed
- Date:
- Wed Feb 18 22:07:41 2015 +0000
- Revision:
- 2:78ba7ed0699c
- Parent:
- 0:5764f3649fed
Improved x y z
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
gbr1mbed | 0:5764f3649fed | 1 | #include "MMA8453.h" |
gbr1mbed | 0:5764f3649fed | 2 | |
gbr1mbed | 0:5764f3649fed | 3 | |
gbr1mbed | 0:5764f3649fed | 4 | MMA8453::MMA8453(PinName sda, PinName scl): i2c(sda,scl){ |
gbr1mbed | 0:5764f3649fed | 5 | i2c.frequency(400); |
gbr1mbed | 0:5764f3649fed | 6 | writeRegister(0x2A, 0x01); |
gbr1mbed | 0:5764f3649fed | 7 | } |
gbr1mbed | 0:5764f3649fed | 8 | |
gbr1mbed | 0:5764f3649fed | 9 | void MMA8453::readRegisters(char address, char* buffer, int len) { |
gbr1mbed | 0:5764f3649fed | 10 | i2c.write(I2C_ADDR, &address, 1, true); |
gbr1mbed | 0:5764f3649fed | 11 | i2c.read(I2C_ADDR | 1, buffer, len); |
gbr1mbed | 0:5764f3649fed | 12 | } |
gbr1mbed | 0:5764f3649fed | 13 | |
gbr1mbed | 0:5764f3649fed | 14 | int MMA8453::writeRegister(char address, char value) { |
gbr1mbed | 0:5764f3649fed | 15 | char buffer[2] = { address, value }; |
gbr1mbed | 0:5764f3649fed | 16 | return i2c.write(I2C_ADDR, buffer, 2); |
gbr1mbed | 0:5764f3649fed | 17 | } |
gbr1mbed | 0:5764f3649fed | 18 | |
gbr1mbed | 0:5764f3649fed | 19 | double MMA8453::convert(char* buffer) { |
gbr1mbed | 0:5764f3649fed | 20 | double val = ((buffer[0] << 2) | (buffer[1] >> 6)); |
gbr1mbed | 0:5764f3649fed | 21 | if (val > 511.0) |
gbr1mbed | 0:5764f3649fed | 22 | val -= 1024.0; |
gbr1mbed | 0:5764f3649fed | 23 | return val / 512.0; |
gbr1mbed | 0:5764f3649fed | 24 | } |
gbr1mbed | 0:5764f3649fed | 25 | |
gbr1mbed | 0:5764f3649fed | 26 | double MMA8453::getX() { |
gbr1mbed | 2:78ba7ed0699c | 27 | char buffer[2]; |
gbr1mbed | 2:78ba7ed0699c | 28 | readRegisters(0x01, buffer, 2); |
gbr1mbed | 0:5764f3649fed | 29 | return 2*convert(buffer); |
gbr1mbed | 0:5764f3649fed | 30 | } |
gbr1mbed | 0:5764f3649fed | 31 | |
gbr1mbed | 0:5764f3649fed | 32 | double MMA8453::getY() { |
gbr1mbed | 2:78ba7ed0699c | 33 | char buffer[2]; |
gbr1mbed | 2:78ba7ed0699c | 34 | readRegisters(0x03, buffer, 2); |
gbr1mbed | 2:78ba7ed0699c | 35 | return 2*convert(buffer); |
gbr1mbed | 0:5764f3649fed | 36 | } |
gbr1mbed | 0:5764f3649fed | 37 | |
gbr1mbed | 0:5764f3649fed | 38 | double MMA8453::getZ() { |
gbr1mbed | 2:78ba7ed0699c | 39 | char buffer[2]; |
gbr1mbed | 2:78ba7ed0699c | 40 | readRegisters(0x05, buffer, 2); |
gbr1mbed | 2:78ba7ed0699c | 41 | return 2*convert(buffer); |
gbr1mbed | 0:5764f3649fed | 42 | } |
gbr1mbed | 0:5764f3649fed | 43 | |
gbr1mbed | 0:5764f3649fed | 44 | void MMA8453::getXYZ(double& x, double& y, double& z) { |
gbr1mbed | 0:5764f3649fed | 45 | char buffer[6]; |
gbr1mbed | 0:5764f3649fed | 46 | readRegisters(0x01, buffer, 6); |
gbr1mbed | 0:5764f3649fed | 47 | x = 2*convert(buffer); |
gbr1mbed | 0:5764f3649fed | 48 | y = 2*convert(buffer + 2); |
gbr1mbed | 0:5764f3649fed | 49 | z = 2*convert(buffer + 4); |
gbr1mbed | 0:5764f3649fed | 50 | } |