Code for break using sensor
Dependencies: SEGGER_RTT mbed-dev
Fork of DigitalOut_HelloWorld by
Diff: MPU9250.h
- Revision:
- 2:8f53e653f9b1
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MPU9250.h Mon Dec 18 10:18:59 2017 +0000 @@ -0,0 +1,124 @@ +#ifndef SENSORS_MPU9250_H +#define SENSORS_MPU9250_H +#include "mbed.h" + +//InvenSense MPU-9250 +//Driver for the nrf51822 mcu + +#define SHORT_SWAP_BYTE(s) (((s & 0xff) << 8) | ((s & 0xff00) >> 8)) + + +#define MPU9250_ID 0x71 +#define MPU9250_REG_ID 0x75 //Should read out MPU9250_ID + + +#define MPU9250_REG_GYRO_X_H 0x43 +#define MPU9250_REG_GYRO_X_L 0x44 +#define MPU9250_REG_GYRO_Y_H 0x45 +#define MPU9250_REG_GYRO_Y_L 0x46 +#define MPU9250_REG_GYRO_Z_H 0x47 +#define MPU9250_REG_GYRO_Z_L 0x48 +#define MPU9250_REG_ACCEL_X_H 0x3B +#define MPU9250_REG_ACCEL_X_L 0x3C +#define MPU9250_REG_ACCEL_Y_H 0x3D +#define MPU9250_REG_ACCEL_Y_L 0x3E +#define MPU9250_REG_ACCEL_Z_H 0x3F +#define MPU9250_REG_ACCEL_Z_L 0x40 +#define MPU9250_REG_TEMP_H 0x41 +#define MPU9250_REG_TEMP_L 0x42 + +#define MPU9250_REG_CFG 0x1A +#define MPU9250_REG_GYROCFG 0x1B +#define MPU9250_REG_ACCELCFG 0x1C +#define MPU9250_REG ACCELCFG2 0x1D +#define MPU9250_REG_MOTDETSTAT 0x61 +#define MPU9250_REG_MOTDETCTRL 0x69 +#define MPU9250_REG_USRCTRL 0x6A +#define MPU9250_REG_PWR1 0x6B +#define MPU9250_REG_PWR2 0x6C +#define MPU9250_REG_INTCFG 0x37 +#define MPU9250_REG_INTEN 0x38 +#define MPU9250_REG_WOMT 0x1F + +#define MPU9250_REG_DMP_INTSTAT 0x39 +#define MPU9250_REG_DMP_BANK 0x6D +#define MPU9250_REG_DMP_RW_PNT 0x6E +#define MPU9250_REG_DMP_REG 0x6F +#define MPU9250_REG_DMP_REG1 0x70 +#define MPU9250_REG_DMP_REG2 0x71 + +#define MPU9250_MAG_ADDRESS 0x0C +#define MPU9250_MAG_REG_STATUS 0x02 +#define MPU9250_MAG_REG_X_L 0x03 +#define MPU9250_MAG_REG_X_H 0x04 +#define MPU9250_MAG_REG_Y_L 0x05 +#define MPU9250_MAG_REG_Y_H 0x06 +#define MPU9250_MAG_REG_Z_L 0x07 +#define MPU9250_MAG_REG_Z_H 0x08 +#define MPU9250_MAG_REG_CNTL 0x0A //0b0 power down, 0b1 single measurement, 0b1000 self-test, 0b1111 fuse-rom access +#define MPU9250_MAG_REG_FUSE_XADJ 0x10 +#define MPU9250_MAG_REG_FUSE_YADJ 0x11 +#define MPU9250_MAG_REG_FUSE_ZADJ 0x12 +#define MPU9250_MAG_REG_I2CDIS 0x0F + +#define MPU9250_GYROSCALE_250 0x00 +#define MPU9250_GYROSCALE_500 0x08 +#define MPU9250_GYROSCALE_1000 0x10 +#define MPU9250_GYROSCALE_2000 0x18 +#define MPU9250_ACCSCALE_2 0x00 +#define MPU9250_ACCSCALE_4 0x08 +#define MPU9250_ACCSCALE_8 0x10 +#define MPU9250_ACCSCALE_16 0x18 + + +struct __attribute__((__packed__)) MPU9250_MAG_DATA { + uint16_t x; + uint16_t y; + uint16_t z; + uint8_t isValid; +}; + +struct __attribute__((__packed__)) MPU9250_ACCEL_DATA { + uint16_t x; + uint16_t y; + uint16_t z; + uint8_t isValid; +}; + +struct __attribute__((__packed__)) MPU9250_GYRO_DATA { + uint16_t x; + uint16_t y; + uint16_t z; + uint8_t isValid; +}; + +struct __attribute__((__packed__)) MPU9250_TEMP_DATA { + uint16_t temperature; + uint8_t isValid; +}; + +class MPU9250 { + public: + MPU9250(int SCLPin, int SDAPin, int addr); + MPU9250_GYRO_DATA readGyro(); + MPU9250_MAG_DATA readMag(); + MPU9250_ACCEL_DATA readAccel(); + MPU9250_ACCEL_DATA readAccelNew(); + MPU9250_TEMP_DATA readTemp(); + + bool init(); + bool wakeup(); + bool standby(); + bool sleep(); + + private: + MPU9250(); + I2C i2c; + int deviceAddress; + bool readRegister(int addr, uint8_t* data, int length); + bool writeRegister(int addr, uint8_t data); + bool readMagRegister(int addr, uint8_t* data, int length); + bool writeMagRegister(int addr, uint8_t data); +}; + +#endif \ No newline at end of file