Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed PowerControl
Fork of Projet_S5 by
accelerometer.cpp
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
Generated on Thu Jul 14 2022 10:43:20 by
