Get only numbers from serial port without any str2num() conversion
Show older comments
Hi all!
In the serial com port channel values comes from 0 to 1023, this example from Arduino: https://monosnap.com/file/TiTehc6zWhu0zszPnCALbnjIMAfpzf
On the MATLAB side I parse it via function:
function sPs = GetsP()
global obj1;
sPs = 0;
while(obj1.BytesAvailable)
Psvoltage = fscanf(obj1);
if (~isempty(Psvoltage))
sPs = str2num(Psvoltage) * (100 / 1023);
break;
end
end
But I dont like this variant, because str2num() conversion is very slow. If I try to use Psvoltage = fread(obj1, 1, 'ushort'); I didnt see correct data, because fread() reads binary data.
So the question is: How can I try to read direct number data, without any slow string to number conversion? How can I need to use fread() to get numbers?
3 Comments
Ced
on 25 Mar 2016
I don't have a serial port to test this out, but as I understand, you are reading the values from a file? Is that true?
If you are always getting a string, I'm afraid there is no other way than to perform a str2num conversion in some way. Also, as you have mentioned in your other post, Check Two String Data, the output is not always consistent, so you won't get around parsing either.
The only alternative I can think of is to fetch the data stream directly. I imagine the original stream is binary. So, instead of fetching stream -> converting to string -> writing to file -> reading from file -> parsing -> converting to double, it should be possible to just get the stream directly. Or at least have a binary buffer file instead of a string file.
That being said, I'm having a hard time imagining that this is really an issue with the Arduino. Is the sensor feedback rate really that high?
Sergey Makovkin
on 28 Mar 2016
Walter Roberson
on 28 Mar 2016
Reprogram the arduino code to send uint16 instead of text. You only need 10 bits of the 16, so you could even pack in some flags like "Beginning of Row" to help synchronize. Or you could take advantage of the extra 6 bits to add error correcting codes to make it easier to recover from potential dropped bytes.
Accepted Answer
More Answers (0)
Categories
Find more on Instrument Control Toolbox 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!