Matlab - Problema con GUIDE

   
Vista:

Problema con GUIDE

Publicado por Luis (10 intervenciones) el 07/02/2013 17:31:49
Hola, estoy realizando una GUIDE de matlab en la cual tengo los siguientes botones:
1)Iniciar la comunicación (cuyo Tag es iniciar) en la cual Activo la comunicación serie entre un microcontrolador que tengo y el ordenador. De esta manera empiezo a recibir los datos que me manda el microcontrolador y los voy guardando en un vector, a la vez que los voy representando.
2)Interrumpir la comunicación. Con este botón quiero que en el momento de pulsarlo se interrumpa la comunicación, con lo cual dejaré de recibir datos del microcontrolador.

la función callback iniciar os la pongo a continuación:
% --- Executes on button press in iniciar.
function iniciar_Callback(hObject, eventdata, handles)
% hObject handle to iniciar (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%msgbox('Inicio de comunicación. Espere a nuevo mensaje de información en el que se indique que ha acabado de recibir datos.','Información')
handles.MSP=serial('COM5');
set(handles.MSP,'Baudrate',9600); % se configura la velocidad a 9600 Baudios
set(handles.MSP,'StopBits',1); % se configura bit de parada a uno
set(handles.MSP,'DataBits',8); % se configura que el dato es de 8 bits, debe estar entre 5 y 8
set(handles.MSP,'Parity','none'); % se configura sin paridad
%set(MSP,'OutputBufferSize',1); ”n” es el número de bytes a enviar
%set(MSP,'InputBufferSize' ,2); ”n” es el número de bytes a recibir
set(handles.MSP,'Timeout',1); % 1 segundos de tiempo de espera

fopen(handles.MSP);

%out = fread(MSP,1,'uint16')';
%tension = out.*(3.5/1024)';
%handles.fin=0;
K1= [1023];
i=1;
%while (K1(i)> 10)
%K1 = [K1 fread(MSP,1,'uint16')];
%i=i+1;
%pause(1);
%end
for j=1:120 %tomamos 1000 datos....
K1 = [K1 fread(handles.MSP,1,'uint16')];
%pause(1);
longitud=length(K1);
tension1 = K1.*(3.5/1024)';
tiempo=[1:1:longitud];
axes(handles.axes3);
plot(tiempo, tension1, 'LineWidth',2);
grid on;
end
handles.tension = K1.*(3.5/1024)';
fclose(handles.MSP);
delete(handles.MSP);
clear handles.MSP;
msgbox('Datos almacenados','Fin de procesado de datos');
handles.output = hObject;
guidata(hObject, handles);

la función callback interrumpir es la siguiente:
% --- Executes on button press in interrumpir.
function interrumpir_Callback(hObject, eventdata, handles)
% hObject handle to interrumpir (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
handles.parar=questdlg('¿Desea dejar de recibir datos?','Fin de recepción','Si','No','No');
if strcmp(handles.parar,'Si')
fclose(handles.MSP);
delete(handles.MSP);
clear handles.MSP;
end
handles.output=hObject;
guidata(hObject,handles);

Cuando le doy a ejecutar y presiono el boton Iniciar la comunicación, no hay ningún problema. Empieza a recibir datos y me los va representando en una gráfica.
El problema viene cuando le doy al botón de interrumpir la comunicación, que me sale el siguiente error y no para de recibir datos, sigue representándolos en la gráfica. Este es el error que me sale al presionar el botón Interrumpir la comunicación:

??? Reference to non-existent field 'MSP'.

Error in ==> pfc>interrumpir_Callback at 202
fclose(handles.MSP);

Error in ==> gui_mainfcn at 96
feval(varargin{:});

Error in ==> pfc at 42
gui_mainfcn(gui_State, varargin{:});

Error in ==>
@(hObject,eventdata)pfc('interrumpir_Callback',hObject,eventdata,guidata(hObject))


??? Error using ==> axes
Error while evaluating uicontrol Callback


A ver si me podéis echar una mano. Muchas gracias y perdón por las molestias.

Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Problema con GUIDE

Publicado por Luis (10 intervenciones) el 08/02/2013 11:48:42
En resumidas cuentas, lo que quiero es inicializar la comunicación serie cuando el usuario le de al botón Iniciar la comunicación y que en cualquier momento del programa el usuario pueda parar la comunicación (dándole al botón Interrumpir la comunicación) y dejar de recibir datos ( que creo que esto se haría cerrando el puerto serie) pero me da error y no sé por qué.
Si alguien tiene alguna idea de como se haría esto me sería de gran ayuda.

Un saludo y gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar