Help me on project MPU9250 using Kalman Filter

hi, sorry my english is not good. I want to make a project MPU9250 using Kalman filter. I am using arduino nano for the microcontroller. I used the code from Kristian Lauszus, TKJ Electronics for MPU6050 KalmanFilter/MPU6050.ino at master · TKJElectronics/KalmanFilter · GitHub then I changed it for MPU9250. I want to ask about a lot of errors that I found in my code using the Arduino IDE when I tried to convert it for the MPU9250.

I am a beginner in coding like this. This is the code I made with the reference above.

#include <Kalman.h>
#include <MPU9250.h>

#define RESTRICT_PITCH
 
float kalmanX; // Create the Kalman instances
float kalmanY;
float kalmanZ;


/* IMU Data */
double accX, accY, accZ;
double gyroX, gyroY, gyroZ;
double magX, magY, magZ;
int16_t tempRaw;

double gyroXangle, gyroYangle, gyroZangle; // Angle calculate using the gyro only
double kalAngleX, kalAngleY, kalAngleZ; // Calculated angle using a Kalman filter

double roll;
double pitch;
double yaw;

double i2cData;
double i2cRead;
double setAngle;
double getAngle;

uint32_t timer;
uint8_t i2cData[14]; // Buffer for I2C data

// TODO: Make calibration routine

MPU9250 mpu;

void setup() {
  Serial.begin(115200);
  Wire.begin();
  TWBR = ((F_CPU / 400000L) - 16) / 2; // Set I2C frequency to 400kHz


  i2cData[0] = 7; // Set the sample rate to 1000Hz - 8kHz/(7+1) = 1000Hz
  i2cData[1] = 0x00; // Disable FSYNC and set 260 Hz Acc filtering, 256 Hz Gyro filtering, 8 KHz sampling
  i2cData[2] = 0x00; // Set Gyro Full Scale Range to ±250deg/s
  i2cData[3] = 0x00; // Set Accelerometer Full Scale Range to ±2g
  while (i2cData(0x19, i2cData, 4, false)); // Write to all four registers at once
  while (i2cData(0x6B, 0x01, true)); // PLL with X axis gyroscope reference and disable sleep mode


  while (i2cRead(0x75, i2cData, 1));
  if (i2cData[0] != 0x68) { // Read "WHO_AM_I" register
    Serial.print(F("Error reading sensor"));
    while (1);
  }

  delay(100); // Wait for sensor to stabilize

  /* Set kalman and gyro starting angle */
  while (i2cRead(0x3B, i2cData, 6));
  accX = (i2cData[0] << 8);
  accY = (i2cData[2] << 8);
  accZ = (i2cData[4] << 8);

  // Source: http://www.freescale.com/files/sensors/doc/app_note/AN3461.pdf eq. 25 and eq. 26
  // atan2 outputs the value of -π to π (radians) - see http://en.wikipedia.org/wiki/Atan2
  // It is then converted from radians to degrees

  double roll  = atan2(accY, accZ);
  double pitch = atan2((accX),((accY*sin(roll)) + accZ*cos(roll))); 
  double yaw = atan2( (magZ*sin(roll)-magY*cos(roll)) , ((magX*cos(pitch))+(magY*sin(pitch)*sin(roll))+magZ*sin(pitch)*cos(roll)) );


  kalmanX.setAngle(roll); // Set starting angle
  kalmanY.setAngle(pitch);
  kalmanZ.setAngle(yaw);
  gyroXangle = roll;
  gyroYangle = pitch;
  gyroZangle = yaw;
  compAngleX = roll;
  compAngleY = pitch;
  compAngleZ = yaw;

  timer = micros();
}

void loop() {
  while (i2cRead(0x3B, i2cData, 14));
  accX = ((i2cData[0] << 8) | i2cData[1]);
  accY = ((i2cData[2] << 8) | i2cData[3]);
  accZ = ((i2cData[4] << 8) | i2cData[5]);
  tempRaw = (i2cData[6] << 8) | i2cData[7];
  gyroX = (i2cData[8] << 8) | i2cData[9];
  gyroY = (i2cData[10] << 8) | i2cData[11];
  gyroZ = (i2cData[12] << 8) | i2cData[13];
  tempRaw = (i2cData[14] << 8) | i2cData[15];
  magX = (i2cData[16] << 8) | i2cData[17];
  magY = (i2cData[18] << 8) | i2cData[19];
  magZ = (i2cData[20] << 8) | i2cData[21];
  

  double dt = (double)(micros() - timer) / 1000000; // Calculate delta time
  timer = micros();

  // Source: http://www.freescale.com/files/sensors/doc/app_note/AN3461.pdf eq. 25 and eq. 26
  // atan2 outputs the value of -π to π (radians) - see http://en.wikipedia.org/wiki/Atan2
  // It is then converted from radians to degrees

  double roll  = atan2(accY, accZ);
  double pitch = atan2((accX),((accY*sin(roll)) + accZ*cos(roll))); 
  double yaw = atan2( (magZ*sin(roll)-magY*cos(roll)) , ((magX*cos(pitch))+(magY*sin(pitch)*sin(roll))+magZ*sin(pitch)*cos(roll)) );
  
  double gyroXrate = gyroX / 131.0; // Convert to deg/s
  double gyroYrate = gyroY / 131.0; // Convert to deg/s
  double gyroZrate = gyroZ / 131.0; // Convert to deg/s

#ifdef RESTRICT_PITCH
  // This fixes the transition problem when the accelerometer angle jumps between -180 and 180 degrees
  if ((roll < -90 && kalAngleX > 90) || (roll > 90 && kalAngleX < -90)) {
    kalmanX.setAngle(roll);
    kalAngleX = roll;
    gyroXangle = roll;
  } else
    kalAngleX = kalmanX.getAngle(roll, gyroXrate, dt); // Calculate the angle using a Kalman filter

  if (abs(kalAngleX) > 90)
    gyroYrate = -gyroYrate; // Invert rate, so it fits the restriced accelerometer reading
  kalAngleY = kalmanY.getAngle(pitch, gyroYrate, dt);
  
else
  // This fixes the transition problem when the accelerometer angle jumps between -180 and 180 degrees
  if ((pitch < -90 && kalAngleY > 90) || (pitch > 90 && kalAngleY < -90)) {
    kalmanY.setAngle(pitch);
    kalAngleY = pitch;
    gyroYangle = pitch;
  } else
    kalAngleY = kalmanY.getAngle(pitch, gyroYrate, dt); // Calculate the angle using a Kalman filter

  if (abs(kalAngleY) > 90)
    gyroXrate = -gyroXrate; // Invert rate, so it fits the restriced accelerometer reading
  kalAngleX = kalmanX.getAngle(roll, gyroXrate, dt); // Calculate the angle using a Kalman filter

else
  // This fixes the transition problem when the accelerometer angle jumps between -180 and 180 degrees
  if ((pitch < -90 && kalAngleY > 90) || (pitch > 90 && kalAngleY < -90)) {
    kalmanZ.setAngle(yaw);
    kalAngleZ  = yaw;
    gyroZangle = yaw;
  } else
    kalAngleZ = kalmanZ.getAngle(yaw, gyroZrate, dt); // Calculate the angle using a Kalman filter

  if (abs(kalAngleZ) > 90)
    gyroZrate = -gyroZrate; // Invert rate, so it fits the restriced accelerometer reading
  kalAngleZ = kalmanZ.getAngle(roll, gyroZrate, dt); // Calculate the angle using a Kalman filter
#endif

  gyroXangle += gyroXrate * dt; // Calculate gyro angle without any filter
  gyroYangle += gyroYrate * dt;
  gyroZangle += gyroZrate * dt;
  //gyroXangle += kalmanX.getRate() * dt; // Calculate gyro angle using the unbiased rate
  //gyroYangle += kalmanY.getRate() * dt;
  //gyroZangle += kalmanZ.getRate() * dt;
 

  compAngleX = 0.93 * (compAngleX + gyroXrate * dt) + 0.07 * roll; // Calculate the angle using a Complimentary filter
  compAngleY = 0.93 * (compAngleY + gyroYrate * dt) + 0.07 * pitch;
  compAngleZ = 0.93 * (compAngleZ + gyroZrate * dt) + 0.07 * yaw;
 

  // Reset the gyro angle when it has drifted too much
  if (gyroXangle < -180 || gyroXangle > 180)
    gyroXangle = kalAngleX;
  if (gyroYangle < -180 || gyroYangle > 180)
    gyroYangle = kalAngleY;
  if (gyroZangle < -180 || gyroZangle > 180)
    gyroZangle = kalAngleZ;

  /* Print Data */
#if 0 // Set to 1 to activate
  Serial.print(accX); Serial.print("\t");
  Serial.print(accY); Serial.print("\t");
  Serial.print(accZ); Serial.print("\t");

  Serial.print(gyroX); Serial.print("\t");
  Serial.print(gyroY); Serial.print("\t");
  Serial.print(gyroZ); Serial.print("\t");

  Serial.print(magX); Serial.print("\t");
  Serial.print(magY); Serial.print("\t");
  Serial.print(magZ); Serial.print("\t");

  Serial.print("\t");
#endif

  Serial.print(roll); Serial.print("\t");
  Serial.print(gyroXangle); Serial.print("\t");
  Serial.print(kalAngleX); Serial.print("\t");

  Serial.print("\t");

  Serial.print(pitch); Serial.print("\t");
  Serial.print(gyroYangle); Serial.print("\t");
  Serial.print(kalAngleY); Serial.print("\t");

  Serial.print("\t");

  Serial.print(yaw); Serial.print("\t");
  Serial.print(gyroZangle); Serial.print("\t");
  Serial.print(kalAngleZ); Serial.print("\t");

#if 0 // Set to 1 to print the temperature
  Serial.print("\t");

  double temperature = (double)tempRaw / 340.0 + 36.53;
  Serial.print(temperature); Serial.print("\t");
#endif

  Serial.print("\r\n");
  delay(2);
}

many thanks guys :slightly_smiling_face:

Images of error messages suck.

Include the entire error message. It is easy to do. There is a button (lower right of the IDE window) called "copy error message". Copy the error and paste into a post in code tags. Paraphrasing the error message leaves out important information.

Post a schematic.

Post an image of your project.

Which Micro Controller are you using?

Is this simulator code?

Please describe the problem better then you just did.

This is the error message from the Arduino IDE that I got:

Arduino: 1.8.19 (Windows 10), Board: "Arduino Nano, ATmega328P (Old Bootloader)"
C:\Program Files (x86)\Arduino\arduino-builder -dump-prefs -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -hardware C:\Users\USER\AppData\Local\Arduino15\packages -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -tools C:\Users\USER\AppData\Local\Arduino15\packages -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\USER\Documents\Arduino\libraries -fqbn=arduino:avr:nano:cpu=atmega328old -vid-pid=0403_6001 -ide-version=10819 -build-path C:\Users\USER\AppData\Local\Temp\arduino_build_515392 -warnings=none -build-cache C:\Users\USER\AppData\Local\Temp\arduino_cache_343207 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.arduinoOTA.path=C:\Users\USER\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Users\USER\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -prefs=runtime.tools.avr-gcc.path=C:\Users\USER\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=C:\Users\USER\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avrdude.path=C:\Users\USER\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\Users\USER\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -verbose D:\Kuliah\SIDANG TA TEPAT WAKTU YOK!\testing_MPU9250_KAALMAN\testing_MPU9250_KAALMAN.ino

C:\Program Files (x86)\Arduino\arduino-builder -compile -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -hardware C:\Users\USER\AppData\Local\Arduino15\packages -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -tools C:\Users\USER\AppData\Local\Arduino15\packages -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\USER\Documents\Arduino\libraries -fqbn=arduino:avr:nano:cpu=atmega328old -vid-pid=0403_6001 -ide-version=10819 -build-path C:\Users\USER\AppData\Local\Temp\arduino_build_515392 -warnings=none -build-cache C:\Users\USER\AppData\Local\Temp\arduino_cache_343207 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.arduinoOTA.path=C:\Users\USER\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Users\USER\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -prefs=runtime.tools.avr-gcc.path=C:\Users\USER\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=C:\Users\USER\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avrdude.path=C:\Users\USER\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\Users\USER\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -verbose D:\Kuliah\SIDANG TA TEPAT WAKTU YOK!\testing_MPU9250_KAALMAN\testing_MPU9250_KAALMAN.ino

Using board 'nano' from platform in folder: C:\Users\USER\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6

Using core 'arduino' from platform in folder: C:\Users\USER\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6

Detecting libraries used...

"C:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\cores\\arduino" "-IC:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\variants\\eightanaloginputs" "C:\\Users\\USER\\AppData\\Local\\Temp\\arduino_build_515392\\sketch\\testing_MPU9250_KAALMAN.ino.cpp" -o nul

Alternatives for Kalman.h: [Kalman@1.1.0]

ResolveLibrary(Kalman.h)

  -> candidates: [Kalman@1.1.0]

"C:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\cores\\arduino" "-IC:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\variants\\eightanaloginputs" "-IC:\\Users\\USER\\Documents\\Arduino\\libraries\\Kalman" "C:\\Users\\USER\\AppData\\Local\\Temp\\arduino_build_515392\\sketch\\testing_MPU9250_KAALMAN.ino.cpp" -o nul

Alternatives for BasicLinearAlgebra.h: [BasicLinearAlgebra@3.6]

ResolveLibrary(BasicLinearAlgebra.h)

  -> candidates: [BasicLinearAlgebra@3.6]

"C:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\cores\\arduino" "-IC:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\variants\\eightanaloginputs" "-IC:\\Users\\USER\\Documents\\Arduino\\libraries\\Kalman" "-IC:\\Users\\USER\\Documents\\Arduino\\libraries\\BasicLinearAlgebra" "C:\\Users\\USER\\AppData\\Local\\Temp\\arduino_build_515392\\sketch\\testing_MPU9250_KAALMAN.ino.cpp" -o nul

Alternatives for MPU9250.h: [MPU9250@0.4.8]

ResolveLibrary(MPU9250.h)

  -> candidates: [MPU9250@0.4.8]

"C:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\cores\\arduino" "-IC:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\variants\\eightanaloginputs" "-IC:\\Users\\USER\\Documents\\Arduino\\libraries\\Kalman" "-IC:\\Users\\USER\\Documents\\Arduino\\libraries\\BasicLinearAlgebra" "-IC:\\Users\\USER\\Documents\\Arduino\\libraries\\MPU9250" "C:\\Users\\USER\\AppData\\Local\\Temp\\arduino_build_515392\\sketch\\testing_MPU9250_KAALMAN.ino.cpp" -o nul

Alternatives for Wire.h: [Wire@1.0]

ResolveLibrary(Wire.h)

  -> candidates: [Wire@1.0]

"C:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\cores\\arduino" "-IC:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\variants\\eightanaloginputs" "-IC:\\Users\\USER\\Documents\\Arduino\\libraries\\Kalman" "-IC:\\Users\\USER\\Documents\\Arduino\\libraries\\BasicLinearAlgebra" "-IC:\\Users\\USER\\Documents\\Arduino\\libraries\\MPU9250" "-IC:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\libraries\\Wire\\src" "C:\\Users\\USER\\AppData\\Local\\Temp\\arduino_build_515392\\sketch\\testing_MPU9250_KAALMAN.ino.cpp" -o nul

"C:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\cores\\arduino" "-IC:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\variants\\eightanaloginputs" "-IC:\\Users\\USER\\Documents\\Arduino\\libraries\\Kalman" "-IC:\\Users\\USER\\Documents\\Arduino\\libraries\\BasicLinearAlgebra" "-IC:\\Users\\USER\\Documents\\Arduino\\libraries\\MPU9250" "-IC:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\libraries\\Wire\\src" "C:\\Users\\USER\\Documents\\Arduino\\libraries\\Kalman\\Kalman.cpp" -o nul

"C:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\cores\\arduino" "-IC:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\variants\\eightanaloginputs" "-IC:\\Users\\USER\\Documents\\Arduino\\libraries\\Kalman" "-IC:\\Users\\USER\\Documents\\Arduino\\libraries\\BasicLinearAlgebra" "-IC:\\Users\\USER\\Documents\\Arduino\\libraries\\MPU9250" "-IC:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\libraries\\Wire\\src" "C:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\libraries\\Wire\\src\\Wire.cpp" -o nul

"C:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\cores\\arduino" "-IC:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\variants\\eightanaloginputs" "-IC:\\Users\\USER\\Documents\\Arduino\\libraries\\Kalman" "-IC:\\Users\\USER\\Documents\\Arduino\\libraries\\BasicLinearAlgebra" "-IC:\\Users\\USER\\Documents\\Arduino\\libraries\\MPU9250" "-IC:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\libraries\\Wire\\src" "C:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\libraries\\Wire\\src\\utility\\twi.c" -o nul

Generating function prototypes...

"C:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\cores\\arduino" "-IC:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\variants\\eightanaloginputs" "-IC:\\Users\\USER\\Documents\\Arduino\\libraries\\Kalman" "-IC:\\Users\\USER\\Documents\\Arduino\\libraries\\BasicLinearAlgebra" "-IC:\\Users\\USER\\Documents\\Arduino\\libraries\\MPU9250" "-IC:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\libraries\\Wire\\src" "C:\\Users\\USER\\AppData\\Local\\Temp\\arduino_build_515392\\sketch\\testing_MPU9250_KAALMAN.ino.cpp" -o "C:\\Users\\USER\\AppData\\Local\\Temp\\arduino_build_515392\\preproc\\ctags_target_for_gcc_minus_e.cpp"

"C:\\Program Files (x86)\\Arduino\\tools-builder\\ctags\\5.8-arduino11/ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives "C:\\Users\\USER\\AppData\\Local\\Temp\\arduino_build_515392\\preproc\\ctags_target_for_gcc_minus_e.cpp"

Compiling sketch...

"C:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\cores\\arduino" "-IC:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\variants\\eightanaloginputs" "-IC:\\Users\\USER\\Documents\\Arduino\\libraries\\Kalman" "-IC:\\Users\\USER\\Documents\\Arduino\\libraries\\BasicLinearAlgebra" "-IC:\\Users\\USER\\Documents\\Arduino\\libraries\\MPU9250" "-IC:\\Users\\USER\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\libraries\\Wire\\src" "C:\\Users\\USER\\AppData\\Local\\Temp\\arduino_build_515392\\sketch\\testing_MPU9250_KAALMAN.ino.cpp" -o "C:\\Users\\USER\\AppData\\Local\\Temp\\arduino_build_515392\\sketch\\testing_MPU9250_KAALMAN.ino.cpp.o"

testing_MPU9250_KAALMAN:48:19: error: conflicting declaration 'uint8_t i2cData [14]'

 uint8_t i2cData[14]; // Buffer for I2C data

                   ^

D:\Kuliah\SIDANG TA TEPAT WAKTU YOK!\testing_MPU9250_KAALMAN\testing_MPU9250_KAALMAN.ino:42:8: note: previous declaration as 'double i2cData'

 double i2cData;

        ^~~~~~~

I2C:37:71: error: 'uint8_t i2cRead(uint8_t, uint8_t*, uint8_t)' redeclared as different kind of symbol

 uint8_t i2cRead(uint8_t registerAddress, uint8_t *data, uint8_t nbytes) {

                                                                       ^

D:\Kuliah\SIDANG TA TEPAT WAKTU YOK!\testing_MPU9250_KAALMAN\testing_MPU9250_KAALMAN.ino:43:8: note: previous declaration 'double i2cRead'

 double i2cRead;

        ^~~~~~~

D:\Kuliah\SIDANG TA TEPAT WAKTU YOK!\testing_MPU9250_KAALMAN\testing_MPU9250_KAALMAN.ino: In function 'void setup()':

testing_MPU9250_KAALMAN:60:12: error: invalid types 'double[int]' for array subscript

   i2cData[0] = 7; // Set the sample rate to 1000Hz - 8kHz/(7+1) = 1000Hz

            ^

testing_MPU9250_KAALMAN:61:12: error: invalid types 'double[int]' for array subscript

   i2cData[1] = 0x00; // Disable FSYNC and set 260 Hz Acc filtering, 256 Hz Gyro filtering, 8 KHz sampling

            ^

testing_MPU9250_KAALMAN:62:12: error: invalid types 'double[int]' for array subscript

   i2cData[2] = 0x00; // Set Gyro Full Scale Range to ±250deg/s

            ^

testing_MPU9250_KAALMAN:63:12: error: invalid types 'double[int]' for array subscript

   i2cData[3] = 0x00; // Set Accelerometer Full Scale Range to ±2g

            ^

testing_MPU9250_KAALMAN:64:41: error: 'i2cData' cannot be used as a function

   while (i2cData(0x19, i2cData, 4, false)); // Write to all four registers at once

                                         ^

testing_MPU9250_KAALMAN:65:34: error: 'i2cData' cannot be used as a function

   while (i2cData(0x6B, 0x01, true)); // PLL with X axis gyroscope reference and disable sleep mode

                                  ^

testing_MPU9250_KAALMAN:68:34: error: 'i2cRead' cannot be used as a function

   while (i2cRead(0x75, i2cData, 1));

                                  ^

testing_MPU9250_KAALMAN:69:16: error: invalid types 'double[int]' for array subscript

   if (i2cData[0] != 0x68) { // Read "WHO_AM_I" register

                ^

testing_MPU9250_KAALMAN:77:34: error: 'i2cRead' cannot be used as a function

   while (i2cRead(0x3B, i2cData, 6));

                                  ^

testing_MPU9250_KAALMAN:78:20: error: invalid types 'double[int]' for array subscript

   accX = (i2cData[0] << 8);

                    ^

testing_MPU9250_KAALMAN:79:20: error: invalid types 'double[int]' for array subscript

   accY = (i2cData[2] << 8);

                    ^

testing_MPU9250_KAALMAN:80:20: error: invalid types 'double[int]' for array subscript

   accZ = (i2cData[4] << 8);

                    ^

testing_MPU9250_KAALMAN:91:11: error: request for member 'setAngle' in 'kalmanX', which is of non-class type 'float'

   kalmanX.setAngle(roll); // Set starting angle

           ^~~~~~~~

testing_MPU9250_KAALMAN:92:11: error: request for member 'setAngle' in 'kalmanY', which is of non-class type 'float'

   kalmanY.setAngle(pitch);

           ^~~~~~~~

testing_MPU9250_KAALMAN:93:11: error: request for member 'setAngle' in 'kalmanZ', which is of non-class type 'float'

   kalmanZ.setAngle(yaw);

           ^~~~~~~~

testing_MPU9250_KAALMAN:97:3: error: 'compAngleX' was not declared in this scope

   compAngleX = roll;

   ^~~~~~~~~~

D:\Kuliah\SIDANG TA TEPAT WAKTU YOK!\testing_MPU9250_KAALMAN\testing_MPU9250_KAALMAN.ino:97:3: note: suggested alternative: 'kalAngleX'

   compAngleX = roll;

   ^~~~~~~~~~

   kalAngleX

testing_MPU9250_KAALMAN:98:3: error: 'compAngleY' was not declared in this scope

   compAngleY = pitch;

   ^~~~~~~~~~

D:\Kuliah\SIDANG TA TEPAT WAKTU YOK!\testing_MPU9250_KAALMAN\testing_MPU9250_KAALMAN.ino:98:3: note: suggested alternative: 'kalAngleY'

   compAngleY = pitch;

   ^~~~~~~~~~

   kalAngleY

testing_MPU9250_KAALMAN:99:3: error: 'compAngleZ' was not declared in this scope

   compAngleZ = yaw;

   ^~~~~~~~~~

D:\Kuliah\SIDANG TA TEPAT WAKTU YOK!\testing_MPU9250_KAALMAN\testing_MPU9250_KAALMAN.ino:99:3: note: suggested alternative: 'kalAngleZ'

   compAngleZ = yaw;

   ^~~~~~~~~~

   kalAngleZ

D:\Kuliah\SIDANG TA TEPAT WAKTU YOK!\testing_MPU9250_KAALMAN\testing_MPU9250_KAALMAN.ino: In function 'void loop()':

testing_MPU9250_KAALMAN:105:35: error: 'i2cRead' cannot be used as a function

   while (i2cRead(0x3B, i2cData, 14));

                                   ^

testing_MPU9250_KAALMAN:106:21: error: invalid types 'double[int]' for array subscript

   accX = ((i2cData[0] << 8) | i2cData[1]);

                     ^

testing_MPU9250_KAALMAN:106:40: error: invalid types 'double[int]' for array subscript

   accX = ((i2cData[0] << 8) | i2cData[1]);

                                        ^

testing_MPU9250_KAALMAN:107:21: error: invalid types 'double[int]' for array subscript

   accY = ((i2cData[2] << 8) | i2cData[3]);

                     ^

testing_MPU9250_KAALMAN:107:40: error: invalid types 'double[int]' for array subscript

   accY = ((i2cData[2] << 8) | i2cData[3]);

                                        ^

testing_MPU9250_KAALMAN:108:21: error: invalid types 'double[int]' for array subscript

   accZ = ((i2cData[4] << 8) | i2cData[5]);

                     ^

testing_MPU9250_KAALMAN:108:40: error: invalid types 'double[int]' for array subscript

   accZ = ((i2cData[4] << 8) | i2cData[5]);

                                        ^

testing_MPU9250_KAALMAN:109:23: error: invalid types 'double[int]' for array subscript

   tempRaw = (i2cData[6] << 8) | i2cData[7];

                       ^

testing_MPU9250_KAALMAN:109:42: error: invalid types 'double[int]' for array subscript

   tempRaw = (i2cData[6] << 8) | i2cData[7];

                                          ^

testing_MPU9250_KAALMAN:110:21: error: invalid types 'double[int]' for array subscript

   gyroX = (i2cData[8] << 8) | i2cData[9];

                     ^

testing_MPU9250_KAALMAN:110:40: error: invalid types 'double[int]' for array subscript

   gyroX = (i2cData[8] << 8) | i2cData[9];

                                        ^

testing_MPU9250_KAALMAN:111:22: error: invalid types 'double[int]' for array subscript

   gyroY = (i2cData[10] << 8) | i2cData[11];

                      ^

testing_MPU9250_KAALMAN:111:42: error: invalid types 'double[int]' for array subscript

   gyroY = (i2cData[10] << 8) | i2cData[11];

                                          ^

testing_MPU9250_KAALMAN:112:22: error: invalid types 'double[int]' for array subscript

   gyroZ = (i2cData[12] << 8) | i2cData[13];

                      ^

testing_MPU9250_KAALMAN:112:42: error: invalid types 'double[int]' for array subscript

   gyroZ = (i2cData[12] << 8) | i2cData[13];

                                          ^

testing_MPU9250_KAALMAN:113:24: error: invalid types 'double[int]' for array subscript

   tempRaw = (i2cData[14] << 8) | i2cData[15];

                        ^

testing_MPU9250_KAALMAN:113:44: error: invalid types 'double[int]' for array subscript

   tempRaw = (i2cData[14] << 8) | i2cData[15];

                                            ^

testing_MPU9250_KAALMAN:114:21: error: invalid types 'double[int]' for array subscript

   magX = (i2cData[16] << 8) | i2cData[17];

                     ^

testing_MPU9250_KAALMAN:114:41: error: invalid types 'double[int]' for array subscript

   magX = (i2cData[16] << 8) | i2cData[17];

                                         ^

testing_MPU9250_KAALMAN:115:21: error: invalid types 'double[int]' for array subscript

   magY = (i2cData[18] << 8) | i2cData[19];

                     ^

testing_MPU9250_KAALMAN:115:41: error: invalid types 'double[int]' for array subscript

   magY = (i2cData[18] << 8) | i2cData[19];

                                         ^

testing_MPU9250_KAALMAN:116:21: error: invalid types 'double[int]' for array subscript

   magZ = (i2cData[20] << 8) | i2cData[21];

                     ^

testing_MPU9250_KAALMAN:116:41: error: invalid types 'double[int]' for array subscript

   magZ = (i2cData[20] << 8) | i2cData[21];

                                         ^

testing_MPU9250_KAALMAN:137:13: error: request for member 'setAngle' in 'kalmanX', which is of non-class type 'float'

     kalmanX.setAngle(roll);

             ^~~~~~~~

testing_MPU9250_KAALMAN:141:25: error: request for member 'getAngle' in 'kalmanX', which is of non-class type 'float'

     kalAngleX = kalmanX.getAngle(roll, gyroXrate, dt); // Calculate the angle using a Kalman filter

                         ^~~~~~~~

testing_MPU9250_KAALMAN:145:23: error: request for member 'getAngle' in 'kalmanY', which is of non-class type 'float'

   kalAngleY = kalmanY.getAngle(pitch, gyroYrate, dt);

                       ^~~~~~~~

testing_MPU9250_KAALMAN:147:1: error: 'else' without a previous 'if'

 else

 ^~~~

testing_MPU9250_KAALMAN:150:13: error: request for member 'setAngle' in 'kalmanY', which is of non-class type 'float'

     kalmanY.setAngle(pitch);

             ^~~~~~~~

testing_MPU9250_KAALMAN:154:25: error: request for member 'getAngle' in 'kalmanY', which is of non-class type 'float'

     kalAngleY = kalmanY.getAngle(pitch, gyroYrate, dt); // Calculate the angle using a Kalman filter

                         ^~~~~~~~

testing_MPU9250_KAALMAN:158:23: error: request for member 'getAngle' in 'kalmanX', which is of non-class type 'float'

   kalAngleX = kalmanX.getAngle(roll, gyroXrate, dt); // Calculate the angle using a Kalman filter

                       ^~~~~~~~

testing_MPU9250_KAALMAN:160:1: error: 'else' without a previous 'if'

 else

 ^~~~

testing_MPU9250_KAALMAN:163:13: error: request for member 'setAngle' in 'kalmanZ', which is of non-class type 'float'

     kalmanZ.setAngle(yaw);

             ^~~~~~~~

testing_MPU9250_KAALMAN:167:25: error: request for member 'getAngle' in 'kalmanZ', which is of non-class type 'float'

     kalAngleZ = kalmanZ.getAngle(yaw, gyroZrate, dt); // Calculate the angle using a Kalman filter

                         ^~~~~~~~

testing_MPU9250_KAALMAN:171:23: error: request for member 'getAngle' in 'kalmanZ', which is of non-class type 'float'

   kalAngleZ = kalmanZ.getAngle(roll, gyroZrate, dt); // Calculate the angle using a Kalman filter

                       ^~~~~~~~

testing_MPU9250_KAALMAN:182:3: error: 'compAngleX' was not declared in this scope

   compAngleX = 0.93 * (compAngleX + gyroXrate * dt) + 0.07 * roll; // Calculate the angle using a Complimentary filter

   ^~~~~~~~~~

D:\Kuliah\SIDANG TA TEPAT WAKTU YOK!\testing_MPU9250_KAALMAN\testing_MPU9250_KAALMAN.ino:182:3: note: suggested alternative: 'kalAngleX'

   compAngleX = 0.93 * (compAngleX + gyroXrate * dt) + 0.07 * roll; // Calculate the angle using a Complimentary filter

   ^~~~~~~~~~

   kalAngleX

testing_MPU9250_KAALMAN:183:3: error: 'compAngleY' was not declared in this scope

   compAngleY = 0.93 * (compAngleY + gyroYrate * dt) + 0.07 * pitch;

   ^~~~~~~~~~

D:\Kuliah\SIDANG TA TEPAT WAKTU YOK!\testing_MPU9250_KAALMAN\testing_MPU9250_KAALMAN.ino:183:3: note: suggested alternative: 'kalAngleY'

   compAngleY = 0.93 * (compAngleY + gyroYrate * dt) + 0.07 * pitch;

   ^~~~~~~~~~

   kalAngleY

testing_MPU9250_KAALMAN:184:3: error: 'compAngleZ' was not declared in this scope

   compAngleZ = 0.93 * (compAngleZ + gyroZrate * dt) + 0.07 * yaw;

   ^~~~~~~~~~

D:\Kuliah\SIDANG TA TEPAT WAKTU YOK!\testing_MPU9250_KAALMAN\testing_MPU9250_KAALMAN.ino:184:3: note: suggested alternative: 'kalAngleZ'

   compAngleZ = 0.93 * (compAngleZ + gyroZrate * dt) + 0.07 * yaw;

   ^~~~~~~~~~

   kalAngleZ

D:\Kuliah\SIDANG TA TEPAT WAKTU YOK!\testing_MPU9250_KAALMAN\I2C.ino: In function 'uint8_t i2cRead(uint8_t, uint8_t*, uint8_t)':

I2C:37:71: error: 'uint8_t i2cRead(uint8_t, uint8_t*, uint8_t)' redeclared as different kind of symbol

 uint8_t i2cRead(uint8_t registerAddress, uint8_t *data, uint8_t nbytes) {

                                                                       ^

D:\Kuliah\SIDANG TA TEPAT WAKTU YOK!\testing_MPU9250_KAALMAN\testing_MPU9250_KAALMAN.ino:43:8: note: previous declaration 'double i2cRead'

 double i2cRead;

        ^~~~~~~

Using library Kalman at version 1.1.0 in folder: C:\Users\USER\Documents\Arduino\libraries\Kalman 

Using library BasicLinearAlgebra at version 3.6 in folder: C:\Users\USER\Documents\Arduino\libraries\BasicLinearAlgebra 

Using library MPU9250 at version 0.4.8 in folder: C:\Users\USER\Documents\Arduino\libraries\MPU9250 

Using library Wire at version 1.0 in folder: C:\Users\USER\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries\Wire 

exit status 1

conflicting declaration 'uint8_t i2cData [14]'

Yes, this is simulator code. I'm using Arduino Nano ATMEGA328

The TKJ Electronics offering is not a Kalman filter, and doesn't work well, so don't bother with it.

Adafruit has a genuine Kalman filter for a different IMU, and that should not be too difficult to adapt to the obsolete, discontinued MPU-9250, if there is any point in doing so.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.