Using fscanf, won't print out second row of data

4 views (last 30 days)
I'm having trouble using the fscanf command to show the two different data points that are being sent over a com port. The data that is coming from the com port looks like this:
X,Y
1,6
2,5
3,4
4,3
5,2
6,1
Where each set of 0,0 is in a single cell.
I would like the data to look like this
X: 1, 2, 3, 4, 5, 6
Y: 6, 5, 4, 3, 2, 1
Please help if you can! I need to get this working soon. Thank you in advance!
%% Clearing COM PORTS
delete(instrfindall)
%% Create the serial object
serialPort = 'COM4';
serialObject = serial(serialPort,'BaudRate',38400, 'DataBits',8);
fopen(serialObject);
%% Set the instrument in remote mode
fprintf(serialObject,'%f,%f');
%% Set the time span and interval for data collection
stopTime = '14:31';
timeInterval = 0.0025;
%% Collect data
count = [1,1];
while ~isequal(datestr(now,'MM:SS'),stopTime)
time(count) = datenum(clock);
position(count) = fscanf(serialObject,'%f,%f');
pause(timeInterval);
count = count +1;
end
fclose(serialObject);
delete(serialObject);
clear serialObject;

Accepted Answer

Walter Roberson
Walter Roberson on 9 Feb 2013
Edited: Walter Roberson on 9 Feb 2013
You have
fprintf(serialObject,'%f,%f');
fprintf() is to send data, but you have not included any data to send. Perhaps the instrument is not in remote mode because of this problem.
Also, I suspect that for that instrument you will need to set the serial port Terminator property; I suspect it sends CR or CR+LF

More Answers (2)

Brandon
Brandon on 11 Feb 2013
Ok, some of that makes sense to me.
I commented out the fprintf( and the code still works the same. Maybe the code I am trying to adapt to my device isn't exactly right.
I am using an arduino that has already been programmed. Basically what the arduino is doing is sending dx and dy position through a usb cable. I need to open the com port to save the data in matlab. The dx and dy originally is received in one cell. Like this dx,dy dx,dy ... Right now only dy is showing up. Let me know if you need anything else and thank you again for your help.
  3 Comments
Brandon
Brandon on 11 Feb 2013
So how would I be able to store two values?
Walter Roberson
Walter Roberson on 11 Feb 2013
position(count,:) = fscanf(serialObject,'%d,%d');

Sign in to comment.


Brandon
Brandon on 11 Feb 2013
What if I add two different fscanf( lines, like this:
position_x(count) = fscanf(serialObject,'%d,%d*');
position_y(count) = fscanf(serialObject,'%d*,%d');
  1 Comment
Brandon
Brandon on 11 Feb 2013
I messed up on the location of the * the code should be:
position_x(count) = fscanf(serialObject,'%d,%*d');
position_y(count) = fscanf(serialObject,'%*d,%d');
This worked for me. Thanks for the help.
I just need to speed up the refresh rate now. If you have any ideas on that let me know. Thanks

Sign in to comment.

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!