Dependents:   accelerometer

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers MMA7361L.cpp Source File

MMA7361L.cpp

00001 #include "MMA7361L.h"
00002 
00003 MMA7361L::MMA7361L(PinName xoutPin, PinName youtPin,PinName zoutPin,
00004                    PinName zeroGDetectPin) :
00005         xout(xoutPin), yout(youtPin), zout(zoutPin),
00006         zeroGDetect(zeroGDetectPin) {
00007             scaleX = 0.246;
00008             scaleY = 0.251;
00009             scaleZ = 0.219;
00010             Xo = 0.486;
00011             Yo = 0.520;
00012             Zo = 0.465;
00013 }
00014 
00015 void MMA7361L::prepare(){
00016     accelX = (xout - Xo) / scaleX;
00017     accelY = (yout - Yo) / scaleY;
00018     accelZ = (zout - Zo) / scaleZ;
00019 }
00020 
00021 float MMA7361L::getAccel() {
00022     prepare();
00023     return sqrt(accelX * accelX + accelY * accelY + accelZ * accelZ);
00024 }
00025 
00026 float MMA7361L::getAccelX() {
00027     prepare();
00028     return accelX;
00029 }
00030 
00031 float MMA7361L::getAccelY() {
00032     prepare();
00033     return accelY;
00034 }
00035 
00036 float MMA7361L::getAccelZ() {
00037     prepare();
00038     return accelZ;
00039 }
00040 
00041 float MMA7361L::getTiltX() {
00042     prepare();
00043     return asin(accelX / sqrt(accelX * accelX + accelY * accelY + accelZ * accelZ));
00044 }
00045 
00046 float MMA7361L::getTiltY() {
00047     prepare();
00048     return asin(accelY / sqrt(accelX * accelX + accelY * accelY + accelZ * accelZ));
00049 }
00050 
00051 float MMA7361L::getTiltZ() {
00052     prepare();
00053     return asin(accelZ / sqrt(accelX * accelX + accelY * accelY + accelZ * accelZ));
00054 }
00055 
00056 bool MMA7361L::zeroGDetected() {
00057     return zeroGDetect;
00058 }
00059 
00060 void MMA7361L::setZeroGDetectListener(void (*func)(void)) {
00061     zeroGDetect.rise(func);
00062 }
00063 
00064 template<typename T> void MMA7361L::setZeroGDetectListener(T* t, void (T::*func)(void)) {
00065     zeroG.rise(t, func);
00066 }