Escolar Documentos
Profissional Documentos
Cultura Documentos
GUIDE MATLAB
CONTENIDO
1. INTRODUCCIN
2. COMPONENTES
3. APLICACIN GUI
4. EJEMPLOS
5. GUI - SIMULINK
1. INTRODUCCIN
INICIO
>> guide
1
Se presenta el siguiente cuadro de dilogo:
2
c) GUI with Axes and Menu
Esta opcin es otro ejemplo el cual contiene el men File con las opciones Open,
Print y Close. En el formulario tiene un Popup menu, un push button y un objeto
Axes, podemos ejecutar el programa eligiendo alguna de las seis opciones que se
encuentran en el men despegable y haciendo click en el botn de comando.
3
2. COMPONENTES
CONTROL DESCRIPCIN
Push Button Genera una accin
Slider Representa un rango de valores
Radio Button Representa una opcin
Check Box Indica el estado de una opcin
Edit Text Para editar texto
Static text Muestra un string de texto
Pop-up Menu Provee una lista de opciones
Listbox Lista deslizable
Toggle Button Genera una accin on, off
Axes Para graficar
Panel Visualiza grupo de controles
Button Grup Es un panel exclusivo para radio buttons
y toggle buttons
ActiveX Control Despliega controles ActiveX en Gui
Cada uno de los elementos de GUI, tiene un conjunto de opciones que acceder
con click derecho. Aparece el siguiente submen:
4
La opcin Property Inspector nos permite personalizar cada elemento.
5
3. FUNCIONAMIENTO DE UNA APLICACIN GUI
celsius1=eval(get(handles.celsius,'string'));
%Para convertir celsius a kelvin
kelvin1=celsius1 + 273.15;
Notar que siempre se obtienen los datos a travs de los identificadores handles.
set(handles.kelvin,'string',kelvin1);
6
4. EJEMPLOS
Ejemplo: ConvTemperatura.fig
7
El programa genera el archivo siguiente ConvTemperatura.m :
% Adicionamos
% Para leer el dato colocado en celsius
celsius1=eval(get(handles.celsius,'string'));
%Para convertir celsius a kelvin y fehrenheit
kelvin1=celsius1 + 273.15;
fahrenheit1=1.8*celsius1 + 32;
%Para escribir datos en los Edit Text
set(handles.kelvin,'string',kelvin1);
set(handles.fahrenheit,'string',fahrenheit1);
% Adicionamos
% Para leer el dato colocado en kelvin
kelvin1=eval(get(handles.kelvin,'string'));
%Para convertir kelvin a celsius y fehrenheit
8
celsius1=kelvin1 - 273.15;
fahrenheit1=(kelvin1-273.15)*1.8 + 32;
%Para escribir datos en los Edit Text
set(handles.celsius,'string',celsius1);
set(handles.fahrenheit,'string',fahrenheit1);
% Adicionamos
% Para leer el dato colocado en fahrenheit
fahrenheit1=eval(get(handles.fahrenheit,'string'));
%Para convertir fahrenheit a celsius y kelvin
celsius1=(fahrenheit1-32)*5/9;
kelvin1=(fahrenheit1-32)*5/9 + 273.15;
%Para escribir datos en los Edit Text
set(handles.celsius,'string',celsius1);
set(handles.kelvin,'string',kelvin1);
9
Ejemplo: Grafica1.fig
10
function Frecuencia_Callback(hObject, eventdata, handles)
% hObject handle to Frecuencia (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Rangos de tiempo
t1=str2num(get(handles.TiempoInicial,'string'));
t2=str2num(get(handles.TiempoFinal,'string'));
% Vector tiempo
t=linspace(t1,t2,200);
% Valor de la frecuencia
frec=str2num(get(handles.Frecuencia,'string'));
% graficar funcin seno
y=sin(2*pi*frec*t);
plot(t,y);
Ejemplo: Slider.fig
11
12
function Frecuencia_Callback(hObject, eventdata, handles)
% hObject handle to Frecuencia (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Rangos de tiempo
t1=str2num(get(handles.TiempoInicial,'string'));
t2=str2num(get(handles.TiempoFinal,'string'));
% Vector tiempo
t=linspace(t1,t2,200);
% Valor de la frecuencia
frec=str2num(get(handles.Frecuencia,'string'));
% Barra de desplazamiento
editamin=get(handles.Barra,'Min');
editamax=get(handles.Barra,'Max');
%Chequear si el valor de frecuencia es numerico
if isnumeric(frec)&lenght(frec)==1&frec>=editamin&frec<=editamax
set(handles.Barra,'Value',frec)
elseif frec<editamin
set(gcbo,'string',editamin);
set(handles.Barra,'Value',editamin);
frec=editamin;
elseif frec>editamax
set(gcbo,'string',editamax);
set(handles.Barra,'value',editamax);
frec=editamax
end
13
% graficar funcin seno
y=sin(2*pi*frec*t);
plot(t,y);
set(handles.Frecuencia,'string',get(gcbo,'value'));
% Rangos de tiempo
t1=str2num(get(handles.TiempoInicial,'string'));
t2=str2num(get(handles.TiempoFinal,'string'));
% Vector tiempo
t=linspace(t1,t2,200);
frec=get(gcbo,'value');
y=sin(2*pi*frec*t);
plot(t,y);
Ejemplo: Calculadora.fig
Calculadora.m
14
% handles structure with handles and user data (see GUIDATA)
textString=get(handles.Res,'String');
textString=strcat(textString,'1');
set(handles.Res,'String',textString)
15
Al correr el programa se obtiene:
16
% handles structure with handles and user data (see GUIDATA)
textString=get(handles.Res,'String');
textString=eval(textString,'=');
set(handles.Res,'String',textString)
% --- Executes on button press in borrar.
function borrar_Callback(hObject, eventdata, handles)
% hObject handle to borrar (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
ini=char(' ');
set(handles.Res,'String',ini);
% --- Executes on button press in acerca.
function acerca_Callback(hObject, eventdata, handles)
% hObject handle to acerca (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
msgbox('Calculadora Sencilla','Acerca de');
Ejemplo: Paralelogramo.fig
17
% --- Executes on button press in GRAFIQUE.
function GRAFIQUE_Callback(hObject, eventdata, handles)
% hObject handle to GRAFIQUE (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
18
%Argumentos en forma matricial
lineas=[angulo1,longitud1;angulo2,longitud2;angulo3,longitud3];
%Clculo de las lneas
for i=1:3
angr=lineas(i,1)*pi/180;
m(i)=tan(angr);
x(i+1)=x(i)+lineas(i,2)*cos(angr);
y(i+1)=y(i)+lineas(i,2)*sin(angr);
delta=(x(i+1)-x(i))/100;
mx=x(i):delta:x(i+1);
my=m(i)*(mx-x(i))+y(i);
plot(mx,my,'r')
vertice=['A';'B';'C';'D'];
text(x(i),y(i),vertice(i))
title('ENCONTRAR UN LADO DEL PARALELOGRAMO')
hold on
end
% Argumentos de la cuarta recta
m=(y(1)-y(i+1))/(x(1)-x(i+1));
angr=atan(m);
ang=angr*180/pi
d=sqrt((y(1)-y(i+1))^2+(x(1)-x(i+1))^2)
delta=(x(1)-x(i+1))/100;
mx=x(i+1):delta:x(1);
my=m*(mx-x(i+1))+y(i+1);
plot(mx,my,'r')
text(x(i+1),y(i+1),vertice(i+1))
hold off
19
set(handles.Ang4,'string',angulo);
longitud=num2str(d);
set(handles.Long4,'string',longitud);
20
Ejemplo: ClaculoMasa.fig
21
% hObject handle to density (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
22
% Save the new volume value
handles.metricdata.volume = volume;
guidata(hObject,handles)
% --------------------------------------------------------------------
function unitgroup_SelectionChangeFcn(hObject, eventdata, handles)
% hObject handle to unitgroup (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
if (hObject == handles.english)
set(handles.text4, 'String', 'lb/cu.in');
set(handles.text5, 'String', 'cu.in');
set(handles.text6, 'String', 'lb');
23
else
set(handles.text4, 'String', 'kg/cu.m');
set(handles.text5, 'String', 'cu.m');
set(handles.text6, 'String', 'kg');
end
% --------------------------------------------------------------------
function initialize_gui(fig_handle, handles, isreset)
% If the metricdata field is present and the reset flag is false, it means
% we are we are just re-initializing a GUI by calling it from the cmd line
% while it is up. So, bail out as we dont want to reset the data.
if isfield(handles, 'metricdata') && ~isreset
return;
end
handles.metricdata.density = 0;
handles.metricdata.volume = 0;
24
Ejemplo: FigPopupmenu
25
function FigPopupmenu_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
26
function pushbutton1_Callback(hObject, eventdata, handles)
axes(handles.axes1);
cla;
popup_sel_index = get(handles.popupmenu1, 'Value');
switch popup_sel_index
case 1
plot(rand(5));
case 2
plot(sin(1:0.01:25.99));
case 3
bar(1:.5:10);
case 4
plot(membrane);
case 5
surf(peaks);
end
MENU EDITOR:
27
% --------------------------------------------------------------------
function FileMenu_Callback(hObject, eventdata, handles)
% hObject handle to FileMenu (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --------------------------------------------------------------------
function OpenMenuItem_Callback(hObject, eventdata, handles)
file = uigetfile('*.fig');
if ~isequal(file, 0)
28
open(file);
end
% --------------------------------------------------------------------
function PrintMenuItem_Callback(hObject, eventdata, handles)
printdlg(handles.figure1)
% --------------------------------------------------------------------
function CloseMenuItem_Callback(hObject, eventdata, handles)
selection = questdlg(['Close ' get(handles.figure1,'Name') '?'],...
['Close ' get(handles.figure1,'Name') '...'],...
'Yes','No','Yes');
if strcmp(selection,'No')
return;
end
delete(handles.figure1)
Ejemplo: Mensajes.fig
29
Adicionar a los Callbacks:
30
31
Para el caso especial de las preguntas podemos ejecutar o no sentencias
dependiendo de la respuesta escogida. Por ejemplo, si deseamos salir o no del
programa, se tiene1:
La funcin strcmp compara dos strings y si son iguales retorna el valor 1 (true).
Clear elimina todas los valores de workspace, clc limpia la pantalla y close all
cierra todos los Guide. Ntese que la secuencia 'Si','No','No' termina en 'No'; con
esto se logra que la parte No del cuadro de pregunta est resaltado. Si terminara
en 'Si', la parte Si del cuadro de pregunta se resaltara.
32
Ejemplo: Archivos.fig (uso de uigetfile)
33
% --- Executes on button press in DOC.
function DOC_Callback(hObject, eventdata, handles)
[FileName Path]=uigetfile({'*.doc;*.xls'},'Abrir documento');
if isequal(FileName,0)
return
else
winopen(strcat(Path,FileName));
end
34
Ejemplo: Listbox.fig
35
% contents{get(hObject,'Value')} returns selected item from listbox1
n=get(hObject,'Value');
gos=get(hObject,'String');
switch n
case 1
set(handles.text2,'string',...
['Codigo:2005202275. Nota Matlab=3.5']);
case 2
set(handles.text2,'string',...
['Codigo:2001101100. Nota Matlab=3.8']);
case 3
set(handles.text2,'string',...
['Codigo:2006264188. Nota Matlab=4.5']);
end
guidata(hObject,handles);
36
5. GUI - SIMULINK
Comandos utilizados:
find_System('Type','Nombre_simulink')
open_system(Nombre_simulink)
set_param(Nombre_simulink/Nombre_bloque)
PROGRAMA EN SIMULINK:
37
PROGRAMA EN GUIDE:
38
PROGRAMA EN MATLAB:
39
%--------------------------------------------------------------
onda=get(hObject,'Value');
if onda==1
set_param('simu/Signal Generator','Waveform','sine');
set_param(gcs,'simulationCommand','Start');
elseif onda==2
set_param('simu/Signal Generator','Waveform','square');
set_param(gcs,'simulationCommand','Start');
elseif onda==3
set_param('simu/Signal Generator','Waveform','sawtooth');
set_param(gcs,'simulationCommand','Start');
else
set_param('simu/Signal Generator','Waveform','random');
set_param(gcs,'simulationCommand','Start');
end
%---------------------------------------------------------------
%-------------------------------------------------------------------
f=get(hObject,'string');
set_param('simu/Signal Generator','Frequency',f);
set_param('Simulationcommand','Start');
%-------------------------------------------------------------------
40
Ejemplo: Reproducir sonido
msica.mdl
audio.fig (archivos.wav)
41
El Slider debe estar en Max= 10.0 y Min=0.0 para que se pueda escuchar el
cambio de volumen.
Audio.m
open_system('musica');
set_param('musica/volumen','Gain','0.5');
set_param('musica/From Wave File','FileName','sonido.wav');
42
set_param(gcs,'SimulationCommand','Stop')
Ejemplo: ActiveX
Circulo.m
43
handles.activex1.Label=['Radio=' a];
%-------------------------------------
%--------------------------------------
c=get(handles.slider1,'Value');
RadioInicial=(1/c)*handles.activex1.radius;
handles.activex1.Radius=RadioInicial;
handles.activex1.Label=['Radio=',num2str(handles.activex1.Radius)];
refresh(handles.figure1);
44
En la figura tambin se ha utilizado para tener el calendario, el ActiveX Control de
calendario 12.0
45