Great package! Thank you very much! I am having some trouble reading the temperature with a.i2cRead(hex2dec('5A'), hex2dec('07')) and I get the temperature delayed of one or something like that, each time I put my hand in fron t of the IR sensor, I have to execute that line of code twice in order to get 30 degrees because the first one gives me the ambient temperature and viceversa when I put my hand away, the first one still gives me the hand temperature(no matter how much I wait) and the second one gives me the real temperature, any help? Thanks!!
Hi Ingmar, very sorry for the long waiting. I was traveling overseas last month. Last time when I was about to update it, I found the file was not in my hand. Now, I just submitted the update.
Honestly, I tested repeatedly but still didn't completely eliminate the timeout bug. But by setting a longer serial waiting time and adding more checking statements, the timeout very seldom shows up and can be tolerated for the code to proceed.
Regarding your problem, I guess maybe you can put a serial flush after your a.ITG3200Read function instead of an actual serial write. But anyways, as long as it works for you, you can keep your way. Good luck with your project.
Hi Zhuo, big thanks for the quick response. I'm looking forward to your update. In the mean time, I wrote an extra function to read out the gyroscope that I was talking about.
I found a library supporting the gyroscope so it was rather easy to supplement the arduino.m, the adiosrv.pde and simulink library with an ITG3200 (the gyroscope) Read function.
It is quite funny because in the beginning I received the same error. The first time I executed my a.ITG3200Read function I received the time out error. But when I executed a second fwrite right after the a.ITG3200Read function I received the values. Any fwrite function would do the trick (the values were also send if I did an a.analogRead).
So I fixed the problem by adding a second fwrite command in de arduino.m file right after the first one because it seemed that after the first fwrite, the values were stored in the arduino and by executing the second fwrite it was read by matlab.
I'm not much of a programmer but I can imagine that this solution is at least a bit unorthodox. But to be honest, it seems to do the trick so I am not going to worry about it.
I am still looking forward to your update though, because your block is far more general from what I have done.
Hi Ingmar, sorry for the inconvinience. I remember I discovered that not long after I uploaded the block, then I made some improvement but never got it updated. Now, I've updated it, you should be able to see the corrected file days later after Mathworks process it. It works better, but I sometimes still recieve the serial reading timeout error, and don't know how to eliminate it.
Also on my behalf a big thanks Zhuo. It would be great to see this block up and running in Simulink.
Unfortunately, I encounter the same problem as Mitch Torrens. I try to read out an IMU (https://www.sparkfun.com/products/10724) connected to an Arduino Uno via i2c block but no read out occurs and the workspace gives me the following warning.
Warning: Unsuccessful read: A timeout occurred before the Terminator was reached.
I am particularly interested in the gyro located on the IMU but I also tried to read out the accelerometer (ADXL345) which gave me the same problem.
Any of you guys found a solution to it yet?