I have my mpu6050 (GY-521) connected to Arduino uno and run S function perfectly but now i want to use two sensors at the same time. After wiring both mpu6050s i can change the library in S function to read 0x68 or 0x69 and respected sensor will send data to simulink but i can't get both of them at the same time I tried copying the S function for the other sensor and change the library (one of them is 0x68 and the other is 0x69) and run it, but i get some errors. Then I tried to change outputs in S function to read both sensor data simultaneously but i again get error messages. Has somebody done it? How can i solve it? my S function is like this: libraries: #ifndef MATLAB_MEX_FILE #define ARDUINO 100 #include #include #include #include #include #define MPU 0x68 #endif Outputs: #ifndef MATLAB_MEX_FILE Wire.beginTransmission(MPU); Wire.write(0x3B); Wire.endTransmission(false); Wire.requestFrom(MPU, 14, true); int raw = Wire.read() << 8; raw = raw | Wire.read(); ax[0] = (float)raw / 2048.0f; raw = Wire.read() << 8; raw = raw | Wire.read(); ay[0] = (float)raw / 2048.0f; raw = Wire.read() << 8; raw = raw | Wire.read(); az[0] = (float)raw / 2048.0f; raw = Wire.read() << 8; raw = raw | Wire.read(); temp[0] = (float)raw / 340.0f + 36.53f; raw = Wire.read() << 8; raw = raw | Wire.read(); gx[0] = (float)raw / 131.0f; raw = Wire.read() << 8; raw = raw | Wire.read(); gy[0] = (float)raw / 131.0f; raw = Wire.read() << 8; raw = raw | Wire.read(); gz[0] = (float)raw / 131.0f; #endif Update: #ifndef MATLAB_MEX_FILE if (xD[0] != 1) { Wire.begin(); /* Do not sleep */ Wire.beginTransmission(MPU); Wire.write(0x6B); Wire.write(0); Wire.endTransmission(true); /* Gyroscope full scale range: 250 degs/s */ Wire.beginTransmission(MPU); Wire.write(0x1B); Wire.write(0); Wire.endTransmission(true); /* Accelerometer full scale range: 4g */ Wire.beginTransmission(MPU); Wire.write(0x1C); Wire.endTransmission(); Wire.requestFrom(MPU, 1); byte x = Wire.read(); //the value of Register-28 is in x x = x | 0b00011000; //appending values of Bit4 and Bit3 Wire.beginTransmission(MPU); Wire.write(0x1C); //pointing Register-28 Wire.write(x); //value for Register-28; Full-scale range is now +/- 16g Wire.endTransmission(); xD[0] = 1; } #endif
Neeta Dsouza answered .
2025-11-20
#ifndef MATLAB_MEX_FILE #define ARDUINO 100 #include #include #include #include #include #define MPU01 0x68 #define MPU02 0x69 #define MPU #endif
Outputs:
#ifndef MATLAB_MEX_FILE Wire.beginTransmission(MPU01); Wire.write(0x3B); Wire.endTransmission(false); Wire.requestFrom(MPU01, 14, true); int raw = Wire.read() << 8; raw = raw | Wire.read(); ax68[0] = (float)raw / 2048.0f; raw = Wire.read() << 8; raw = raw | Wire.read(); ay68[0] = (float)raw / 2048.0f; raw = Wire.read() << 8; raw = raw | Wire.read(); az68[0] = (float)raw / 2048.0f; raw = Wire.read() << 8; raw = raw | Wire.read(); gx68[0] = (float)raw / 131.0f; raw = Wire.read() << 8; raw = raw | Wire.read(); gy68[0] = (float)raw / 131.0f; raw = Wire.read() << 8; raw = raw | Wire.read(); gz68[0] = (float)raw / 131.0f; Wire.beginTransmission(MPU02); Wire.write(0x3B); Wire.endTransmission(false); Wire.requestFrom(MPU02, 14, true); raw = Wire.read() << 8; raw = raw | Wire.read(); ax69[0] = (float)raw / 2048.0f; raw = Wire.read() << 8; raw = raw | Wire.read(); ay69[0] = (float)raw / 2048.0f; raw = Wire.read() << 8; raw = raw | Wire.read(); az69[0] = (float)raw / 2048.0f; raw = Wire.read() << 8; raw = raw | Wire.read(); gx69[0] = (float)raw / 131.0f; raw = Wire.read() << 8; raw = raw | Wire.read(); gy69[0] = (float)raw / 131.0f; raw = Wire.read() << 8; raw = raw | Wire.read(); gz69[0] = (float)raw / 131.0f; #endif
Update:
#ifndef MATLAB_MEX_FILE
if (xD[0] != 1) {
Wire.begin();
/* Do not sleep */
Wire.beginTransmission(MPU01);
Wire.write(0x6B);
Wire.write(0);
Wire.endTransmission(true);
/* Gyroscope full scale range: 250 degs/s */
Wire.beginTransmission(MPU01);
Wire.write(0x1B);
Wire.write(0);
Wire.endTransmission(true);
/* Accelerometer full scale range: 4g */
Wire.beginTransmission(MPU01);
Wire.write(0x1C);
Wire.endTransmission();
Wire.requestFrom(MPU01, 1);
byte x = Wire.read(); //the value of Register-28 is in x
x = x | 0b00011000; //appending values of Bit4 and Bit3
Wire.beginTransmission(MPU01);
Wire.write(0x1C); //pointing Register-28
Wire.write(x); //value for Register-28; Full-scale range is now +/- 16g
Wire.endTransmission();
/* Do not sleep */
Wire.beginTransmission(MPU02);
Wire.write(0x6B);
Wire.write(0);
Wire.endTransmission(true);
/* Gyroscope full scale range: 250 degs/s */
Wire.beginTransmission(MPU02);
Wire.write(0x1B);
Wire.write(0);
Wire.endTransmission(true);
/* Accelerometer full scale range: 4g */
Wire.beginTransmission(MPU02);
Wire.write(0x1C);
Wire.endTransmission();
Wire.requestFrom(MPU02, 1);
byte y = Wire.read(); //the value of Register-28 is in x
y = y | 0b00011000; //appending values of Bit4 and Bit3
Wire.beginTransmission(MPU02);
Wire.write(0x1C); //pointing Register-28
Wire.write(y); //value for Register-28; Full-scale range is now +/- 16g
Wire.endTransmission();
xD[0] = 1;
}
#endif