Projet S5 Info / Mbed 2 deprecated Projet_S5

Dependencies:   mbed PowerControl

Fork of Projet_S5 by Jonathan Tousignant

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers accelerometer.cpp Source File

accelerometer.cpp

Go to the documentation of this file.
00001 /*!
00002  *  \file accelerometer.cpp
00003  *  \brief Class that define a accelerometer in C and C++
00004  *  \author Equipe P02
00005  *  \version 1.0
00006  *  \date 14/03/2014
00007  */
00008 
00009 #include "accelerometer.h"
00010 
00011 Accelerometer::Accelerometer() :
00012     i2c(p9, p10)
00013 {
00014     initAccel();    
00015 }
00016 
00017 Accelerometer::~Accelerometer(){}
00018 
00019 void Accelerometer::writeToRegister(int address, int startingRegister, int data2Write) 
00020 { 
00021     char data[2]; 
00022     data[0] = startingRegister; 
00023     data[1] = data2Write; 
00024 
00025     i2c.write(address, data, 2); 
00026 }
00027   
00028 char Accelerometer::readRegister(char address) //fonction qui lit les valeurs des registres 
00029 {    
00030     // Read from selected register adress 
00031     i2c.start();                                          
00032     i2c.write(MMA8452_WRITE_ADDRESS);    
00033     i2c.write(address);                  
00034     i2c.start();                         
00035     i2c.write(MMA8452_READ_ADDRESS);     
00036     char data = i2c.read(0);             
00037     i2c.stop();                          
00038    
00039     // return the data readed 
00040     return data;    
00041 } 
00042   
00043 bool Accelerometer::initAccel() //fonction qui initialise l'Accelerometer avec i2c 
00044 { 
00045     // Start I2C communication    
00046     char data = readRegister(WHO_AM_I); 
00047     if(data != 0x2A) 
00048     { 
00049         return false; 
00050     }
00051     
00052     // Put accelerometer in active mode at 6.25Hz 
00053     writeToRegister(MMA8452_WRITE_ADDRESS, CTRL_REG1, 0x31); 
00054       
00055     // Put accelerometer in standby mode at 6.25Hz 
00056     writeToRegister(MMA8452_WRITE_ADDRESS, CTRL_REG1, 0x30); 
00057        
00058     // Set accelerometer in 4g range 
00059     writeToRegister(MMA8452_WRITE_ADDRESS, XYZ_DATA_CFG, 0x1); 
00060        
00061     // Put accelerometer in active mode at 6.25Hz 
00062     writeToRegister(MMA8452_WRITE_ADDRESS, CTRL_REG1, 0x31);
00063     
00064     return true;      
00065 }
00066 
00067 signed char* Accelerometer::getAccelValue()
00068 {
00069     // Signed char to have values in -128 and 128
00070     // The base char is in unsigned
00071     signed char* values = new signed char[3]; 
00072     
00073     values[0] = readRegister(OUT_X_MSB); // data x
00074     values[1] = readRegister(OUT_Y_MSB); // data y
00075     values[2] = readRegister(OUT_Z_MSB); // data z
00076     
00077     return values;
00078 } 
00079 
00080 extern "C" void *Accelerometer_C_new ()
00081 {
00082     return new Accelerometer();
00083 }
00084 
00085 extern "C" void Accelerometer_C_delete (void *accelerometer)
00086 {
00087     Accelerometer *acc = (Accelerometer*)accelerometer;
00088     delete acc;
00089 }
00090 
00091 extern "C" signed char* Accelerometer_C_getAccelValue (void *accelerometer)
00092 {
00093     Accelerometer *acc = (Accelerometer*)accelerometer;
00094     return acc->getAccelValue();
00095 }
00096