libreria aggiornata
LSM6DS0.h@1:0b38c9475429, 2017-01-23 (annotated)
- 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?
User | Revision | Line number | New 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 | }; |