plop

Dependencies:   ADXL345_I2C

Revision:
0:807955c8969c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Accelerometre.cpp	Tue Mar 14 13:30:11 2017 +0000
@@ -0,0 +1,134 @@
+#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 = 1;
+            }   
+            else {if(((int16_t)readings[0]<-100)&&((int16_t)readings[1]<150)&&((int16_t)readings[1]>-150)){//haut
+                    position = 2;
+                }
+                else {if(((int16_t)readings[1]>150)&&((int16_t)readings[0]<150)&&((int16_t)readings[0]>-100)){//gauche
+                        position = 3;
+                    }
+                    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];
+    }
+