How can you separate incoming serial data?

22 次查看(过去 30 天)
I have incoming serial data from an Arduino board that update continuously. The data is separated by questions marks (?). How would I go about reading the data in MATLAB and separating it into a (12x1) column vector so I can call an index of that vector? I have tried fscanf() but have been unable to get the results I want.
From Arduino:
152?-9?215?-669?2541?1273?-141?27?-452?20.30?97242.00?345.62? ect
delete(instrfind)
s=serial('COM4','BaudRate',9600); %start serial port to arduino
s.ReadAsyncMode = 'continuous';
fopen(s); %open port
while (s.Status == 'open')
C=fscanf(s, '?');
C
if(s.Status ~= 'open')
break;
end
end

采纳的回答

Matthias
Matthias 2013-4-20
I don't have an Arduino, so I couldn't test it. But how about that:
c_str=regexp(C,'?','split');
  1 个评论
alex korzaniewski
alex korzaniewski 2013-4-20
编辑:alex korzaniewski 2013-4-20
Thank you so much for the quick reply. The code worked perfectly and did exactly what I wanted. I ended up with:
delete(instrfind)
s=serial('COM4','BaudRate',9600); %start serial port to arduino
s.ReadAsyncMode = 'continuous';
fopen(s); %open port
while (s.Status == 'open')
C=fscanf(s);
c_str = regexp(C, '?', 'split')
if(s.Status ~= 'open')
break;
end
end
With this, I was able to get a matrix where I could pull out certain indexes. Ex:
c_str =
Columns 1 through 6
'143' '-10' '216' '-59' '-11' '-206'
Columns 7 through 11
'-133' '-115' '-483' '21.70' '97483.00'
Columns 12 through 13
'324.90' [1x2 char]
c_str(10) =
'21.70'
This is real time data collected from a 10 DOF IMU.
Thanks again for the help!!

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 MATLAB Support Package for Arduino Hardware 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by