【发布时间】:2016-06-19 06:22:02
【问题描述】:
我正在使用带有 Matrix Sensor 1610 的 Kitronyx 滑雪板(它有一个 Arduino Leonardo)。我想将我的数据从串行端口直接读取到 Matlab 并可视化它。
我有两个我认为相关的问题: 首先,我可以阅读矩阵,但有延迟。我等待的时间越长,延迟就越长。
其次,我总会得到:
使用 serial/fprintf 时出错(第 144 行)
意外错误:写入操作期间发生超时..
InputBufferSize 越大,我绘制数据的时间就越长(因为问题一,这并不重要)
我怎么知道方便的缓冲区大小是多少?有谁知道为什么会延迟以及如何摆脱它?
非常感谢您
迈克
close all %close all figures
clear all %clear all workspace variables
fclose('all') %close all Files
delete(instrfindall) %Reset Com Port
delete(timerfindall) %Delete Timers
% setup serial
serialPort = serial('COM3');
command = 'A';
nrow = 16;
ncol = 10;
row_index = [9,10,11,12,13,14,15,16,8,7,6,5,4,3,2,1];
col_index = [1,2,3,4,5,6,7,8,9,10];
% 10x16 = 160 bytes
lendata = 160;
BaudRate = 11520;
InputBufferSize = 115200;
Timeout = 5;
set(serialPort , 'BaudRate', BaudRate);
set(serialPort , 'InputBufferSize', InputBufferSize);
set(serialPort , 'Timeout', Timeout);
fopen(serialPort);
while 1
% Request data
fprintf(serialPort, command);
% Get data
%Data is read as string (CSV)
data_string = fgets(serialPort);
data_string_array = strsplit(data_string, ',');
data = str2double(data_string_array);
% Reshape data (1D -> 2D array)
data2d = zeros(nrow, ncol);
k = 1;
for i = 1:nrow
for j = 1:ncol
data2d(row_index(i), col_index(j)) = data(k);
k = k + 1;
end
end
%resize 16x10 image to 160x100 image
data2d_resized = imresize(data2d,50);
imshow(data2d_resized,[0 100]);
end
【问题讨论】:
-
当您说“我等待的时间越长延迟越长”时,您的意思是超时时间越长等待的时间越长?
-
我会冒险猜测您正在控制的仪器正在等待终止字符和/或正在发送 Matlab 未检测到的终止字符...
-
不,我的意思是在前 10 秒内,我可以看到我的数据传输延迟比一分钟后的延迟更短。因此,我的代码运行的时间越长,我等待看到传感器响应的时间就越长。我得到一个又一个矩阵。如果终止字符有问题,我的矩阵不会被打乱吗?你将如何检测它?非常感谢您的帮助?
-
嗯...听起来不是终止字符是问题然后...
-
会不会和InputBufferSize有关?我只是输入了一个数字以使其工作