libreria aggiornata

Committer:
max_mbed
Date:
Mon Jan 23 22:51:58 2017 +0000
Revision:
1:0b38c9475429
Parent:
0:30cd7984fb5b
Tolto il passa alto all'accelerazione che come previsto da fastidio perch? troppo basso.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
max_mbed 0:30cd7984fb5b 1 #pragma once
max_mbed 0:30cd7984fb5b 2 //Includes
max_mbed 0:30cd7984fb5b 3 #include "mbed.h"
max_mbed 0:30cd7984fb5b 4 #include "vector.h"
max_mbed 0:30cd7984fb5b 5 //Defines
max_mbed 0:30cd7984fb5b 6 #define G 9.81
max_mbed 0:30cd7984fb5b 7 #define FULLSCALEBIT 65536
max_mbed 0:30cd7984fb5b 8 #define LSM6DS0_ADDRESS 0b11010110 // Device address when ADO = 0
max_mbed 0:30cd7984fb5b 9 //Registers
max_mbed 0:30cd7984fb5b 10 #define WHO_AM_I 0x0F
max_mbed 0:30cd7984fb5b 11 #define CTRL_REG1_G 0x10 //Startup Register to turn on both AX and G
max_mbed 0:30cd7984fb5b 12 #define BW_G 0
max_mbed 0:30cd7984fb5b 13 #define FS_G 3
max_mbed 0:30cd7984fb5b 14 #define ODR_G 5
max_mbed 0:30cd7984fb5b 15 #define CTRL_REG6_XL 0x20 //Startup Register to turn on only AX
max_mbed 0:30cd7984fb5b 16 #define BW_XL 0
max_mbed 0:30cd7984fb5b 17 #define BW_SCAL_ODR 2
max_mbed 0:30cd7984fb5b 18 #define FS_XL 3
max_mbed 0:30cd7984fb5b 19 #define ODR_XL 5
max_mbed 0:30cd7984fb5b 20 #define INT_CTRL 0x0C //Interrupt register enabler
max_mbed 0:30cd7984fb5b 21 #define INT_DRDY_XL 0
max_mbed 0:30cd7984fb5b 22 #define INT_FSS5 5
max_mbed 0:30cd7984fb5b 23 #define INT_GEN_CFG_XL 0x06
max_mbed 0:30cd7984fb5b 24 #define AOI_XL 7
max_mbed 0:30cd7984fb5b 25 #define ZHIE_XL 5
max_mbed 0:30cd7984fb5b 26 #define INT_GEN_SRC_XL 0x26
max_mbed 0:30cd7984fb5b 27 #define IA_XL 7
max_mbed 0:30cd7984fb5b 28 #define XL_XL 0
max_mbed 0:30cd7984fb5b 29
max_mbed 0:30cd7984fb5b 30 #define CTRL_REG3_G 0x12 //Gyro HPF
max_mbed 0:30cd7984fb5b 31 #define CTRL_REG7_XL 0x21 //Acc HPF
max_mbed 0:30cd7984fb5b 32
max_mbed 0:30cd7984fb5b 33 #define OUT_X_XL 0x28 //X of Accelerometer
max_mbed 0:30cd7984fb5b 34 #define OUT_Y_XL 0x2A //Y of Accelerometer
max_mbed 0:30cd7984fb5b 35 #define OUT_Z_XL 0x2C //Z of Accelerometer
max_mbed 0:30cd7984fb5b 36 #define OUT_X_G 0x18 //alfa of gyroscope
max_mbed 0:30cd7984fb5b 37 #define OUT_Y_G 0x1A //beta of gyroscope
max_mbed 0:30cd7984fb5b 38 #define OUT_Z_G 0x1C //gamma of gyroscope
max_mbed 0:30cd7984fb5b 39 //Standard definitions
max_mbed 0:30cd7984fb5b 40 #define LSM6DS0_ACCELERO_RANGE_2G 0
max_mbed 0:30cd7984fb5b 41 #define LSM6DS0_ACCELERO_RANGE_4G 2
max_mbed 0:30cd7984fb5b 42 #define LSM6DS0_ACCELERO_RANGE_8G 3
max_mbed 0:30cd7984fb5b 43 #define LSM6DS0_ACCELERO_RANGE_16G 1
max_mbed 0:30cd7984fb5b 44
max_mbed 0:30cd7984fb5b 45 #define LSM6DS0_REG6XL_ODR_XL_PD 0 //Default Value
max_mbed 0:30cd7984fb5b 46 #define LSM6DS0_REG6XL_ODR_XL_10HZ 1
max_mbed 0:30cd7984fb5b 47 #define LSM6DS0_REG6XL_ODR_XL_50HZ 2
max_mbed 0:30cd7984fb5b 48 #define LSM6DS0_REG6XL_ODR_XL_119HZ 3
max_mbed 0:30cd7984fb5b 49 #define LSM6DS0_REG6XL_ODR_XL_238HZ 4
max_mbed 0:30cd7984fb5b 50 #define LSM6DS0_REG6XL_ODR_XL_476HZ 5
max_mbed 0:30cd7984fb5b 51 #define LSM6DS0_REG6XL_ODR_XL_952HZ 6
max_mbed 0:30cd7984fb5b 52
max_mbed 0:30cd7984fb5b 53 #define LSM6DS0_REG6XL_BW_XL_408HZ 0
max_mbed 0:30cd7984fb5b 54 #define LSM6DS0_REG6XL_BW_XL_211HZ 1
max_mbed 0:30cd7984fb5b 55 #define LSM6DS0_REG6XL_BW_XL_105HZ 2
max_mbed 0:30cd7984fb5b 56 #define LSM6DS0_REG6XL_BW_XL_50HZ 3
max_mbed 0:30cd7984fb5b 57
max_mbed 0:30cd7984fb5b 58 #define LSM6DS0_GYRO_RANGE_245 0
max_mbed 0:30cd7984fb5b 59 #define LSM6DS0_GYRO_RANGE_500 1
max_mbed 0:30cd7984fb5b 60 #define LSM6DS0_GYRO_RANGE_2000 3
max_mbed 0:30cd7984fb5b 61
max_mbed 0:30cd7984fb5b 62 #define LSM6DS0_REG6G_ODR_XL_PD 0 //Default Value
max_mbed 0:30cd7984fb5b 63 #define LSM6DS0_REG6G_ODR_XL_14_9HZ 1
max_mbed 0:30cd7984fb5b 64 #define LSM6DS0_REG6G_ODR_XL_59_5HZ 2
max_mbed 0:30cd7984fb5b 65 #define LSM6DS0_REG6G_ODR_XL_119HZ 3
max_mbed 0:30cd7984fb5b 66 #define LSM6DS0_REG6G_ODR_XL_238HZ 4
max_mbed 0:30cd7984fb5b 67 #define LSM6DS0_REG6G_ODR_XL_476HZ 5
max_mbed 0:30cd7984fb5b 68 #define LSM6DS0_REG6G_ODR_XL_952HZ 6
max_mbed 0:30cd7984fb5b 69
max_mbed 0:30cd7984fb5b 70
max_mbed 0:30cd7984fb5b 71
max_mbed 0:30cd7984fb5b 72 class LSM6DS0 {
max_mbed 0:30cd7984fb5b 73 public:
max_mbed 0:30cd7984fb5b 74 /*CONSTRUCTOR:
max_mbed 0:30cd7984fb5b 75 * Create itself the i2c serial line
max_mbed 0:30cd7984fb5b 76 */
max_mbed 0:30cd7984fb5b 77 LSM6DS0(PinName sda, PinName scl);
max_mbed 0:30cd7984fb5b 78 /*Test connection through the WHO_AM_I register.
max_mbed 0:30cd7984fb5b 79 * return true if the value read correspond to the register
max_mbed 0:30cd7984fb5b 80 */
max_mbed 0:30cd7984fb5b 81 int enableAcceleroInterrupt(void);
max_mbed 0:30cd7984fb5b 82 bool testConnection( void );
max_mbed 0:30cd7984fb5b 83 /*turn on only the Accelerometer with default value:
max_mbed 0:30cd7984fb5b 84 * METTERE I DEFAULT + COMMENTARE!!!!
max_mbed 0:30cd7984fb5b 85 */
max_mbed 0:30cd7984fb5b 86 int turnOnAccelerometer(char Odr, char range, char bw);
max_mbed 0:30cd7984fb5b 87 /* turn on both ACc and gyro with default values:
max_mbed 0:30cd7984fb5b 88 * ODR = 238 Hz, Range = 500dps, BW_filter = 63 Hz
max_mbed 0:30cd7984fb5b 89 * Look at the datasheet to set the new values
max_mbed 0:30cd7984fb5b 90 * Return 0 on success, non 0 otherwise
max_mbed 0:30cd7984fb5b 91 */
max_mbed 0:30cd7984fb5b 92 int turnOnAccGyro(char Odr = 0b100, char range = 0b01, char bw = 0b10);
max_mbed 0:30cd7984fb5b 93 /*
max_mbed 0:30cd7984fb5b 94 * Very slow ODR for testing
max_mbed 0:30cd7984fb5b 95 */
max_mbed 0:30cd7984fb5b 96 int turnOnTestSlow(void);
max_mbed 0:30cd7984fb5b 97 /*
max_mbed 0:30cd7984fb5b 98 * Very fast ODR for testing
max_mbed 0:30cd7984fb5b 99 */
max_mbed 0:30cd7984fb5b 100 int turnOnTestFast(void);
max_mbed 0:30cd7984fb5b 101 /*
max_mbed 0:30cd7984fb5b 102 * Set the i2c comunication frequency in Hz
max_mbed 0:30cd7984fb5b 103 */
max_mbed 0:30cd7984fb5b 104 int setI2CSpeed(int frequency);
max_mbed 0:30cd7984fb5b 105
max_mbed 0:30cd7984fb5b 106 char getAcceleroRange(void);
max_mbed 0:30cd7984fb5b 107 int getAcceleroRaw(int16_t *data);
max_mbed 0:30cd7984fb5b 108 int getAccelero(Vector* v);
max_mbed 0:30cd7984fb5b 109 int getGyroRaw(int16_t * data);
max_mbed 0:30cd7984fb5b 110 int getGyro(Vector* v, bool after_calibration = true);
max_mbed 0:30cd7984fb5b 111 /* Read both accelerometer and gyro in m/s^2 and dps.
max_mbed 0:30cd7984fb5b 112 *The data are stored this way:
max_mbed 0:30cd7984fb5b 113 -acc[0] = Acc_x
max_mbed 0:30cd7984fb5b 114 -acc[1] = Acc_y
max_mbed 0:30cd7984fb5b 115 -acc[2] = Acc_z
max_mbed 0:30cd7984fb5b 116 -gyro[0] = Ang_x
max_mbed 0:30cd7984fb5b 117 -gyro[1] = Ang_y
max_mbed 0:30cd7984fb5b 118 -gyro[2] = Ang_z
max_mbed 0:30cd7984fb5b 119 */
max_mbed 0:30cd7984fb5b 120 int getAccGyro(Vector *acc, Vector *gyro, bool after_gyro_calibration = true);
max_mbed 0:30cd7984fb5b 121 /*i2c serial line writer.
max_mbed 0:30cd7984fb5b 122 * return 0 on success, non 0 otherwise
max_mbed 0:30cd7984fb5b 123 */
max_mbed 0:30cd7984fb5b 124 int write( char address, char data);
max_mbed 0:30cd7984fb5b 125 int read( char adress, char *data);
max_mbed 0:30cd7984fb5b 126 int read( char adress, char *data, int length);
max_mbed 0:30cd7984fb5b 127 int gyroCalibration(int max_iteration);
max_mbed 0:30cd7984fb5b 128 int acceleroCalibration(double *data, int max_iteration);
max_mbed 0:30cd7984fb5b 129
max_mbed 0:30cd7984fb5b 130 private:
max_mbed 0:30cd7984fb5b 131 I2C i2c;
max_mbed 0:30cd7984fb5b 132 char currentAcceleroRange;
max_mbed 0:30cd7984fb5b 133 char currentGyroRange;
max_mbed 0:30cd7984fb5b 134 Vector gyro_offset;
max_mbed 0:30cd7984fb5b 135 };