Library is work in progress, in fact it is extracted and extended from an old project. It needs to be tested a lot more.
Examples
calibration example to determine the offsets needed
example to read values.
test sketch to test get / set values.
example to get pitch roll yaw.
performance sketch.
Breakout board
From left to right
pin
pinName
description
0
VCC
+5V
1
GND
ground
2
SCL
I2C clock
3
SDA
I2C data
| 4 | XDA | auxiliary data | see datasheet | 5 | XCL | auxiliary clock | see datasheet | 6 | AD0 | address | | 7 | INT | interrupt |
Address
AD0 connected to GND => 0x68 AD0 connected to VCC => 0x69
Calibration (short version for now)
load and run calibration example
it shows a header containing 6 numbers and 10 lines of 8 numbers
wait until the middle 6 of the longer lines stabilize (should all be 0)
copy the 6 numbers above the axe aye aze as these are the numbers needed.
Interface
Constructor
GY521(uint8_t address = 0x69, , TwoWire *wire = &Wire) Constructor with default address. 0x68 is also a valid address. The wire argument is optional to select Wire1 Wire2 etc. on some boards.
bool begin(uint8_t sda, uint8_t scl) begin for ESP32 et al. Returns true if address can be found on I2C bus.
bool begin() Returns true if address can be found on I2C bus.
bool isConnected() returns true if device can be found on I2C bus.
void reset() set all internal values to 0 and throttle time to 10 ms.
bool wakeUp() idem.
Throttle
void setThrottle(bool throttle = true) throttle to force "delay" between reads.
bool getThrottle() returns true if throttle mode is set.
void setThrottleTime(uint16_t ti ) throttle time in milliseconds, max = 65535 = 1++ minute
uint16_t getThrottleTime() returns throttle time set.
int16_t read() returns status = GY521_OK on success.
int16_t readAccel() read accelerometer only to speed up interaction. This call does update the throttle timer. returns status = GY521_OK on success.
int16_t readGyro() read gyroscope only to speed up interaction. This call does update the throttle timer. returns status = GY521_OK on success. Note: for pitch roll yaw you need to call read().
int16_t readTemperature() read temperature only, does not update the throttle timer. returns status = GY521_OK on success.
uint32_t lastTime() last time sensor is actually read. In milliseconds. Not updated by readTemperature().
Call after read
Note that multiple calls will return the same value. One must explicitly call read() to get new values.
float getAccelX() idem
float getAccelY() idem
float getAccelZ() idem
float getAngleX() idem
float getAngleY() idem
float getAngleZ() idem
float getTemperature() idem
float getGyroX() idem
float getGyroY() idem
float getGyroZ() idem
float getPitch() idem
float getRoll() idem
float getYaw() idem
Register access
Read the register PDF for the specific value and meaning of registers.
uint8_t setRegister(uint8_t reg, uint8_t value)
uint8_t getRegister(uint8_t reg)
documents
check details - MPU-6000-Register-Map1.pdf
Operation
See examples, use with care
Future
Should
test test and test ...(ESP too)
improve documentation
look for maths optimizations (atan, hypot, performance)
Could
calibrate function in the lib ? (think not as lib might grow?)
calibrate sketch could print code snippet to include...