Matlab 将MALTAB FIS合并到连续循环中
我目前正在使用两个Arduino微控制器读取两组数据,并通过蓝牙将数据发送到MATLAB。在代码中,MATLAB读入串行数据,通过一系列嵌套的“if”循环将其发送,以组织数据。一旦组织好,存储的数据将用作模糊逻辑的输入。我遇到的问题是模糊的。当我尝试使用存储的数据作为输入(数字)时,我收到一个错误,即它们是空的,即使MATLAB显示的数据没有问题 这是我的代码(忽略“x”“y”“z”变量,这些变量未在FIS中使用): 我收到的错误是:“第一个参数的列数应该与输入变量和Matlab 将MALTAB FIS合并到连续循环中,matlab,fuzzy-logic,Matlab,Fuzzy Logic,我目前正在使用两个Arduino微控制器读取两组数据,并通过蓝牙将数据发送到MATLAB。在代码中,MATLAB读入串行数据,通过一系列嵌套的“if”循环将其发送,以组织数据。一旦组织好,存储的数据将用作模糊逻辑的输入。我遇到的问题是模糊的。当我尝试使用存储的数据作为输入(数字)时,我收到一个错误,即它们是空的,即使MATLAB显示的数据没有问题 这是我的代码(忽略“x”“y”“z”变量,这些变量未在FIS中使用): 我收到的错误是:“第一个参数的列数应该与输入变量和 行数与输入值的独立集数相同
行数与输入值的独立集数相同。”错误是由于输入不是双精度的。通过合并'str2double',我可以将输入转换为double并输入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