Accelerometer.cpp

Committer:
asy_paris90
Date:
2012-07-09
Revision:
0:f37d59175b91

File content as of revision 0:f37d59175b91:

#include "Accelerometer.h"
Accelerometer::Accelerometer(PinName xoutPin,PinName youtPin,PinName zoutPin,PinName sleepPin,PinName zeroGDetectPin,PinName gSelectPin):

    xout(xoutPin),yout(youtPin),zout(zoutPin),zeroGDetect(zeroGDetectPin),sleep(sleepPin),gSelect(gSelectPin),zeroG(zeroGDetectPin)
    {
        sleep = 1; //normal mode
        gSelect = 0; //1.5G mode
        scale = 0.8;
    }
    
    float Accelerometer ::getAccel(){
        float x = getAccelX();
        float y = getAccelY();
        float z = getAccelZ();
        return sqrt (x*x + y*y + z*z);
        
        }
        
        float Accelerometer :: getAccelX(){
            return ((xout*3.3)-1.65)/scale;
        }
        
        float Accelerometer :: getAccelY(){
            return ((yout*3.3)-1.65)/scale;
        }
        
        float Accelerometer :: getAccelZ(){
            return ((zout*3.3)-1.65)/scale;
        }
        
        float Accelerometer :: getTiltX() {
            
            float x =getAccelX();
            float y =getAccelY();
            float z =getAccelZ();
            float a =sqrt(x*x + y*y + z*z);
            return asin (x/a);
            
            }
       
        float Accelerometer :: getTiltY(){
            
            float x =getAccelX();
            float y =getAccelY();
            float z =getAccelZ();
            float a =sqrt(x*x + y*y + z*z);
            return asin (y/a);
            
            }
         
          float Accelerometer :: getTiltZ(){
            
            float x =getAccelX();
            float y =getAccelY();
            float z =getAccelZ();
            float a =sqrt(x*x + y*y + z*z);
            return asin (z/a);
            
            }
         
         void Accelerometer :: 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 Accelerometer ::setSleep(bool on){
            sleep= !on;
 }
 
 
        bool Accelerometer :: detectedZeroG(){
                return zeroGDetect;
}

        void Accelerometer ::setZeroGDetectListener(void(*func)(void)){
            zeroG.rise(func);
}

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