Ho scritto uno script Matlab che legge i dati utilizzando una porta COMM virtuale in in tempo reale. Ho eseguito una quantità significativa di elaborazione del segnale in un file.GUI Matlab che utilizzano GUIDA: desidera aggiornare dinamicamente i grafici
Successivamente, ho sentito la necessità di avere una GUI compatta che visualizza le informazioni come sommario.
Recentemente ho iniziato a scavare e leggere altro strumento GUI integrato di Matlab, GUIDE. Ho seguito alcuni tutorial e sono riuscito a visualizzare i miei grafici sulla GUI dopo aver premuto un pulsante.
Tuttavia, voglio la GUI per l'aggiornamento in tempo reale. Il mio vettore di dati è in costante aggiornamento (lettura dei dati dalla porta COMM). Voglio che la GUI mantenga aggiornando i grafici con i dati più recenti, anziché fare affidamento su un pulsante per un aggiornamento. Qualcuno può indicarmi la giusta direzione per l'aggiornamento in background?
Ecco il codice pertinente attualmente per la GUI:
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global data
global time
% Time domain plot
axes(handles.timeDomainPlot);
cla;
plot (time, data);
modificare il codice modificato:
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%Setting it to display something when it ends
% t = timer('TimerFcn', 'timerOn=false; disp(''Updating GUI!'')',...
t = timer(...
'TasksToExecute', 10, ... % Number of times to run the timer object
'Period', 3, ...
'TimerFcn', GUIUpdate());
%Starting the timer
start(t)
function GUIUpdate()
global data
global time
%Parameters below axes
global min
global max
% Time domain plot
axes(handles.timeDomainPlot);
cla;
plot (time, data);
%Other parameters:
set(handles.mean, 'String', mean);
set(handles.max, 'String', max);
L'errore che ottengo è:
??? Error using ==> GUI_Learning>GUIUpdate
Too many output arguments.
Error in ==>
@(hObject,eventdata)GUI_Learning('pushbutton1_Callback',hObject,eventdata,guidata(hObject))
??? Error while evaluating uicontrol Callback
Possibile duplicato: http://stackoverflow.com/questions/1007385/getting-matlab-timer-to-update-matlab-guide-gui – Nzbuu
@ c0d3rz Controlla questo collegamento sulla definizione delle richiamate timerfcn http: // www. mathworks.com/help/techdoc/matlab_prog/f9-39541.html#f9-42494 Provare a impostare 'timerfcn' su @GUIUpdate e modificare GUIUpdate in modo che contenga due input 'GUIUpdate (obj, event)'. 'obj' sarà la maniglia dell'oggetto timer e 'evento' avrà alcuni dettagli su come è stato chiamato. Per impostazione predefinita, i callback delle funzioni timer verranno passati almeno a questi due argomenti. Non sono sicuro che sia la causa esatta del tuo errore ma il tuo campione non sembra corretto. Se avrò una possibilità più tardi, cercherò di pubblicare un timer di esempio. –