В настоящее время я использую два микроконтроллера Arduino для считывания двух наборов данных и отправки данных в MATLAB через Bluetooth. В коде MATLAB считывает последовательные данные, отправляет их через серию вложенных циклов «если» для организации данных. После организации сохраненные данные используются в качестве входных данных для нечеткого. У меня проблема с Пушистиком. Когда я пытаюсь использовать сохраненные данные в качестве входных данных (числовые), я получаю сообщение об ошибке, что они пусты, даже если 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
Я получаю сообщение об ошибке: «Первый аргумент должен иметь столько столбцов, сколько входных переменных и
столько строк, сколько независимых наборов входных значений. "