将MALTAB FIS纳入连续循环

时间:2018-06-30 22:17:56

标签: matlab fuzzy-logic

我目前正在使用两个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

我收到的错误是这样的:“第一个参数应该具有与输入变量一样多的列,并且 与独立的输入值集一样多的行。”

1 个答案:

答案 0 :(得分:0)

错误是由于输入未加倍引起的。通过合并“ str2double”,我可以将输入转换为double并输入到FIS中。