Diff: MMA7361L.cpp
- Revision:
- 0:9f484862187b
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MMA7361L.cpp Thu Dec 08 05:39:11 2011 +0000 @@ -0,0 +1,79 @@ +#include "MMA7361L.h" + +MMA7361L::MMA7361L(PinName xoutPin, PinName youtPin,PinName zoutPin, + PinName zeroGDetectPin, PinName gSelectPin, PinName sleepPin) : + xout(xoutPin), yout(youtPin), zout(zoutPin), + zeroGDetect(zeroGDetectPin), gSelect(gSelectPin), sleep(sleepPin) { + setSleep(false); + setScale(SCALE_1_5G); +} + +float MMA7361L::getAccel() { + float accelX = ((xout * 3.3) - 1.65) / scale; + float accelY = ((yout * 3.3) - 1.65) / scale; + float accelZ = ((zout * 3.3) - 1.65) / scale; + return sqrt(accelX * accelX + accelY * accelY + accelZ * accelZ); +} + +float MMA7361L::getAccelX() { + return ((xout * 3.3) - 1.65) / scale; +} + +float MMA7361L::getAccelY() { + return ((yout * 3.3) - 1.65) / scale; +} + +float MMA7361L::getAccelZ() { + return ((zout * 3.3) - 1.65) / scale; +} + +float MMA7361L::getTiltX() { + float accelX = ((xout * 3.3) - 1.65) / scale; + float accelY = ((yout * 3.3) - 1.65) / scale; + float accelZ = ((zout * 3.3) - 1.65) / scale; + return asin(accelX / sqrt(accelX * accelX + accelY * accelY + accelZ * accelZ)); +} + +float MMA7361L::getTiltY() { + float accelX = ((xout * 3.3) - 1.65) / scale; + float accelY = ((yout * 3.3) - 1.65) / scale; + float accelZ = ((zout * 3.3) - 1.65) / scale; + return asin(accelY / sqrt(accelX * accelX + accelY * accelY + accelZ * accelZ)); +} + +float MMA7361L::getTiltZ() { + float accelX = ((xout * 3.3) - 1.65) / scale; + float accelY = ((yout * 3.3) - 1.65) / scale; + float accelZ = ((zout * 3.3) - 1.65) / scale; + return asin(accelZ / sqrt(accelX * accelX + accelY * accelY + accelZ * accelZ)); +} + +void MMA7361L::setScale(Scale scale) { + switch (scale) { + case SCALE_1_5G: + this->scale = 0.8; + gSelect = 0; + break; + case SCALE_6G: + this->scale = 0.206; + gSelect = 1; + break; + } +} + +void MMA7361L::setSleep(bool on) { + sleep = !on; +} + +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); +} +