Matlab - Graficar en dos axes de un GUI, señales leidas por dos puertos de Arduino

 
Vista:

Graficar en dos axes de un GUI, señales leidas por dos puertos de Arduino

Publicado por Stephs (1 intervención) el 07/12/2020 19:14:30
Ayuda!!
Lo que pasa es que quiero graficar dos señales de entrada de Arduino, leídas en vivo a los axes de GUI Matlab, si se grafican pero las dos se mandan al axes2 y no una a cada una, intente de todo pero por la manera de ordenar de mi código creo que no me lo permite, si alguien sabe como especificar el axes en drawnow de cada uno, seria genial.. Muchas gracias!


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
%close all;
clc;
 
delete(instrfind({'port'},{'COM6'}));%LECTURA CORRIENTE
puerto = serial('COM6','BaudRate',9600,'Terminator','CR/LF');
warning('off','MATLAB:serial:fscanf:unsuccessfulRead');
 
delete(instrfind({'port'},{'COM3'}));%LECTURA VELOCIDAD
puerto1 = serial('COM3','BaudRate',9600,'Terminator','CR/LF');
warning('off','MATLAB:serial:fscanf:unsuccessfulRead');
 
fopen(puerto);
fopen(puerto1);
 
 
tmax = 40; % tiempo de captura en s
rate = 2.3;
 
l1 = line(nan,nan,'Color','r','LineWidth',1);
l2 = line(nan,nan,'Color','b','LineWidth',1);
 
axes(handles.axes3);
xlim([0 tmax])
ylim([0 100])
title('Corriente en Fases de Motor');
xlabel('Tiempo (s)');
ylabel('Amperios');
grid on;
hold on;
 
axes(handles.axes2);
xlim([0 tmax])
ylim([0 100])
title('Velocidad del Motor');
xlabel('Tiempo (s)');
ylabel('Km/h');
grid on;
hold on;
 
v1 = zeros(1,tmax*round(rate));
v2 = zeros(1,tmax*round(rate));
i = 1;
t = 0;
 
% ejecutar bucle cronometrado
tic
while t<tmax
    t=toc;
 
    valorADC=fscanf(puerto,'%f')';
    valorADC1=fscanf(puerto1,'%f')';
 
    v1(i)=valorADC(1);
    v2(i)=valorADC1(1);
     x = linspace(0,i/rate,i);
     y = linspace(0,i/rate,i);
    set(l1,'YData',v1(1:i),'XData',x);
    drawnow
    set(l2,'YData',v2(1:i),'XData',y);
    drawnow
    % seguir
    i = i+1;
 
end
plot(x,v1)
plot(y,v2)
   clc;
fprintf('%g s de captura a %g cap/s \n',t,i/t);
 
fclose(puerto);
fclose(puerto1);
 
delete(puerto);
delete(puerto1);
clear puerto;
clear puerto1;
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