Parsing data from serial port
2 views (last 30 days)
Show older comments
Hi,
I communicate with a DsPIC
i have a constant format for a message:
HEADER1 HEADER2 OPCODE DATA CHECKSUM (no spaces)
in my MATLAB GUI i want to read the incoming message, chk if i get the HEADER1 I EXPCT, then chk to see i get HEADER2 i expect , if so: get OPCODE and DATA and do with that something
how can i split my message?
thought about switch;case
wanted to know if there is something more "elegant"
Thanks
2 Comments
Walter Roberson
on 11 Apr 2016
Is that a text format or a numeric format? are the headers variable length? How can you tell when HEADER1 stops and HEADER2 begins?
Accepted Answer
Walter Roberson
on 11 Apr 2016
You need a Finite State Machine. The Mathworks tools for that are http://www.mathworks.com/discovery/finite-state-machine.html but you probably do not need anywhere near the full power of that.
current_state = 0;
while true
this_input = fread(s, 1, 'uint8');
if feof(s); break; end
if state == 0 && this_input == 88 %0x55
current_state = 1;
elseif current_state == 1 && this_input == 170 %0xAA
current_state = 2;
now read the opcode and data and so on.
When you are through with it
current_state = 0;
else
current_state = 0;
end
end
6 Comments
Walter Roberson
on 14 Apr 2016
"persistent". Or a shared variable if you need to be able to reset the state.
More Answers (0)
See Also
Categories
Find more on Properties in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!