我正在尝试从两个传感器(在我的arduino上)读取正在发送到串行端口的值,并使用下面的matlab代码。但是,它错误地说??? Attempted to access sensor1(1); index out of bounds because numel(sensor1)=0
并且如果没有发生错误,则结果不准确。我知道这是因为我只是将1和2作为传感器值发送到com端口,结果两个数组也包含一些零(当一个应该全部为1而另一个全部为2时)。非常感谢任何帮助。
这是我的matlab代码:
close all;
clc;
fs = 1000; % sampling frequency (samplings per second)
mt = 20; % time for measurements
ind = 1;
nind = 1;
%Open serial port
delete(instrfind({'Port'},{'/dev/tty.usbmodem641'}));
serial_port=serial('/dev/tty.usbmodem641');
serial_port.BaudRate=115200;
warning('off','MATLAB:serial:fscanf:unsuccessfulRead');
%Open serial port
fopen(serial_port);
pause(2);
%Declare sample count
sample_count=1;
tic;
while toc < mt
time(ind) = toc;
sensor1=fscanf(serial_port,'%d')';
sensor2=fscanf(serial_port,'%d')';
channel1(ind) = (sensor1(1));
channel2(ind) = (sensor2(1));
% wait for appropriate time for next measurement
while( nind == ind )
nind = floor(toc*fs) + 1;
end
ind = nind;
end
%close connection
fclose(serial_port);
delete(serial_port);
这是我发送的arduino代码:
int sensor1=0;
int sensor2= 0;
void setup(){
Serial.begin(115200);
}
void loop(){
sensor1= 1;
sensor2= 2;
Serial.println(sensor1);
Serial.println(sensor2);
}
答案 0 :(得分:1)
您可以在fscanf语句之前尝试使用它:
while(get(serial_port,'BytesToRead')<2) ; end
这将等到读取它们之前串行缓冲区中有两个字节。
PS:如果您要发送号码,最好将它们作为数字而不是字符串发送 - 您需要发送三个字节来表示101 - 每个数字一个 - 而这可以作为单个字节发送。使用fwrite和fread在Arduino上的Matlab,Serial.write和Serial.read中执行此操作。