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

2 visualizzazioni (ultimi 30 giorni)
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;

Risposta accettata

Walter Roberson
Walter Roberson il 9 Feb 2013
Modificato: Walter Roberson il 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

Più risposte (2)

Brandon
Brandon il 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 Commenti
Brandon
Brandon il 11 Feb 2013
So how would I be able to store two values?
Walter Roberson
Walter Roberson il 11 Feb 2013
position(count,:) = fscanf(serialObject,'%d,%d');

Accedi per commentare.


Brandon
Brandon il 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 Commento
Brandon
Brandon il 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

Accedi per commentare.

Categorie

Scopri di più su Use COM Objects in MATLAB in Help Center e File Exchange

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by