Skip to content

Commit cd11b06

Browse files
authored
Merge pull request #248 from mp-se/dev
Merge latest beta 3 changes
2 parents 65d73b8 + cca6ea8 commit cd11b06

18 files changed

+80
-39
lines changed
624 Bytes
Binary file not shown.
624 Bytes
Binary file not shown.

bin/firmware.bin

624 Bytes
Binary file not shown.

bin/firmware32c3.bin

624 Bytes
Binary file not shown.

bin/firmware32c3supermini.bin

624 Bytes
Binary file not shown.

bin/firmware32c3zero.bin

640 Bytes
Binary file not shown.

bin/firmware32s2.bin

624 Bytes
Binary file not shown.

bin/firmware32s3.bin

608 Bytes
Binary file not shown.

lib/mpu6050/MPU6050.cpp

Lines changed: 46 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3321,7 +3321,11 @@ void MPU6050_Base::PID(uint8_t ReadAddress, float kP,float kI, uint8_t Loops){
33213321
if (ReadAddress == 0x3B) gravity = 16384 >> getFullScaleAccelRange();
33223322
Serial.write('>');
33233323
for (int i = 0; i < 3; i++) {
3324-
I2Cdev::readWords(devAddr, SaveAddress + (i * shift), 1, (uint16_t *)&Data, I2Cdev::readTimeout, wireObj); // reads 1 or more 16 bit integers (Word)
3324+
if (I2Cdev::readWords(devAddr, SaveAddress + (i * shift), 1, (uint16_t *)&Data, I2Cdev::readTimeout, wireObj) != 1) {
3325+
Serial.print(F("I2C read error at "));
3326+
Serial.println(i);
3327+
return;
3328+
}
33253329
Reading = Data;
33263330
if(SaveAddress != 0x13){
33273331
BitZero[i] = Data & 1; // Capture Bit Zero to properly handle Accelerometer calibration
@@ -3335,7 +3339,11 @@ void MPU6050_Base::PID(uint8_t ReadAddress, float kP,float kI, uint8_t Loops){
33353339
for (int c = 0; c < 100; c++) {// 100 PI Calculations
33363340
eSum = 0;
33373341
for (int i = 0; i < 3; i++) {
3338-
I2Cdev::readWords(devAddr, ReadAddress + (i * 2), 1, (uint16_t *)&Data, I2Cdev::readTimeout, wireObj); // reads 1 or more 16 bit integers (Word)
3342+
if (I2Cdev::readWords(devAddr, ReadAddress + (i * 2), 1, (uint16_t *)&Data, I2Cdev::readTimeout, wireObj) != 1) {
3343+
Serial.print(F("I2C read error, PID, axis "));
3344+
Serial.println(i);
3345+
return;
3346+
}
33393347
Reading = Data;
33403348
if ((ReadAddress == 0x3B)&&(i == 2)) Reading -= gravity; //remove Gravity
33413349
Error = -Reading;
@@ -3346,7 +3354,11 @@ void MPU6050_Base::PID(uint8_t ReadAddress, float kP,float kI, uint8_t Loops){
33463354
Data = round((PTerm + ITerm[i] ) / 8); //Compute PID Output
33473355
Data = ((Data)&0xFFFE) |BitZero[i]; // Insert Bit0 Saved at beginning
33483356
} else Data = round((PTerm + ITerm[i] ) / 4); //Compute PID Output
3349-
I2Cdev::writeWords(devAddr, SaveAddress + (i * shift), 1, (uint16_t *)&Data, wireObj);
3357+
if (I2Cdev::writeWords(devAddr, SaveAddress + (i * shift), 1, (uint16_t *)&Data, wireObj) != 1) {
3358+
Serial.print(F("I2C write error, PID, axis "));
3359+
Serial.println(i);
3360+
return;
3361+
}
33503362
}
33513363
if((c == 99) && eSum > 1000){ // Error is still to great to continue
33523364
c = 0;
@@ -3371,27 +3383,37 @@ void MPU6050_Base::PID(uint8_t ReadAddress, float kP,float kI, uint8_t Loops){
33713383
resetDMP();
33723384
}
33733385

3374-
int16_t * MPU6050_Base::GetActiveOffsets() {
3375-
uint8_t AOffsetRegister = (getDeviceID() < 0x38 )? MPU6050_RA_XA_OFFS_H:0x77;
3376-
if(AOffsetRegister == 0x06) I2Cdev::readWords(devAddr, AOffsetRegister, 3, (uint16_t *)offsets, I2Cdev::readTimeout, wireObj);
3377-
else {
3378-
I2Cdev::readWords(devAddr, AOffsetRegister, 1, (uint16_t *)offsets, I2Cdev::readTimeout, wireObj);
3379-
I2Cdev::readWords(devAddr, AOffsetRegister+3, 1, (uint16_t *)(offsets+1), I2Cdev::readTimeout, wireObj);
3380-
I2Cdev::readWords(devAddr, AOffsetRegister+6, 1, (uint16_t *)(offsets+2), I2Cdev::readTimeout, wireObj);
3381-
}
3382-
I2Cdev::readWords(devAddr, 0x13, 3, (uint16_t *)(offsets+3), I2Cdev::readTimeout, wireObj);
3383-
return offsets;
3384-
}
33853386

33863387
void MPU6050_Base::PrintActiveOffsets() {
3387-
GetActiveOffsets();
3388-
// A_OFFSET_H_READ_A_OFFS(Data);
3389-
Serial.print((float)offsets[0], 5); Serial.print(",\t");
3390-
Serial.print((float)offsets[1], 5); Serial.print(",\t");
3391-
Serial.print((float)offsets[2], 5); Serial.print(",\t");
3392-
3393-
// XG_OFFSET_H_READ_OFFS_USR(Data);
3394-
Serial.print((float)offsets[3], 5); Serial.print(",\t");
3395-
Serial.print((float)offsets[4], 5); Serial.print(",\t");
3396-
Serial.print((float)offsets[5], 5); Serial.print("\n\n");
3388+
uint8_t deviceID = getDeviceID();
3389+
uint8_t AOffsetRegister = (deviceID < 0x38 )? MPU6050_RA_XA_OFFS_H:0x77;
3390+
int16_t accelOffsets[3], gyroOffsets[3];
3391+
3392+
Serial.print(F("who: 0x"));
3393+
Serial.print(deviceID, HEX);
3394+
3395+
if(AOffsetRegister == 0x06) {
3396+
I2Cdev::readWords(devAddr, AOffsetRegister, 3, (uint16_t *)accelOffsets, I2Cdev::readTimeout, wireObj);
3397+
} else {
3398+
I2Cdev::readWords(devAddr, AOffsetRegister, 1, (uint16_t *)accelOffsets, I2Cdev::readTimeout, wireObj);
3399+
I2Cdev::readWords(devAddr, AOffsetRegister+3, 1, (uint16_t *)(accelOffsets+1), I2Cdev::readTimeout, wireObj);
3400+
I2Cdev::readWords(devAddr, AOffsetRegister+6, 1, (uint16_t *)(accelOffsets+2), I2Cdev::readTimeout, wireObj);
3401+
}
3402+
3403+
Serial.print(F(", accel: "));
3404+
Serial.print((float)accelOffsets[0], 5);
3405+
Serial.print(F(", "));
3406+
Serial.print((float)accelOffsets[1], 5);
3407+
Serial.print(F(", "));
3408+
Serial.print((float)accelOffsets[2], 5);
3409+
3410+
I2Cdev::readWords(devAddr, 0x13, 3, (uint16_t *)gyroOffsets, I2Cdev::readTimeout, wireObj);
3411+
3412+
Serial.print(F(", gyro: "));
3413+
Serial.print((float)gyroOffsets[0], 5);
3414+
Serial.print(F(", "));
3415+
Serial.print((float)gyroOffsets[1], 5);
3416+
Serial.print(F(", "));
3417+
Serial.print((float)gyroOffsets[2], 5);
3418+
Serial.print("\n");
33973419
}

lib/mpu6050/MPU6050.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -832,7 +832,6 @@ class MPU6050_Base {
832832
void CalibrateAccel(uint8_t Loops = 15);// Fine tune after setting offsets with less Loops.
833833
void PID(uint8_t ReadAddress, float kP,float kI, uint8_t Loops); // Does the math
834834
void PrintActiveOffsets(); // See the results of the Calibration
835-
int16_t * GetActiveOffsets();
836835

837836
protected:
838837
uint8_t devAddr;
@@ -841,7 +840,6 @@ class MPU6050_Base {
841840
uint32_t fifoTimeout = MPU6050_FIFO_DEFAULT_TIMEOUT;
842841

843842
private:
844-
int16_t offsets[6];
845843
};
846844

847845
#ifndef I2CDEVLIB_MPU6050_TYPEDEF

0 commit comments

Comments
 (0)