Dependents:   accelerometer

MMA7361L.cpp

Committer:
JST2011
Date:
2012-02-17
Revision:
4:8bdd5a9f289e
Parent:
3:6cddc2c096a4

File content as of revision 4:8bdd5a9f289e:

#include "MMA7361L.h"

MMA7361L::MMA7361L(PinName xoutPin, PinName youtPin,PinName zoutPin,
                   PinName zeroGDetectPin) :
        xout(xoutPin), yout(youtPin), zout(zoutPin),
        zeroGDetect(zeroGDetectPin) {
            scaleX = 0.246;
            scaleY = 0.251;
            scaleZ = 0.219;
            Xo = 0.486;
            Yo = 0.520;
            Zo = 0.465;
}

void MMA7361L::prepare(){
    accelX = (xout - Xo) / scaleX;
    accelY = (yout - Yo) / scaleY;
    accelZ = (zout - Zo) / scaleZ;
}

float MMA7361L::getAccel() {
    prepare();
    return sqrt(accelX * accelX + accelY * accelY + accelZ * accelZ);
}

float MMA7361L::getAccelX() {
    prepare();
    return accelX;
}

float MMA7361L::getAccelY() {
    prepare();
    return accelY;
}

float MMA7361L::getAccelZ() {
    prepare();
    return accelZ;
}

float MMA7361L::getTiltX() {
    prepare();
    return asin(accelX / sqrt(accelX * accelX + accelY * accelY + accelZ * accelZ));
}

float MMA7361L::getTiltY() {
    prepare();
    return asin(accelY / sqrt(accelX * accelX + accelY * accelY + accelZ * accelZ));
}

float MMA7361L::getTiltZ() {
    prepare();
    return asin(accelZ / sqrt(accelX * accelX + accelY * accelY + accelZ * accelZ));
}

bool MMA7361L::zeroGDetected() {
    return zeroGDetect;
}

void MMA7361L::setZeroGDetectListener(void (*func)(void)) {
    zeroGDetect.rise(func);
}

template<typename T> void MMA7361L::setZeroGDetectListener(T* t, void (T::*func)(void)) {
    zeroG.rise(t, func);
}