Accelerometer library (simple)

Dependents:   Shake_the_maze

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?

UserRevisionLine numberNew 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 }