libreria aggiornata
LSM6DS0.h
- Committer:
- max_mbed
- Date:
- 2017-01-23
- Revision:
- 0:30cd7984fb5b
File content as of revision 0:30cd7984fb5b:
#pragma once //Includes #include "mbed.h" #include "vector.h" //Defines #define G 9.81 #define FULLSCALEBIT 65536 #define LSM6DS0_ADDRESS 0b11010110 // Device address when ADO = 0 //Registers #define WHO_AM_I 0x0F #define CTRL_REG1_G 0x10 //Startup Register to turn on both AX and G #define BW_G 0 #define FS_G 3 #define ODR_G 5 #define CTRL_REG6_XL 0x20 //Startup Register to turn on only AX #define BW_XL 0 #define BW_SCAL_ODR 2 #define FS_XL 3 #define ODR_XL 5 #define INT_CTRL 0x0C //Interrupt register enabler #define INT_DRDY_XL 0 #define INT_FSS5 5 #define INT_GEN_CFG_XL 0x06 #define AOI_XL 7 #define ZHIE_XL 5 #define INT_GEN_SRC_XL 0x26 #define IA_XL 7 #define XL_XL 0 #define CTRL_REG3_G 0x12 //Gyro HPF #define CTRL_REG7_XL 0x21 //Acc HPF #define OUT_X_XL 0x28 //X of Accelerometer #define OUT_Y_XL 0x2A //Y of Accelerometer #define OUT_Z_XL 0x2C //Z of Accelerometer #define OUT_X_G 0x18 //alfa of gyroscope #define OUT_Y_G 0x1A //beta of gyroscope #define OUT_Z_G 0x1C //gamma of gyroscope //Standard definitions #define LSM6DS0_ACCELERO_RANGE_2G 0 #define LSM6DS0_ACCELERO_RANGE_4G 2 #define LSM6DS0_ACCELERO_RANGE_8G 3 #define LSM6DS0_ACCELERO_RANGE_16G 1 #define LSM6DS0_REG6XL_ODR_XL_PD 0 //Default Value #define LSM6DS0_REG6XL_ODR_XL_10HZ 1 #define LSM6DS0_REG6XL_ODR_XL_50HZ 2 #define LSM6DS0_REG6XL_ODR_XL_119HZ 3 #define LSM6DS0_REG6XL_ODR_XL_238HZ 4 #define LSM6DS0_REG6XL_ODR_XL_476HZ 5 #define LSM6DS0_REG6XL_ODR_XL_952HZ 6 #define LSM6DS0_REG6XL_BW_XL_408HZ 0 #define LSM6DS0_REG6XL_BW_XL_211HZ 1 #define LSM6DS0_REG6XL_BW_XL_105HZ 2 #define LSM6DS0_REG6XL_BW_XL_50HZ 3 #define LSM6DS0_GYRO_RANGE_245 0 #define LSM6DS0_GYRO_RANGE_500 1 #define LSM6DS0_GYRO_RANGE_2000 3 #define LSM6DS0_REG6G_ODR_XL_PD 0 //Default Value #define LSM6DS0_REG6G_ODR_XL_14_9HZ 1 #define LSM6DS0_REG6G_ODR_XL_59_5HZ 2 #define LSM6DS0_REG6G_ODR_XL_119HZ 3 #define LSM6DS0_REG6G_ODR_XL_238HZ 4 #define LSM6DS0_REG6G_ODR_XL_476HZ 5 #define LSM6DS0_REG6G_ODR_XL_952HZ 6 class LSM6DS0 { public: /*CONSTRUCTOR: * Create itself the i2c serial line */ LSM6DS0(PinName sda, PinName scl); /*Test connection through the WHO_AM_I register. * return true if the value read correspond to the register */ int enableAcceleroInterrupt(void); bool testConnection( void ); /*turn on only the Accelerometer with default value: * METTERE I DEFAULT + COMMENTARE!!!! */ int turnOnAccelerometer(char Odr, char range, char bw); /* turn on both ACc and gyro with default values: * ODR = 238 Hz, Range = 500dps, BW_filter = 63 Hz * Look at the datasheet to set the new values * Return 0 on success, non 0 otherwise */ int turnOnAccGyro(char Odr = 0b100, char range = 0b01, char bw = 0b10); /* * Very slow ODR for testing */ int turnOnTestSlow(void); /* * Very fast ODR for testing */ int turnOnTestFast(void); /* * Set the i2c comunication frequency in Hz */ int setI2CSpeed(int frequency); char getAcceleroRange(void); int getAcceleroRaw(int16_t *data); int getAccelero(Vector* v); int getGyroRaw(int16_t * data); int getGyro(Vector* v, bool after_calibration = true); /* Read both accelerometer and gyro in m/s^2 and dps. *The data are stored this way: -acc[0] = Acc_x -acc[1] = Acc_y -acc[2] = Acc_z -gyro[0] = Ang_x -gyro[1] = Ang_y -gyro[2] = Ang_z */ int getAccGyro(Vector *acc, Vector *gyro, bool after_gyro_calibration = true); /*i2c serial line writer. * return 0 on success, non 0 otherwise */ int write( char address, char data); int read( char adress, char *data); int read( char adress, char *data, int length); int gyroCalibration(int max_iteration); int acceleroCalibration(double *data, int max_iteration); private: I2C i2c; char currentAcceleroRange; char currentGyroRange; Vector gyro_offset; };