Welcome to Synthiam!

Program robots using technologies created from industry experts. ARC is our free-to-use robot programming software that makes features like vision recognition, navigation and artificial intelligence easy.

Get Started
Pakistan
Asked — Edited

I2c In C# Not Reading Values

I have mpu-6050 6dof imu. I want to read the value of who_am_i register with register number 0x75. The register returns address 0x68. But I am getting 255. The device address is 0x68 as well.
Code is as follows:

byte[] ret = ezB_Connect1.EZB.I2C.Read(I2C.ReadArgsEnum.Auto,0x75,1);

here is the register description for the device:RM-MPU-6000A.pdf

I checked my imu with arduino and it works fine. So, any help here?

AI Support Bot
Related Content
Synthiam
Based on your post activity, we found some content that may be interesting to you. Explore these other tutorials and community conversations.
PRO
Synthiam
#2  
You got it working? Can you share your code please:)
#3  
Sure! But it will take a couple of days in applying the filter and all, then I would share the final product!:)
PRO
Synthiam
#4  
awesome! I'm looking forward to seeing your success:D
#5  
Hi
I have mpu-6050 too and i try to read the value from C# and i have some problems...

I tried this command :
ezB_Connect1.EZB.I2C.Read(I2C.ReadArgsEnum.Auto,0x75,1);
and it does't work cause there is this method "I2C.ReadArgsEnum.Auto" more over the read method accept only 2 values....
Does it exist some where a sample to use the device mpu-6050 by using C# ?


*confused* *confused*
PRO
Synthiam
#6  
Please share your code.

Also, in visual studio there is auto complete, which shows you the command syntax as you type.


Removed duplicate thread.
PRO
Synthiam
#7  
ps, i upgraded the EZ-SDK today - ensure you upgrade as well.

Now that i'm in front of a PC, here's example code...

Code:


public class MPU6050Example {

MPU6050 _mpu;

public FormMPU6050() {

InitializeComponent();

// Create the mpu6050 object
// Include a reference to the EZB (most likely in your EZB Connection UserControl)
_mpu = new MPU6050(ucEZBConnect1.EZB);
}

private void btnInit_Click(object sender, EventArgs e) {

// Init is required before you can begin obtaining data
_mpu.Init();
}

void getData() {

try {

EZ_B.Classes.MPU6050Cls response = _mpu.GetData();

// do something with the data

} catch (Exception ex) {

// handle your exception
} finally {

}
}
}
#8  
Hi DJ Sures
You are crédible :-) , i just ask a new api and you made it in few minutes. thank you very much. I have included your code in my visual studio and tried to print the value of the Gyro but the values of the gyro are initials

label2.Text = response.GyroX.ToString(); // value 0
label3.Text = response.GyroY.ToString(); // value 0

there is something wrong in my code i think. i keep on to look for and keep you inform
thank you again. *tired*
#9  
Hi DJ sures
It's OK, that works fine when i call the init function before the get data.
Thank you have a good week end.
Bye Christophe
:):)
#10  
Hi DJ Sures
My projet works fine but I have just a remark to say. I think that you have reversed :
- the value GyroX with the AccelX
- the value GyroY with the AccelY
Thank you again.
Bye Christophe
PRO
Synthiam
#11  
The data collected is correct, they are not reversed.

Code:


public Classes.MPU6050Cls GetData() {

_ezb.I2C.Write(0x68, new byte[] { 0x3B });

byte [] everything = _ezb.I2C.Read(0x68, 14).Reverse().ToArray();

Classes.MPU6050Cls cls = new Classes.MPU6050Cls();

cls.AccelX = BitConverter.ToInt16(everything, 12);
cls.AccelY = BitConverter.ToInt16(everything, 10);
cls.AccelZ = BitConverter.ToInt16(everything, 8);
cls.TmpC = (BitConverter.ToUInt16(everything, 6) / 340) + 35;
cls.GyroX = BitConverter.ToInt16(everything, 4);
cls.GyroY = BitConverter.ToInt16(everything, 2);
cls.GyroZ = BitConverter.ToInt16(everything, 0);

return cls;
}