0

vec_A、vec_B、vec_c がランダム データの行列であるとします。5分ごとにテキストファイルにデータを書き込みたいのですが、私のコードは次のとおりです:

function samplegui_OpeningFcn(hObject, ~, handles, varargin)

handles.timer = timer(...
       'ExecutionMode', 'fixedRate', ...   % Run timer repeatedly
       'Period', 300, ...                % Initial period.
       'TimerFcn', {@open,hObject}); % Specify callback

handles.output = hObject;
handles.vec_A=[];
handles.vec_B=[];
handles.vec_C=[];
guidata(hObject, handles);

function open_Callback(hObject, eventdata, handles) % push button to receive serial data.

cnt=0;

while 1
       
       % Getting data  from Serial Port
        get_lines=fgets(handles.se) % getting data from serial port 
           if~isempty(get_lines)
            cnt=cnt+1;   
       if strfind(get_lines,'T')   %Parsing data
       handles.vec_A=[handles.vec_A;[timet newword]];
       plot(handles.vec_A(:,1),handles.vec_A(:,2:end),'r'); % plotting

       % Same follows for parsing and plot vec_B and Vec_C
       drawnow(); % to update the Plots
       end
     end
Pause(.05);
   
      start(handles.timer);  % saving the data
      dlmwrite('My_sample1.txt',handles.vec_A);
      dlmwrite('My_sample2.txt',handles.vec_B);
      dlmwrite('My_sample3.txt',handles.vec_C);
      stop(handles.timer);
end
guidata(hObject, handles);

コードの実行中に、次のエラーが発生します。

タイマー 'timer-6' の TimerFcn を評価中にエラーが発生しました

入力引数が多すぎます。

この場合、タイマーを実行して 5 分ごとにデータを正常に書き込む方法、またはそれを行う他の方法を提案する方法。

4

1 に答える 1

2

を定義TimerFcnしましたが{@open, hObject}、 という名前の関数がありませんopenopen代わりに、 3 つの入力引数 (タイマー オブジェクト、イベント オブジェクト、および) を使用してビルトインを呼び出そうとしていますが、 1 つの入力引数しか受け入れないhObjectため、エラーが発生しています。open

そうは言っても、あなたが提供したコードがあなたが望むものに近いものをどのように達成するかはまったく明らかではありません. このようなものがうまくいくかもしれません。

function samplegui_OpeningFcn(hObject, ~, handles, varargin)

    handles.timer = timer(...
            'ExecutionMode', 'fixedRate', ...   % Run timer repeatedly
            'Period', 300, ...                % Initial period.
            'TimerFcn', @(s,e)write_data()); % Specify callback

    handles.output = hObject;
    handles.vec_A=[];
    handles.vec_B=[];
    handles.vec_C=[];
    guidata(hObject, handles);

    start(handles.timer);

    %// Now update your data in a loop

    cnt = 0;

    while true
        %// Getting data  from Serial Port
        get_lines = fgets(handles.se) 
        if ~isempty(LINES)
            cnt = cnt + 1;   
            if strfind(LINES, 'T')
                handles.vec_A = [handles.vec_A; [timet newword]];
                plot(handles.vec_A(:,1), handles.vec_A(:,2:end),'r');
                drawnow
            end
        end
    end

    function write_data()
        %// Write it to file
        dlmwrite('My_sample1.txt',handles.vec_A);
        dlmwrite('My_sample2.txt',handles.vec_B);
        dlmwrite('My_sample3.txt',handles.vec_C);
    end
end
于 2016-04-18T13:15:09.143 に答える