kj

Dependencies:   ADXL345_I2C

Fork of Accelerometre by Florent Coudronniere

Accelerometre.cpp

Committer:
Taliarte
Date:
2017-03-30
Revision:
1:cb5c86a009c8
Parent:
0:807955c8969c

File content as of revision 1:cb5c86a009c8:

#include "Accelerometre.h"

Accelerometre::Accelerometre(void)
{
    position =0;
    _acc =NULL; 
    for (i=0; i<3;i++){
        readings[i] = 0 ;
    }
}


Accelerometre::Accelerometre(ADXL345_I2C * acc)
{
    position =0;
       for (i=0; i<3;i++){
        readings[i] = 0 ;
    }
    if (_acc) delete _acc; // destruction de l'objet accelerometre 
    _acc =acc;  
    
}




Accelerometre ::~Accelerometre(void){
   if (_acc) delete _acc; // destruction de l'objet accelerometre 
   if (readings) delete readings;

}


int Accelerometre::initAcc(void){
    if (_acc) {
            
            // These are here to test whether any of the initialization fails. It will print the failure
        if (_acc->setPowerControl(0x00)){
             //pc.printf("didn't intitialize power control\n\r"); 
             return 1;  }
         //Full resolution, +/-16g, 4mg/LSB.
         wait(.001);
         
         if(_acc->setDataFormatControl(0x0B)){
            //pc.printf("didn't set data format\n\r");
            return 2;  }
         wait(.001);
         
         //3.2kHz data rate.
         if(_acc->setDataRate(ADXL345_3200HZ)){
            //pc.printf("didn't set data rate\n\r");
            return 3;    }
         wait(.001);
         
         //Measurement mode.
        if(_acc->setPowerControl(MeasurementMode)) {
        //pc.printf("didn't set the power control to measurement\n\r"); 
        return 4;   }
         
         _acc->getOutput(readingPrec);
         
          for(i=0;i<3;i++){
                if ((int16_t)readingPrec[i]<0){
                    readingPrecABS[i] = readingPrec[i]*(-1);
                }
                else{
                    
                    readingPrecABS[i] = readingPrec[i];
                } 
                  
            }
         return 10;
        }
        return 0;      
}

void Accelerometre::calculeABS(){ 
    for(i=0;i<3;i++){
        if ((int16_t)readings[i]<0){
            readingsABS[i] = readings[i]*(-1);
        }
        else{ 
            readingsABS[i] = readings[i];
        } 
          
    }
}





char Accelerometre::getPosition(void){
        _acc->getOutput(readings);
        
        calculeABS();
        
       
            
            if(((int16_t)readings[0]>150)&&((int16_t)readings[1]<150)&&((int16_t)readings[1]>-150)){ //bas
                position = 3;
            }   
            else {if(((int16_t)readings[0]<-100)&&((int16_t)readings[1]<150)&&((int16_t)readings[1]>-150)){//haut
                    position = 1;
                }
                else {if(((int16_t)readings[1]>150)&&((int16_t)readings[0]<150)&&((int16_t)readings[0]>-100)){//gauche
                        position = 2;
                    }
                    else {if(((int16_t)readings[1]<-150)&&((int16_t)readings[0]<150)&&((int16_t)readings[0]>-100)){//droite
                            position = 4;
                        }
                        else{position=0;} // attente
                    }
                }
            }           
       
        
        for (i=0;i<3;i++){
            readingPrecABS[i] = readingsABS[i];
            readingPrec[i] = readings[i];
        }
        
        
        return position;
        
}

void Accelerometre::getXYZ(int* posXYZ){
        _acc->getOutput(readings);    
        posXYZ[0] = readings[0];
        posXYZ[1] = readings[1];
        posXYZ[2] = readings[2];
    }