Get only numbers from serial port without any str2num() conversion
1 次查看(过去 30 天)
显示 更早的评论
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 个评论
Walter Roberson
2016-3-28
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.
采纳的回答
Walter Roberson
2016-3-25
str2num() uses a full eval() . str2double() is faster. You can also use fscanf with a format specifier,
fscanf(obj1, '%d')
0 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Biological and Health Sciences 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!