%borrar previos
delete(instrfind({'Port'},{'COM3'}));
%crear objeto serie
s = serial('COM3','BaudRate',9600,'Terminator','CR/LF');
warning('off','MATLAB:serial:fscanf:unsuccessfulRead');
%abrir puerto
fopen(s);
% parámetros de medidas
tmax = 10; % tiempo de captura en s
rate =43.9; % resultado experimental (comprobar)
% Relacion aproximadamente buena, 10 segunds ..> 43.9 de rate
% preparar la figura
f = figure('Name','Captura');
a = axes('XLim',[0 tmax],'YLim',[0 5.1]);
l1 = line(nan,nan,'Color','r','LineWidth',2);
l2 = line(nan,nan,'Color','b','LineWidth',2);
xlabel('Tiempo (s)')
ylabel('Voltaje (V)')
title('Captura de voltaje en tiempo real con Arduino')
grid on
hold on
% inicializar
v1 = zeros(1,tmax*rate);
v2 = zeros(1,tmax*rate);
i = 1;
t = 0;
% ejecutar bucle cronometrado
tic
while t<tmax
t = toc;
% leer del puerto serie
a = fscanf(s,'%d,%d')';
v1(i)=a(1)*5/1024;
v2(i)=a(2)*5/1024;
% dibujar en la figura
x = linspace(0,i/rate,i);
set(l1,'YData',v1(1:i),'XData',x);
set(l2,'YData',v2(1:i),'XData',x);
drawnow
% seguir
i = i+1;
end
% resultado del cronometro
clc;
fprintf('%g s de captura a %g cap/s \n',t,i/t);
%% Limpiar la escena del crimen
fclose(s);
delete(s);
clear s;
La linea roja corresponde a la variable v1 , que es lo que recibe del conversor AO
La linea azul corresponde a la variable v2 , que es lo que recibe del conversor A1
Oyes amigo, tengo un programa en LabView, uso de interface el arduino, pero quiero que se la igual por medio de matlab, ay manera de hacerlo, dame tus datos, para enviarte mi programita
ResponderEliminarLa verdad nunca he usado labview, no te puedo ayudar con eso
Eliminary si quisisera muestrear una señal cuadrada que modificaciones tendria que darle alcodigo?
ResponderEliminarDebería funcionar igual, la diferencia es lo que verás graficado en mi caso, como yo variaba los potenciometros, el dibujo se hacía en base a los valores de éstos. En tu caso la señal ya viene lista y se verá dibujada de forma cuadrada
Eliminar