Matlab - Devoluciones de llamada entre variables y Botones, Guidata

 
Vista:
sin imagen de perfil

Devoluciones de llamada entre variables y Botones, Guidata

Publicado por Carlos Daniel Ortiz (1 intervención) el 06/06/2021 22:26:48
Buen día para todos, estoy realizando un programa para graficar, y se me ocurrió un campo de Gráfica Animada, pero quiero que grafique Coseno cuando presione el botón, y que se detenga la grafica, cuando presiones el botón stop, pero no lo he conseguido, intenté con guidata, pero no se porque no me funciona.

Así el código como esta, correría si tuvieramos valores en ValorCos=1 y en valor=0, queriendo decir que se ejecute con coseno, pero me da error

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
%---------------GRAFICA CON ANIMACION----------------------------------
% ---------Presion de Boton Coseno-----------------
function BotonCoseno_Anim_Callback(hObject, eventdata, handles)
 
handles.valorCos=get(hObject, 'Value');
valorCos=[handles.valorCos]
guidata(hObject, handles)
 
% --------Boton para detener la Grafica--------------------
function stop_Callback(hObject, eventdata, handles)
 
handles.valor=get(hObject, 'Value');
valor=[handles.valor];
guidata(hObject, handles)
 
 
% --------Botón de Graficar Animada------------
function graficar_Anim_Callback(hObject, eventdata, handles)
 
valor=handles.valor;
valorCos=handles.valorCos;
 
if valor == 1
    parar=true;
else
    parar=false;
end
 
if valorCos == 1
    FCos=true;
else
    FCos=false;
end
 
set(get(handles.axes1,'Xlabel'),'String','Tiempo (Segundos)')
set(get(handles.axes1,'Ylabel'),'String','Funcion')
linea1=line('parent', handles.axes1,'xdata',[],'ydata',[],'color','r','LineWidth',2.5);
linea2=line('parent', handles.axes1,'xdata',[],'ydata',[],'color','k','LineWidth',2);
 
%%funcion GRAFICAR
    tiempo=(0);
    salida=(0);
    salida2=(0);
    %Cada cuanto se va graficando el axe
    dt=0.1;
    %LIMITES INICIALES
    limx=[0 40];
    limy=[-3 3];
    set(handles.axes1,'xlim',limx,'ylim',limy);
     %%Grafico
        k=1;nit=800;
        while(~parar)
            y=2*sin(tiempo(k));
            z=cos(4*tiempo(k));
            if FCos == true
                set(handles.BotonCoseno_Anim,'string',z);
            end
            set(handles.FuncionSeno_Anim,'string',y);
            %Actualiza las variables del GRAFICO
            tiempo=[tiempo tiempo(end)+dt];
            salida = [salida y];
            salida2 = [salida2 z];
 
            %Grafico de las lineas
            set(linea1,'xdata',tiempo,'ydata',salida);
            pause(0.1);
             if FCos == true
                set(linea2,'xdata',tiempo,'ydata',salida2);
             end
             if tiempo(end)>=limx
                 limx=[0 limx(2)+40]
                 set(handles.axes1,'xlim',limx)
             end
             k=k+1;
             if(k==nit)
                 parar=true;
             end
        end

Muchas Gracias, quedo atento a cualquier ayuda.
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