Dependents:   accelerometer

Revision:
0:be166c309588
Child:
3:6cddc2c096a4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MMA7361L.cpp	Fri Feb 17 14:23:52 2012 +0000
@@ -0,0 +1,59 @@
+#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.235;
+            Xo = 0.486;
+            Yo = 0.520;
+            Zo = 0.500;
+}
+
+void MMA7361L::prepare(){
+    accelX = (xout - Xo) / scaleX;
+    accelY = (yout - Yo) / scaleY;
+    accelZ = (zout - Zo) / scaleZ;
+}
+
+float MMA7361L::getAccel() {
+    return sqrt(accelX * accelX + accelY * accelY + accelZ * accelZ);
+}
+
+float MMA7361L::getAccelX() {
+    return accelX;
+}
+
+float MMA7361L::getAccelY() {
+    return accelY;
+}
+
+float MMA7361L::getAccelZ() {
+    return accelZ;
+}
+
+float MMA7361L::getTiltX() {
+    return asin(accelX / sqrt(accelX * accelX + accelY * accelY + accelZ * accelZ));
+}
+
+float MMA7361L::getTiltY() {
+    return asin(accelY / sqrt(accelX * accelX + accelY * accelY + accelZ * accelZ));
+}
+
+float MMA7361L::getTiltZ() {
+    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);
+}