我目前正在使用两个Arduino微控制器读取两组数据,并通过蓝牙将数据发送到MATLAB。在代码中,MATLAB读取串行数据,然后通过一系列嵌套的“ if”循环将其发送以组织数据。一旦组织好,存储的数据将用作模糊的输入。我遇到的问题是与模糊。当我尝试使用存储的数据作为输入(数字)时,即使MATLAB显示数据没有问题,我也会收到一个错误,即它们为空。
这是我的代码(忽略'x''y''z'变量,这些变量未在FIS中使用):
a = Bluetooth('HC-05',1);
b = Bluetooth('IN',1)
a.ReadAsyncMode = 'continuous';
b.ReadAsyncMode = 'continuous';
fopen(a); %data collector A
fopen(b); %data collector B
%A data points
heartRateVarA=0;
temperatureVarA=0;
xVarA=0;
yVarA=0;
zVarA=0;
%B data points
heartRateVarB=0;
temperatureVarB=0;
xVarB=0;
yVarB=0;
zVarB=0;
%A & B loop --- Uses 'fgets' to collect 2 lines of data, one per declared
%variable before parsing into corresponding variable
while (a.Status == 'open')&(b.Status=='open')
for i=1 : 1 : 2
matchA = fgets(a); `
matchB = fgets(b);
testA=contains(matchA,'Celsius');
testB = contains(matchB,'Celsius');
if (testA==1)
temperatureVarA=matchA;
else
testA=contains(matchA,'BPM');
if(testA==1)
heartRateVarA=matchA;
else
testA=contains(matchA,'X:');
if(testA==1)
xVarA=matchA;
else
testA=contains(matchA,'Y:');
if(testA==1)
yVarA=matchA;
else
testA=contains(matchA,'Z:');
if(testA==1)
zVarA=matchA;
end
end
end
end
end
if (testB==1)
temperatureVarB=matchB;
else
testB=contains(matchB,'BPM');
if(testB==1)
heartRateVarB=matchB;
else
testB=contains(matchB,'X:');
if(testB==1)
xVarB=matchB;
else
testB=contains(matchB,'Y:');
if(testB==1)
yVarB=matchB;
else
testB=contains(matchB,'Z:');
if(testB==1)
zVarB=matchB;
end
end
end
end
end
end
%Display read and parsed in data
fprintf('Heart Rate A : '); disp(heartRateVarA);
fprintf('Temperature A : '); disp(temperatureVarA);
%fprintf('X A : '); disp(xVarA);
%fprintf('Y A : '); disp(yVarA);
%fprintf('Z A : '); disp(zVarA);
fprintf('Heart Rate B : '); disp(heartRateVarB);
fprintf('Temperature B : '); disp(temperatureVarB);
%fprintf('X B : '); disp(xVarB);
%fprintf('Y B : '); disp(yVarB);
%fprintf('Z B : '); disp(zVarB);
%FIS eval --- treats stored values of HR and temp variables as inputs
fis=FuzzyPrototype;
outputA = evalfis([heartRateVarA temperatureVarA],fis);
outputB = evalfis([heartRateVarB temperatureVarB],fis);`
disp(outputA)
disp(outputB)
if(a.Status ~= 'open')|(b.Status ~= 'open')
break;
end
pause(20);
end
我收到的错误是这样的:“第一个参数应该具有与输入变量一样多的列,并且 与独立的输入值集一样多的行。”
答案 0 :(得分:0)
错误是由于输入未加倍引起的。通过合并“ str2double”,我可以将输入转换为double并输入到FIS中。