Dependents:
accelerometer
Diff: MMA7361L.cpp
- 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);
+}